Re: [PATCH 4/6] em28xx: implement FE set_lna() callback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Fri, 17 Aug 2012 04:35:08 +0300
Antti Palosaari <crope@xxxxxx> escreveu:

> Make LNA run-time switching possible for PCTV nanoStick T2 290e!
> 
> Signed-off-by: Antti Palosaari <crope@xxxxxx>
> ---
>  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:
>  	{


-- 
Regards,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux