Message ID | 1345167310-8738-5-git-send-email-crope@iki.fi (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Em Fri, 17 Aug 2012 04:35:08 +0300 Antti Palosaari <crope@iki.fi> escreveu: > Make LNA run-time switching possible for PCTV nanoStick T2 290e! > > Signed-off-by: Antti Palosaari <crope@iki.fi> > --- > drivers/media/usb/em28xx/em28xx-dvb.c | 40 ++++++++++++++++++++++++++++++----- > 1 file changed, 35 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c > index 34c5ea9..75f907a 100644 > --- a/drivers/media/usb/em28xx/em28xx-dvb.c > +++ b/drivers/media/usb/em28xx/em28xx-dvb.c > @@ -81,6 +81,7 @@ struct em28xx_dvb { > int (*gate_ctrl)(struct dvb_frontend *, int); > struct semaphore pll_mutex; > bool dont_attach_fe1; > + int gpio; Please, don't call it simply as "gpio". There are 12 GPIO pins at em28xx devices, used by tuners, demods, IR's, LED's, etc. Instead, you should associate it with its function. I would call it as "lna_gpio" (or something like that). > }; > > > @@ -568,6 +569,33 @@ static void pctv_520e_init(struct em28xx *dev) > i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len); > }; > > +static int em28xx_pctv_290e_set_lna(struct dvb_frontend *fe, int val) > +{ > + struct em28xx *dev = fe->dvb->priv; > +#ifdef CONFIG_GPIOLIB > + struct em28xx_dvb *dvb = dev->dvb; > + int ret; > + unsigned long flags; > + > + if (val) > + flags = GPIOF_OUT_INIT_LOW; > + else > + flags = GPIOF_OUT_INIT_HIGH; > + > + ret = gpio_request_one(dvb->gpio, flags, NULL); > + if (ret) > + em28xx_errdev("gpio request failed %d\n", ret); > + else > + gpio_free(dvb->gpio); > + > + return ret; > +#else > + dev_warn(&dev->udev->dev, "%s: LNA control is disabled\n", > + KBUILD_MODNAME); > + return 0; > +#endif > +} > + > static int em28xx_mt352_terratec_xs_init(struct dvb_frontend *fe) > { > /* Values extracted from a USB trace of the Terratec Windows driver */ > @@ -809,7 +837,7 @@ static void em28xx_unregister_dvb(struct em28xx_dvb *dvb) > > static int em28xx_dvb_init(struct em28xx *dev) > { > - int result = 0, mfe_shared = 0, gpio_chip_base; > + int result = 0, mfe_shared = 0; > struct em28xx_dvb *dvb; > > if (!dev->board.has_dvb) { > @@ -958,7 +986,7 @@ static int em28xx_dvb_init(struct em28xx *dev) > dvb->fe[0] = dvb_attach(cxd2820r_attach, > &em28xx_cxd2820r_config, > &dev->i2c_adap, > - &gpio_chip_base); > + &dvb->gpio); > if (dvb->fe[0]) { > /* FE 0 attach tuner */ > if (!dvb_attach(tda18271_attach, > @@ -973,15 +1001,17 @@ static int em28xx_dvb_init(struct em28xx *dev) > } > } > > +#ifdef CONFIG_GPIOLIB > /* enable LNA for DVB-T, DVB-T2 and DVB-C */ > - result = gpio_request_one(gpio_chip_base, GPIOF_INIT_LOW, > - "LNA"); > + result = gpio_request_one(dvb->gpio, GPIOF_OUT_INIT_LOW, NULL); > if (result) > em28xx_errdev("gpio request failed %d\n", result); > else > - gpio_free(gpio_chip_base); > + gpio_free(dvb->gpio); > > result = 0; /* continue even set LNA fails */ > +#endif > + dvb->fe[0]->ops.set_lna = em28xx_pctv_290e_set_lna; > break; > case EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C: > {
Em Thu, 27 Sep 2012 14:41:25 -0300 Mauro Carvalho Chehab <mchehab@redhat.com> escreveu: > Em Fri, 17 Aug 2012 04:35:08 +0300 > Antti Palosaari <crope@iki.fi> escreveu: > > > Make LNA run-time switching possible for PCTV nanoStick T2 290e! > > > > Signed-off-by: Antti Palosaari <crope@iki.fi> > > --- > > drivers/media/usb/em28xx/em28xx-dvb.c | 40 ++++++++++++++++++++++++++++++----- > > 1 file changed, 35 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c > > index 34c5ea9..75f907a 100644 > > --- a/drivers/media/usb/em28xx/em28xx-dvb.c > > +++ b/drivers/media/usb/em28xx/em28xx-dvb.c > > @@ -81,6 +81,7 @@ struct em28xx_dvb { > > int (*gate_ctrl)(struct dvb_frontend *, int); > > struct semaphore pll_mutex; > > bool dont_attach_fe1; > > + int gpio; > > Please, don't call it simply as "gpio". There are 12 GPIO pins at em28xx devices, > used by tuners, demods, IR's, LED's, etc. Instead, you should associate it > with its function. I would call it as "lna_gpio" (or something like that). Due to this changeset, I had to remove those two patches from the list of applied ones. Aug,17 2012: cxd2820r: use static GPIO config when GPIOLIB is undefined 0006-cxd2820r-use-static-GPIO-config-when-GPIOLIB-is-unde.patch Antti Palosaari <crope@iki.fi> Sep,20 2012: em28xx: do not set PCTV 290e LNA handler if fe attach fail 0019-em28xx-do-not-set-PCTV-290e-LNA-handler-if-fe-attach.patch Antti Palosaari <crope@iki.fi> Please, re-submit them when you replace "gpio" by something meaningful. Thanks! Mauro -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c index 34c5ea9..75f907a 100644 --- a/drivers/media/usb/em28xx/em28xx-dvb.c +++ b/drivers/media/usb/em28xx/em28xx-dvb.c @@ -81,6 +81,7 @@ struct em28xx_dvb { int (*gate_ctrl)(struct dvb_frontend *, int); struct semaphore pll_mutex; bool dont_attach_fe1; + int gpio; }; @@ -568,6 +569,33 @@ static void pctv_520e_init(struct em28xx *dev) i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len); }; +static int em28xx_pctv_290e_set_lna(struct dvb_frontend *fe, int val) +{ + struct em28xx *dev = fe->dvb->priv; +#ifdef CONFIG_GPIOLIB + struct em28xx_dvb *dvb = dev->dvb; + int ret; + unsigned long flags; + + if (val) + flags = GPIOF_OUT_INIT_LOW; + else + flags = GPIOF_OUT_INIT_HIGH; + + ret = gpio_request_one(dvb->gpio, flags, NULL); + if (ret) + em28xx_errdev("gpio request failed %d\n", ret); + else + gpio_free(dvb->gpio); + + return ret; +#else + dev_warn(&dev->udev->dev, "%s: LNA control is disabled\n", + KBUILD_MODNAME); + return 0; +#endif +} + static int em28xx_mt352_terratec_xs_init(struct dvb_frontend *fe) { /* Values extracted from a USB trace of the Terratec Windows driver */ @@ -809,7 +837,7 @@ static void em28xx_unregister_dvb(struct em28xx_dvb *dvb) static int em28xx_dvb_init(struct em28xx *dev) { - int result = 0, mfe_shared = 0, gpio_chip_base; + int result = 0, mfe_shared = 0; struct em28xx_dvb *dvb; if (!dev->board.has_dvb) { @@ -958,7 +986,7 @@ static int em28xx_dvb_init(struct em28xx *dev) dvb->fe[0] = dvb_attach(cxd2820r_attach, &em28xx_cxd2820r_config, &dev->i2c_adap, - &gpio_chip_base); + &dvb->gpio); if (dvb->fe[0]) { /* FE 0 attach tuner */ if (!dvb_attach(tda18271_attach, @@ -973,15 +1001,17 @@ static int em28xx_dvb_init(struct em28xx *dev) } } +#ifdef CONFIG_GPIOLIB /* enable LNA for DVB-T, DVB-T2 and DVB-C */ - result = gpio_request_one(gpio_chip_base, GPIOF_INIT_LOW, - "LNA"); + result = gpio_request_one(dvb->gpio, GPIOF_OUT_INIT_LOW, NULL); if (result) em28xx_errdev("gpio request failed %d\n", result); else - gpio_free(gpio_chip_base); + gpio_free(dvb->gpio); result = 0; /* continue even set LNA fails */ +#endif + dvb->fe[0]->ops.set_lna = em28xx_pctv_290e_set_lna; break; case EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C: {
Make LNA run-time switching possible for PCTV nanoStick T2 290e! Signed-off-by: Antti Palosaari <crope@iki.fi> --- drivers/media/usb/em28xx/em28xx-dvb.c | 40 ++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-)