diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.h b/drivers/media/dvb/dvb-core/dvb_frontend.h
index 417802f..aa4133f 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.h
@@ -105,7 +105,7 @@
 	char *name;
 };
 
-struct analog_tuner_ops {
+struct analog_demod_ops {
 
 	struct analog_demod_info info;
 
@@ -168,7 +168,7 @@
 	int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
 
 	struct dvb_tuner_ops tuner_ops;
-	struct analog_tuner_ops *analog_demod_ops;
+	struct analog_demod_ops analog_ops;
 };
 
 #define MAX_EVENT 8
diff --git a/drivers/media/dvb/frontends/tda18271-fe.c b/drivers/media/dvb/frontends/tda18271-fe.c
index 406520f..3c0f06e 100644
--- a/drivers/media/dvb/frontends/tda18271-fe.c
+++ b/drivers/media/dvb/frontends/tda18271-fe.c
@@ -50,7 +50,6 @@
 static int tda18271_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
 {
 	struct tda18271_priv *priv = fe->tuner_priv;
-	struct analog_tuner_ops *ops = fe->ops.analog_demod_ops;
 	enum tda18271_i2c_gate gate;
 	int ret = 0;
 
@@ -74,8 +73,8 @@
 
 	switch (gate) {
 	case TDA18271_GATE_ANALOG:
-		if (ops && ops->i2c_gate_ctrl)
-			ret = ops->i2c_gate_ctrl(fe, enable);
+		if (fe->ops.analog_ops.i2c_gate_ctrl)
+			ret = fe->ops.analog_ops.i2c_gate_ctrl(fe, enable);
 		break;
 	case TDA18271_GATE_DIGITAL:
 		if (fe->ops.i2c_gate_ctrl)
diff --git a/drivers/media/video/tda8290.c b/drivers/media/video/tda8290.c
index 71d38ba..2e1d9b6 100644
--- a/drivers/media/video/tda8290.c
+++ b/drivers/media/video/tda8290.c
@@ -512,16 +512,16 @@
 static int tda829x_find_tuner(struct dvb_frontend *fe)
 {
 	struct tda8290_priv *priv = fe->analog_demod_priv;
-	struct analog_tuner_ops *ops = fe->ops.analog_demod_ops;
+	struct analog_demod_ops *analog_ops = &fe->ops.analog_ops;
 	int i, ret, tuners_found;
 	u32 tuner_addrs;
 	u8 data;
 	struct i2c_msg msg = { .flags = I2C_M_RD, .buf = &data, .len = 1 };
 
-	if (NULL == ops)
+	if (NULL == analog_ops->i2c_gate_ctrl)
 		return -EINVAL;
 
-	ops->i2c_gate_ctrl(fe, 1);
+	analog_ops->i2c_gate_ctrl(fe, 1);
 
 	/* probe for tuner chip */
 	tuners_found = 0;
@@ -539,7 +539,7 @@
 	   give a response now
 	 */
 
-	ops->i2c_gate_ctrl(fe, 0);
+	analog_ops->i2c_gate_ctrl(fe, 0);
 
 	if (tuners_found > 1)
 		for (i = 0; i < tuners_found; i++) {
@@ -562,7 +562,7 @@
 	priv->tda827x_addr = tuner_addrs;
 	msg.addr = tuner_addrs;
 
-	ops->i2c_gate_ctrl(fe, 1);
+	analog_ops->i2c_gate_ctrl(fe, 1);
 	ret = i2c_transfer(priv->i2c_props.adap, &msg, 1);
 
 	if (ret != 1) {
@@ -590,7 +590,7 @@
 	if (fe->ops.tuner_ops.sleep)
 		fe->ops.tuner_ops.sleep(fe);
 
-	ops->i2c_gate_ctrl(fe, 0);
+	analog_ops->i2c_gate_ctrl(fe, 0);
 
 	return 0;
 }
@@ -635,7 +635,7 @@
 	return -ENODEV;
 }
 
-static struct analog_tuner_ops tda8290_tuner_ops = {
+static struct analog_demod_ops tda8290_ops = {
 	.info		= {
 		.name	= "TDA8290",
 	},
@@ -646,7 +646,7 @@
 	.i2c_gate_ctrl  = tda8290_i2c_bridge,
 };
 
-static struct analog_tuner_ops tda8295_tuner_ops = {
+static struct analog_demod_ops tda8295_ops = {
 	.info		= {
 		.name	= "TDA8295",
 	},
@@ -678,12 +678,14 @@
 
 	if (tda8290_probe(&priv->i2c_props) == 0) {
 		priv->ver = TDA8290;
-		fe->ops.analog_demod_ops = &tda8290_tuner_ops;
+		memcpy(&fe->ops.analog_ops, &tda8290_ops,
+		       sizeof(struct analog_demod_ops));
 	}
 
 	if (tda8295_probe(&priv->i2c_props) == 0) {
 		priv->ver = TDA8295;
-		fe->ops.analog_demod_ops = &tda8295_tuner_ops;
+		memcpy(&fe->ops.analog_ops, &tda8295_ops,
+		       sizeof(struct analog_demod_ops));
 	}
 
 	if (tda829x_find_tuner(fe) < 0)
@@ -723,7 +725,6 @@
 
 fail:
 	tda829x_release(fe);
-	fe->ops.analog_demod_ops = NULL;
 	return NULL;
 }
 EXPORT_SYMBOL_GPL(tda829x_attach);
diff --git a/drivers/media/video/tda9887.c b/drivers/media/video/tda9887.c
index 1b017d5..d3aabe2 100644
--- a/drivers/media/video/tda9887.c
+++ b/drivers/media/video/tda9887.c
@@ -648,7 +648,7 @@
 	fe->analog_demod_priv = NULL;
 }
 
-static struct analog_tuner_ops tda9887_tuner_ops = {
+static struct analog_demod_ops tda9887_ops = {
 	.info		= {
 		.name	= "TDA9887",
 	},
@@ -677,7 +677,8 @@
 
 	tuner_info("tda988[5/6/7] found\n");
 
-	fe->ops.analog_demod_ops = &tda9887_tuner_ops;
+	memcpy(&fe->ops.analog_ops, &tda9887_ops,
+	       sizeof(struct analog_demod_ops));
 
 	return fe;
 }
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index ad20af8..f792871 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -143,8 +143,6 @@
 	if (fe->ops.tuner_ops.release)
 		fe->ops.tuner_ops.release(fe);
 
-	fe->ops.analog_demod_ops = NULL;
-
 	/* DO NOT kfree(fe->analog_demod_priv)
 	 *
 	 * If we are in this function, analog_demod_priv contains a pointer
@@ -189,7 +187,7 @@
 
 static void tuner_status(struct dvb_frontend *fe);
 
-static struct analog_tuner_ops tuner_core_ops = {
+static struct analog_demod_ops tuner_core_ops = {
 	.set_params     = fe_set_params,
 	.standby        = fe_standby,
 	.release        = fe_release,
@@ -202,7 +200,7 @@
 static void set_tv_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_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 
 	struct analog_parameters params = {
 		.mode      = t->mode,
@@ -214,7 +212,7 @@
 		tuner_warn ("tuner type not set\n");
 		return;
 	}
-	if ((NULL == ops) || (NULL == ops->set_params)) {
+	if (NULL == analog_ops->set_params) {
 		tuner_warn ("Tuner has no way to set tv freq\n");
 		return;
 	}
@@ -231,13 +229,13 @@
 	}
 	params.frequency = freq;
 
-	ops->set_params(&t->fe, &params);
+	analog_ops->set_params(&t->fe, &params);
 }
 
 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_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 
 	struct analog_parameters params = {
 		.mode      = t->mode,
@@ -249,7 +247,7 @@
 		tuner_warn ("tuner type not set\n");
 		return;
 	}
-	if ((NULL == ops) || (NULL == ops->set_params)) {
+	if (analog_ops->set_params) {
 		tuner_warn ("tuner has no way to set radio frequency\n");
 		return;
 	}
@@ -266,7 +264,7 @@
 	}
 	params.frequency = freq;
 
-	ops->set_params(&t->fe, &params);
+	analog_ops->set_params(&t->fe, &params);
 }
 
 static void set_freq(struct i2c_client *c, unsigned long freq)
@@ -337,7 +335,7 @@
 {
 	struct tuner *t = i2c_get_clientdata(c);
 	struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
-	struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 	unsigned char buffer[4];
 
 	if (type == UNSET || type == TUNER_ABSENT) {
@@ -364,8 +362,8 @@
 	}
 
 	/* discard private data, in case set_type() was previously called */
-	if (ops && ops->release)
-		ops->release(&t->fe);
+	if (analog_ops->release)
+		analog_ops->release(&t->fe);
 
 	switch (t->type) {
 	case TUNER_MT2032:
@@ -435,17 +433,16 @@
 		break;
 	}
 
-	ops = t->fe.ops.analog_demod_ops;
-
-	if (((NULL == ops) || (NULL == ops->set_params)) &&
+	if ((NULL == analog_ops->set_params) &&
 	    (fe_tuner_ops->set_analog_params)) {
 		strlcpy(t->i2c->name, fe_tuner_ops->info.name,
 			sizeof(t->i2c->name));
 
-		t->fe.ops.analog_demod_ops = &tuner_core_ops;
 		t->fe.analog_demod_priv = t;
+		memcpy(analog_ops, &tuner_core_ops,
+		       sizeof(struct analog_demod_ops));
 	} else {
-		strlcpy(t->i2c->name, ops->info.name,
+		strlcpy(t->i2c->name, analog_ops->info.name,
 			sizeof(t->i2c->name));
 	}
 
@@ -624,7 +621,7 @@
 	struct tuner *t = fe->analog_demod_priv;
 	unsigned long freq, freq_fraction;
 	struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
-	struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 	const char *p;
 
 	switch (t->mode) {
@@ -654,14 +651,12 @@
 		if (tuner_status & TUNER_STATUS_STEREO)
 			tuner_info("Stereo:          yes\n");
 	}
-	if (ops) {
-		if (ops->has_signal)
-			tuner_info("Signal strength: %d\n",
-				   ops->has_signal(fe));
-		if (ops->is_stereo)
-			tuner_info("Stereo:          %s\n",
-				   ops->is_stereo(fe) ? "yes" : "no");
-	}
+	if (analog_ops->has_signal)
+		tuner_info("Signal strength: %d\n",
+			   analog_ops->has_signal(fe));
+	if (analog_ops->is_stereo)
+		tuner_info("Stereo:          %s\n",
+			   analog_ops->is_stereo(fe) ? "yes" : "no");
 }
 
 /* ---------------------------------------------------------------------- */
@@ -675,7 +670,7 @@
 
 static inline int set_mode(struct i2c_client *client, struct tuner *t, int mode, char *cmd)
 {
-	struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 
 	if (mode == t->mode)
 		return 0;
@@ -684,8 +679,8 @@
 
 	if (check_mode(t, cmd) == EINVAL) {
 		t->mode = T_STANDBY;
-		if (ops && ops->standby)
-			ops->standby(&t->fe);
+		if (analog_ops->standby)
+			analog_ops->standby(&t->fe);
 		return EINVAL;
 	}
 	return 0;
@@ -708,7 +703,7 @@
 {
 	struct tuner *t = i2c_get_clientdata(client);
 	struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
-	struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 
 	if (tuner_debug>1)
 		v4l_i2c_print_ioctl(client,cmd);
@@ -735,8 +730,8 @@
 		if (check_mode(t, "TUNER_SET_STANDBY") == EINVAL)
 			return 0;
 		t->mode = T_STANDBY;
-		if (ops && ops->standby)
-			ops->standby(&t->fe);
+		if (analog_ops->standby)
+			analog_ops->standby(&t->fe);
 		break;
 #ifdef CONFIG_VIDEO_V4L1
 	case VIDIOCSAUDIO:
@@ -804,8 +799,8 @@
 					else
 						vt->flags &= ~VIDEO_TUNER_STEREO_ON;
 				} else {
-					if (ops && ops->is_stereo) {
-						if (ops->is_stereo(&t->fe))
+					if (analog_ops->is_stereo) {
+						if (analog_ops->is_stereo(&t->fe))
 							vt->flags |=
 								VIDEO_TUNER_STEREO_ON;
 						else
@@ -813,8 +808,9 @@
 								~VIDEO_TUNER_STEREO_ON;
 					}
 				}
-				if (ops && ops->has_signal)
-					vt->signal = ops->has_signal(&t->fe);
+				if (analog_ops->has_signal)
+					vt->signal =
+						analog_ops->has_signal(&t->fe);
 
 				vt->flags |= VIDEO_TUNER_LOW;	/* Allow freqs at 62.5 Hz */
 
@@ -844,8 +840,8 @@
 					fe_tuner_ops->get_status(&t->fe, &tuner_status);
 					va->mode = (tuner_status & TUNER_STATUS_STEREO)
 					    ? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;
-				} else if (ops && ops->is_stereo)
-					va->mode = ops->is_stereo(&t->fe)
+				} else if (analog_ops->is_stereo)
+					va->mode = analog_ops->is_stereo(&t->fe)
 					    ? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;
 			}
 			return 0;
@@ -853,19 +849,18 @@
 #endif
 	case TUNER_SET_CONFIG:
 	{
-		struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
 		struct v4l2_priv_tun_config *cfg = arg;
 
 		if (t->type != cfg->tuner)
 			break;
 
-		if ((NULL == ops) || (NULL == ops->set_config)) {
+		if (analog_ops->set_config) {
 			tuner_warn("Tuner frontend module has no way to "
 				   "set config\n");
 			break;
 		}
 
-		ops->set_config(&t->fe, cfg->priv);
+		analog_ops->set_config(&t->fe, cfg->priv);
 		break;
 	}
 	/* --- v4l ioctls --- */
@@ -929,8 +924,8 @@
 			switch_v4l2();
 
 			tuner->type = t->mode;
-			if (ops && ops->get_afc)
-				tuner->afc = ops->get_afc(&t->fe);
+			if (analog_ops->get_afc)
+				tuner->afc = analog_ops->get_afc(&t->fe);
 			if (t->mode == V4L2_TUNER_ANALOG_TV)
 				tuner->capability |= V4L2_TUNER_CAP_NORM;
 			if (t->mode != V4L2_TUNER_RADIO) {
@@ -951,15 +946,15 @@
 					V4L2_TUNER_SUB_STEREO :
 					V4L2_TUNER_SUB_MONO;
 			} else {
-				if (ops && ops->is_stereo) {
+				if (analog_ops->is_stereo) {
 					tuner->rxsubchans =
-						ops->is_stereo(&t->fe) ?
+						analog_ops->is_stereo(&t->fe) ?
 						V4L2_TUNER_SUB_STEREO :
 						V4L2_TUNER_SUB_MONO;
 				}
 			}
-			if (ops && ops->has_signal)
-				tuner->signal = ops->has_signal(&t->fe);
+			if (analog_ops->has_signal)
+				tuner->signal = analog_ops->has_signal(&t->fe);
 			tuner->capability |=
 			    V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
 			tuner->audmode = t->audmode;
@@ -984,8 +979,8 @@
 			break;
 		}
 	case VIDIOC_LOG_STATUS:
-		if (ops && ops->tuner_status)
-			ops->tuner_status(&t->fe);
+		if (analog_ops->tuner_status)
+			analog_ops->tuner_status(&t->fe);
 		break;
 	}
 
@@ -1214,10 +1209,10 @@
 static int tuner_remove(struct i2c_client *client)
 {
 	struct tuner *t = i2c_get_clientdata(client);
-	struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops;
+	struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
 
-	if (ops && ops->release)
-		ops->release(&t->fe);
+	if (analog_ops->release)
+		analog_ops->release(&t->fe);
 
 	list_del(&t->list);
 	kfree(t);
