On Mon, Jun 09, 2008 at 04:05:43PM -0400, Eduardo Valentin wrote:
> +static void tea5761_set_audout_mode(struct tea5761_device *tea, int audmode)
>  {
> -     struct tea5761_regs *r = &tea->regs;
> -
> -     if (!(r->tnctrl & TEA5761_TNCTRL_PUPD0)) {
> -             r->tnctrl &= ~(TEA5761_TNCTRL_AFM | TEA5761_TNCTRL_MU |
> -                            TEA5761_TNCTRL_HLSI);
> -             r->testreg |= TEA5761_TESTREG_TRIGFR;
> -             r->tnctrl |= TEA5761_TNCTRL_PUPD0;
> -             return tea5761_write_regs(tea);
> +     struct dvb_frontend *fe = &tea->fe;
> +     struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
> +     struct analog_parameters params = {
> +             .mode           = V4L2_TUNER_RADIO,
> +             .frequency      = tea->freq,
> +             .audmode        = audmode,
> +     };
> +
> +     if (NULL == fe_tuner_ops->set_analog_params) {
> +             dev_warn(tea->dev,
> +                     "Tuner frontend module has no way to set frequency\n");
> +             return;
>       }
> +     if (!fe_tuner_ops->set_analog_params(fe, &params))
> +             tea->audmode = audmode;

instead of both ifs, how about:

        if (fe_tuner_ops->set_analog_params) {
                tea->audmode =
                fe_tuner_ops->set_analog_params(fe, &params) ?
                        audmode : 0;
        }
>  }

> +static void tea5761_mute(struct tea5761_device *tea, int on)
> +{
> +     struct dvb_frontend *fe = &tea->fe;
> +     struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
> +     struct analog_parameters params = {
> +             .mode           = on ? T_STANDBY : V4L2_TUNER_RADIO,
> +             .frequency      = tea->freq,
> +             .audmode        = tea->audmode,
> +     };
> +
> +     if (NULL == fe_tuner_ops->set_analog_params) {
> +             dev_warn(tea->dev,
> +                     "Tuner frontend module has no way to set frequency\n");
> +             return;
>       }
> +     if (!fe_tuner_ops->set_analog_params(fe, &params))
> +             tea->mute = on;

samething here.

>  }

>  static int tea5761_i2c_driver_probe(struct i2c_client *client,
> @@ -422,12 +407,24 @@ static int tea5761_i2c_driver_probe(struct i2c_client 
> *client,
>  
>       mutex_init(&tea->mutex);
>  
> -     tea->i2c_dev = client;
> +     /* Tuner attach */
> +     if (!dvb_attach(tea5761_attach, &tea->fe, client->adapter,
> +                     client->addr)) {
> +             dev_err(&client->dev, "Could not attach tuner\n");
> +             err = -ENODEV;
> +             goto exit;
> +     }
> +
> +     /* initialize and power off the chip */
> +     tea5761_power_up(tea);
> +     tea5761_set_audout_mode(tea, V4L2_TUNER_MODE_STEREO);
> +     tea5761_mute(tea, 0);
> +     tea5761_power_down(tea);
>  
>       /* V4L initialization */
>       video_dev = video_device_alloc();
>       if (video_dev == NULL) {

        if (!video_dev)

> -             dev_err(&client->dev, "couldn't allocate memory\n");
> +             dev_err(&client->dev, "Could not allocate memory\n");
>               err = -ENOMEM;
>               goto exit;
>       }
> @@ -436,25 +433,15 @@ static int tea5761_i2c_driver_probe(struct i2c_client 
> *client,
>       *video_dev = tea5761_video_device;
>       video_dev->dev = &client->dev;
>       i2c_set_clientdata(client, video_dev);
> -
> -     /* initialize and power off the chip */
> -     tea5761_read_regs(tea);
> -     tea5761_set_audout_mode(tea, V4L2_TUNER_MODE_STEREO);
> -     tea5761_mute(tea, 0);
> -     tea5761_power_down(tea);
> -
> -     tea5761.video_dev = video_dev;
> -     tea5761.i2c_dev = client;
> +     tea->video_dev = video_dev;
> +     tea->dev = &client->dev;
>  
>       err = video_register_device(video_dev, VFL_TYPE_RADIO, radio_nr);
>       if (err) {
> -             dev_err(&client->dev, "couldn't register video device\n");
> +             dev_err(&client->dev, "Could not register video device\n");
>               goto err_video_alloc;
>       }
>  
> -     dev_info(&client->dev, "tea5761 (version %d) detected\n",
> -             (tea->regs.manid >> 12) & 0xf);
> -
>       return 0;
>  
>  err_video_alloc:
> @@ -492,7 +479,8 @@ static int __init tea5761_init(void)
>  {
>       int res;
>  
> -     if ((res = i2c_add_driver(&tea5761_driver))) {
> +     res = i2c_add_driver(&tea5761_driver);
> +     if (res) {
>               printk(KERN_ERR DRIVER_NAME ": driver registration failed\n");
>               return res;

not needed, return i2c_add_driver(&tea5761_driver); is enough as i2c
subsystem already prints out error messages in case of failed probe.

>       }

-- 
Best Regards,

Felipe Balbi
[EMAIL PROTECTED]
http://blog.felipebalbi.com
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to