/*---------------------------------------------------------------------*/
 
-static void set_audio(struct dvb_frontend *fe)
+static void set_audio(struct dvb_frontend *fe,
+                     struct analog_parameters *params)
 {
        struct tda8290_priv *priv = fe->analog_demod_priv;
        struct tuner *t = priv->t;
        char* mode;
 
-       if (t->std & V4L2_STD_MN) {
+       if (params->std & V4L2_STD_MN) {
                priv->tda8290_easy_mode = 0x01;
                mode = "MN";
-       } else if (t->std & V4L2_STD_B) {
+       } else if (params->std & V4L2_STD_B) {
                priv->tda8290_easy_mode = 0x02;
                mode = "B";
-       } else if (t->std & V4L2_STD_GH) {
+       } else if (params->std & V4L2_STD_GH) {
                priv->tda8290_easy_mode = 0x04;
                mode = "GH";
-       } else if (t->std & V4L2_STD_PAL_I) {
+       } else if (params->std & V4L2_STD_PAL_I) {
                priv->tda8290_easy_mode = 0x08;
                mode = "I";
-       } else if (t->std & V4L2_STD_DK) {
+       } else if (params->std & V4L2_STD_DK) {
                priv->tda8290_easy_mode = 0x10;
                mode = "DK";
-       } else if (t->std & V4L2_STD_SECAM_L) {
+       } else if (params->std & V4L2_STD_SECAM_L) {
                priv->tda8290_easy_mode = 0x20;
                mode = "L";
-       } else if (t->std & V4L2_STD_SECAM_LC) {
+       } else if (params->std & V4L2_STD_SECAM_LC) {
                priv->tda8290_easy_mode = 0x40;
                mode = "LC";
        } else {
        tuner_dbg("setting tda829x to system %s\n", mode);
 }
 
-static void tda8290_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void tda8290_set_params(struct dvb_frontend *fe,
+                              struct analog_parameters *params)
 {
        struct tda8290_priv *priv = fe->analog_demod_priv;
        struct tuner *t = priv->t;
                      pll_stat;
        int i;
 
-       struct analog_parameters params = {
-               .frequency = freq,
-               .mode      = t->mode,
-               .audmode   = t->audmode,
-               .std       = t->std
-       };
-
-       set_audio(fe);
+       set_audio(fe, params);
 
        tuner_dbg("tda827xa config is 0x%02x\n", t->config);
        tuner_i2c_xfer_send(&priv->i2c_props, easy_mode, 2);
        tda8290_i2c_bridge(fe, 1);
 
        if (fe->ops.tuner_ops.set_analog_params)
-               fe->ops.tuner_ops.set_analog_params(fe, ¶ms);
+               fe->ops.tuner_ops.set_analog_params(fe, params);
 
        for (i = 0; i < 3; i++) {
                tuner_i2c_xfer_send(&priv->i2c_props, &addr_pll_stat, 1);
 
 /*---------------------------------------------------------------------*/
 
-static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void tda8295_set_params(struct dvb_frontend *fe,
+                              struct analog_parameters *params)
 {
        struct tda8290_priv *priv = fe->analog_demod_priv;
        struct tuner *t = priv->t;
 
        unsigned char blanking_mode[]     = { 0x1d, 0x00 };
 
-       struct analog_parameters params = {
-               .frequency = freq,
-               .mode      = t->mode,
-               .audmode   = t->audmode,
-               .std       = t->std
-       };
-
-       set_audio(fe);
+       set_audio(fe, params);
 
-       tuner_dbg("%s: freq = %d\n", __FUNCTION__, freq);
+       tuner_dbg("%s: freq = %d\n", __FUNCTION__, params->frequency);
 
        tda8295_power(fe, 1);
        tda8295_agc1_out(fe, 1);
        tda8295_i2c_bridge(fe, 1);
 
        if (fe->ops.tuner_ops.set_analog_params)
-               fe->ops.tuner_ops.set_analog_params(fe, ¶ms);
+               fe->ops.tuner_ops.set_analog_params(fe, params);
 
        if (priv->cfg.agcf)
                priv->cfg.agcf(fe);
 }
 
 static struct analog_tuner_ops tda8290_tuner_ops = {
-       .set_tv_freq    = tda8290_set_freq,
-       .set_radio_freq = tda8290_set_freq,
+       .set_params     = tda8290_set_params,
        .has_signal     = tda8290_has_signal,
        .standby        = tda8290_standby,
        .release        = tda829x_release,
 };
 
 static struct analog_tuner_ops tda8295_tuner_ops = {
-       .set_tv_freq    = tda8295_set_freq,
-       .set_radio_freq = tda8295_set_freq,
+       .set_params     = tda8295_set_params,
        .has_signal     = tda8295_has_signal,
        .standby        = tda8295_standby,
        .release        = tda829x_release,
 
 
 /* ---------------------------------------------------------------------- */
 
-static void fe_set_freq(struct dvb_frontend *fe, unsigned int freq)
+static void fe_set_params(struct dvb_frontend *fe,
+                         struct analog_parameters *params)
 {
        struct dvb_tuner_ops *fe_tuner_ops = &fe->ops.tuner_ops;
        struct tuner *t = fe->analog_demod_priv;
 
-       struct analog_parameters params = {
-               .frequency = freq,
-               .mode      = t->mode,
-               .audmode   = t->audmode,
-               .std       = t->std
-       };
-
        if (NULL == fe_tuner_ops->set_analog_params) {
                tuner_warn("Tuner frontend module has no way to set freq\n");
                return;
        }
-       fe_tuner_ops->set_analog_params(fe, ¶ms);
+       fe_tuner_ops->set_analog_params(fe, params);
 }
 
 static void fe_release(struct dvb_frontend *fe)
 static void tuner_status(struct dvb_frontend *fe);
 
 static struct analog_tuner_ops tuner_core_ops = {
-       .set_tv_freq    = fe_set_freq,
-       .set_radio_freq = fe_set_freq,
+       .set_params     = fe_set_params,
        .standby        = fe_standby,
        .release        = fe_release,
        .has_signal     = fe_has_signal,
        struct tuner *t = i2c_get_clientdata(c);
        struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
 
+       struct analog_parameters params = {
+               .mode      = t->mode,
+               .audmode   = t->audmode,
+               .std       = t->std
+       };
+
        if (t->type == UNSET) {
                tuner_warn ("tuner type not set\n");
                return;
        }
-       if ((NULL == ops) || (NULL == ops->set_tv_freq)) {
+       if ((NULL == ops) || (NULL == ops->set_params)) {
                tuner_warn ("Tuner has no way to set tv freq\n");
                return;
        }
                else
                        freq = tv_range[1] * 16;
        }
-       ops->set_tv_freq(&t->fe, freq);
+       params.frequency = freq;
+
+       ops->set_params(&t->fe, ¶ms);
 }
 
 static void set_radio_freq(struct i2c_client *c, unsigned int freq)
        struct tuner *t = i2c_get_clientdata(c);
        struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
 
+       struct analog_parameters params = {
+               .mode      = t->mode,
+               .audmode   = t->audmode,
+               .std       = t->std
+       };
+
        if (t->type == UNSET) {
                tuner_warn ("tuner type not set\n");
                return;
        }
-       if ((NULL == ops) || (NULL == ops->set_radio_freq)) {
+       if ((NULL == ops) || (NULL == ops->set_params)) {
                tuner_warn ("tuner has no way to set radio frequency\n");
                return;
        }
                else
                        freq = radio_range[1] * 16000;
        }
+       params.frequency = freq;
 
-       ops->set_radio_freq(&t->fe, freq);
+       ops->set_params(&t->fe, ¶ms);
 }
 
 static void set_freq(struct i2c_client *c, unsigned long freq)
 
        ops = t->fe.ops.analog_demod_ops;
 
-       if (((NULL == ops) ||
-            ((NULL == ops->set_tv_freq) && (NULL == ops->set_radio_freq))) &&
+       if (((NULL == ops) || (NULL == ops->set_params)) &&
            (fe_tuner_ops->set_analog_params)) {
                strlcpy(t->i2c->name, fe_tuner_ops->info.name,
                        sizeof(t->i2c->name));