V4L/DVB (11370): v4l2-subdev: move s_std from tuner to core.

s_std didn't belong in the tuner ops. Stricly speaking it should be part of
the video ops, but it is used by audio and tuner devices as well, so it is
more efficient to make it part of the core ops.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/video/au0828/au0828-video.c b/drivers/media/video/au0828/au0828-video.c
index f7ad495..19b23f2 100644
--- a/drivers/media/video/au0828/au0828-video.c
+++ b/drivers/media/video/au0828/au0828-video.c
@@ -1100,7 +1100,7 @@
 	   have to make the au0828 bridge adjust the size of its capture
 	   buffer, which is currently hardcoded at 720x480 */
 
-	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_std, *norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, *norm);
 	return 0;
 }
 
diff --git a/drivers/media/video/bt819.c b/drivers/media/video/bt819.c
index df4516d..9f84032 100644
--- a/drivers/media/video/bt819.c
+++ b/drivers/media/video/bt819.c
@@ -444,9 +444,6 @@
 	.g_ctrl = bt819_g_ctrl,
 	.s_ctrl = bt819_s_ctrl,
 	.queryctrl = bt819_queryctrl,
-};
-
-static const struct v4l2_subdev_tuner_ops bt819_tuner_ops = {
 	.s_std = bt819_s_std,
 };
 
@@ -459,7 +456,6 @@
 
 static const struct v4l2_subdev_ops bt819_ops = {
 	.core = &bt819_core_ops,
-	.tuner = &bt819_tuner_ops,
 	.video = &bt819_video_ops,
 };
 
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c
index 7a8ca0d..41c31ea 100644
--- a/drivers/media/video/bt8xx/bttv-driver.c
+++ b/drivers/media/video/bt8xx/bttv-driver.c
@@ -1329,7 +1329,7 @@
 		break;
 	}
 	id = tvnorm->v4l2_id;
-	bttv_call_all(btv, tuner, s_std, id);
+	bttv_call_all(btv, core, s_std, id);
 
 	return 0;
 }
diff --git a/drivers/media/video/cx18/cx18-av-core.c b/drivers/media/video/cx18/cx18-av-core.c
index 0c58e55..9b3e574 100644
--- a/drivers/media/video/cx18/cx18-av-core.c
+++ b/drivers/media/video/cx18/cx18-av-core.c
@@ -1189,6 +1189,7 @@
 	.queryctrl = cx18_av_queryctrl,
 	.g_ctrl = cx18_av_g_ctrl,
 	.s_ctrl = cx18_av_s_ctrl,
+	.s_std = cx18_av_s_std,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.g_register = cx18_av_g_register,
 	.s_register = cx18_av_s_register,
@@ -1200,7 +1201,6 @@
 	.s_frequency = cx18_av_s_frequency,
 	.g_tuner = cx18_av_g_tuner,
 	.s_tuner = cx18_av_s_tuner,
-	.s_std = cx18_av_s_std,
 };
 
 static const struct v4l2_subdev_audio_ops cx18_av_audio_ops = {
diff --git a/drivers/media/video/cx18/cx18-fileops.c b/drivers/media/video/cx18/cx18-fileops.c
index 4d7d6d5..b3889c0 100644
--- a/drivers/media/video/cx18/cx18-fileops.c
+++ b/drivers/media/video/cx18/cx18-fileops.c
@@ -608,7 +608,7 @@
 		/* Mark that the radio is no longer in use */
 		clear_bit(CX18_F_I_RADIO_USER, &cx->i_flags);
 		/* Switch tuner to TV */
-		cx18_call_all(cx, tuner, s_std, cx->std);
+		cx18_call_all(cx, core, s_std, cx->std);
 		/* Select correct audio input (i.e. TV tuner or Line in) */
 		cx18_audio_set_io(cx);
 		if (atomic_read(&cx->ana_capturing) > 0) {
diff --git a/drivers/media/video/cx18/cx18-gpio.c b/drivers/media/video/cx18/cx18-gpio.c
index 5518d14..ae2460e 100644
--- a/drivers/media/video/cx18/cx18-gpio.c
+++ b/drivers/media/video/cx18/cx18-gpio.c
@@ -180,10 +180,10 @@
 
 static const struct v4l2_subdev_core_ops gpiomux_core_ops = {
 	.log_status = gpiomux_log_status,
+	.s_std = gpiomux_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops gpiomux_tuner_ops = {
-	.s_std = gpiomux_s_std,
 	.s_radio = gpiomux_s_radio,
 };
 
diff --git a/drivers/media/video/cx18/cx18-ioctl.c b/drivers/media/video/cx18/cx18-ioctl.c
index e4c9e3d..f572080 100644
--- a/drivers/media/video/cx18/cx18-ioctl.c
+++ b/drivers/media/video/cx18/cx18-ioctl.c
@@ -705,7 +705,7 @@
 			(unsigned long long) cx->std);
 
 	/* Tuner */
-	cx18_call_all(cx, tuner, s_std, cx->std);
+	cx18_call_all(cx, core, s_std, cx->std);
 	return 0;
 }
 
diff --git a/drivers/media/video/cx231xx/cx231xx-video.c b/drivers/media/video/cx231xx/cx231xx-video.c
index ec5aea3..0645703 100644
--- a/drivers/media/video/cx231xx/cx231xx-video.c
+++ b/drivers/media/video/cx231xx/cx231xx-video.c
@@ -1089,7 +1089,7 @@
 	dev->height = f.fmt.pix.height;
 	get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
 
-	call_all(dev, tuner, s_std, dev->norm);
+	call_all(dev, core, s_std, dev->norm);
 
 	mutex_unlock(&dev->lock);
 
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c
index f0ac62c..41f0a2b 100644
--- a/drivers/media/video/cx23885/cx23885-video.c
+++ b/drivers/media/video/cx23885/cx23885-video.c
@@ -299,7 +299,7 @@
 
 	dev->tvnorm = norm;
 
-	call_all(dev, tuner, s_std, norm);
+	call_all(dev, core, s_std, norm);
 
 	return 0;
 }
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 5126681..6209027 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -1472,6 +1472,7 @@
 	.g_ctrl = cx25840_g_ctrl,
 	.s_ctrl = cx25840_s_ctrl,
 	.queryctrl = cx25840_queryctrl,
+	.s_std = cx25840_s_std,
 	.reset = cx25840_reset,
 	.load_fw = cx25840_load_fw,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1482,7 +1483,6 @@
 
 static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops = {
 	.s_frequency = cx25840_s_frequency,
-	.s_std = cx25840_s_std,
 	.s_radio = cx25840_s_radio,
 	.g_tuner = cx25840_g_tuner,
 	.s_tuner = cx25840_s_tuner,
diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c
index f2fb9f3..0e149b2 100644
--- a/drivers/media/video/cx88/cx88-core.c
+++ b/drivers/media/video/cx88/cx88-core.c
@@ -991,7 +991,7 @@
 	set_tvaudio(core);
 
 	// tell i2c chips
-	call_all(core, tuner, s_std, norm);
+	call_all(core, core, s_std, norm);
 
 	// done
 	return 0;
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index 9d4e0c1..9648784 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -829,7 +829,7 @@
 	get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
 
 	em28xx_resolution_set(dev);
-	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_std, dev->norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
 
 	mutex_unlock(&dev->lock);
 	return 0;
diff --git a/drivers/media/video/ivtv/ivtv-fileops.c b/drivers/media/video/ivtv/ivtv-fileops.c
index cfaacf6..e212337 100644
--- a/drivers/media/video/ivtv/ivtv-fileops.c
+++ b/drivers/media/video/ivtv/ivtv-fileops.c
@@ -857,7 +857,7 @@
 		/* Mark that the radio is no longer in use */
 		clear_bit(IVTV_F_I_RADIO_USER, &itv->i_flags);
 		/* Switch tuner to TV */
-		ivtv_call_all(itv, tuner, s_std, itv->std);
+		ivtv_call_all(itv, core, s_std, itv->std);
 		/* Select correct audio input (i.e. TV tuner or Line in) */
 		ivtv_audio_set_io(itv);
 		if (itv->hw_flags & IVTV_HW_SAA711X)
diff --git a/drivers/media/video/ivtv/ivtv-gpio.c b/drivers/media/video/ivtv/ivtv-gpio.c
index 3321983..0dd5f53 100644
--- a/drivers/media/video/ivtv/ivtv-gpio.c
+++ b/drivers/media/video/ivtv/ivtv-gpio.c
@@ -342,10 +342,10 @@
 	.g_ctrl = subdev_g_ctrl,
 	.s_ctrl = subdev_s_ctrl,
 	.queryctrl = subdev_queryctrl,
+	.s_std = subdev_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops subdev_tuner_ops = {
-	.s_std = subdev_s_std,
 	.s_radio = subdev_s_radio,
 	.g_tuner = subdev_g_tuner,
 	.s_tuner = subdev_s_tuner,
diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c b/drivers/media/video/ivtv/ivtv-ioctl.c
index 9a04242..052fbe9 100644
--- a/drivers/media/video/ivtv/ivtv-ioctl.c
+++ b/drivers/media/video/ivtv/ivtv-ioctl.c
@@ -1121,7 +1121,7 @@
 	IVTV_DEBUG_INFO("Switching standard to %llx.\n", (unsigned long long)itv->std);
 
 	/* Tuner */
-	ivtv_call_all(itv, tuner, s_std, itv->std);
+	ivtv_call_all(itv, core, s_std, itv->std);
 
 	if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
 		/* set display standard */
diff --git a/drivers/media/video/ks0127.c b/drivers/media/video/ks0127.c
index 841024b..4e5f0e7 100644
--- a/drivers/media/video/ks0127.c
+++ b/drivers/media/video/ks0127.c
@@ -648,9 +648,6 @@
 
 static const struct v4l2_subdev_core_ops ks0127_core_ops = {
 	.g_chip_ident = ks0127_g_chip_ident,
-};
-
-static const struct v4l2_subdev_tuner_ops ks0127_tuner_ops = {
 	.s_std = ks0127_s_std,
 };
 
@@ -663,7 +660,6 @@
 
 static const struct v4l2_subdev_ops ks0127_ops = {
 	.core = &ks0127_core_ops,
-	.tuner = &ks0127_tuner_ops,
 	.video = &ks0127_video_ops,
 };
 
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index aeab597..38e6397 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -700,6 +700,7 @@
 	.g_ctrl = msp_g_ctrl,
 	.s_ctrl = msp_s_ctrl,
 	.queryctrl = msp_queryctrl,
+	.s_std = msp_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops msp_tuner_ops = {
@@ -707,7 +708,6 @@
 	.g_tuner = msp_g_tuner,
 	.s_tuner = msp_s_tuner,
 	.s_radio = msp_s_radio,
-	.s_std = msp_s_std,
 };
 
 static const struct v4l2_subdev_audio_ops msp_audio_ops = {
diff --git a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c
index 84aec62..238bb40 100644
--- a/drivers/media/video/mxb.c
+++ b/drivers/media/video/mxb.c
@@ -266,7 +266,7 @@
 	int i = 0, err = 0;
 
 	/* select video mode in saa7111a */
-	saa7111a_call(mxb, tuner, s_std, std);
+	saa7111a_call(mxb, core, s_std, std);
 
 	/* select tuner-output on saa7111a */
 	i = 0;
@@ -286,7 +286,7 @@
 	tuner_call(mxb, tuner, s_frequency, &mxb->cur_freq);
 
 	/* set a default video standard */
-	tuner_call(mxb, tuner, s_std, std);
+	tuner_call(mxb, core, s_std, std);
 
 	/* mute audio on tea6420s */
 	tea6420_1_call(mxb, audio, s_routing, &TEA6420_line[6][0]);
@@ -788,7 +788,7 @@
 		saa7146_write(dev, GPIO_CTRL, 0x00404050);
 		/* unset the 7111 gpio register -- I don't know what this does exactly */
 		saa7111a_call(mxb, core, s_gpio, 0);
-		tuner_call(mxb, tuner, s_std, std);
+		tuner_call(mxb, core, s_std, std);
 	} else {
 		v4l2_std_id std = V4L2_STD_PAL_BG;
 
@@ -797,7 +797,7 @@
 		saa7146_write(dev, GPIO_CTRL, 0x00404050);
 		/* set the 7111 gpio register -- I don't know what this does exactly */
 		saa7111a_call(mxb, core, s_gpio, 1);
-		tuner_call(mxb, tuner, s_std, std);
+		tuner_call(mxb, core, s_std, std);
 	}
 	return 0;
 }
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 59a0259..2ee9d4d 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -2944,7 +2944,7 @@
 			v4l2_std_id vs;
 			vs = hdw->std_mask_cur;
 			v4l2_device_call_all(&hdw->v4l2_dev, 0,
-					     tuner, s_std, vs);
+					     core, s_std, vs);
 		}
 		hdw->tuner_signal_stale = !0;
 		hdw->cropcap_stale = !0;
diff --git a/drivers/media/video/saa7110.c b/drivers/media/video/saa7110.c
index df4e08d..8bb1fc1 100644
--- a/drivers/media/video/saa7110.c
+++ b/drivers/media/video/saa7110.c
@@ -414,9 +414,6 @@
 	.g_ctrl = saa7110_g_ctrl,
 	.s_ctrl = saa7110_s_ctrl,
 	.queryctrl = saa7110_queryctrl,
-};
-
-static const struct v4l2_subdev_tuner_ops saa7110_tuner_ops = {
 	.s_std = saa7110_s_std,
 };
 
@@ -429,7 +426,6 @@
 
 static const struct v4l2_subdev_ops saa7110_ops = {
 	.core = &saa7110_core_ops,
-	.tuner = &saa7110_tuner_ops,
 	.video = &saa7110_video_ops,
 };
 
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index 5ee94d6..e6538eb 100644
--- a/drivers/media/video/saa7115.c
+++ b/drivers/media/video/saa7115.c
@@ -1500,6 +1500,7 @@
 	.g_ctrl = saa711x_g_ctrl,
 	.s_ctrl = saa711x_s_ctrl,
 	.queryctrl = saa711x_queryctrl,
+	.s_std = saa711x_s_std,
 	.reset = saa711x_reset,
 	.s_gpio = saa711x_s_gpio,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1509,7 +1510,6 @@
 };
 
 static const struct v4l2_subdev_tuner_ops saa711x_tuner_ops = {
-	.s_std = saa711x_s_std,
 	.s_radio = saa711x_s_radio,
 	.g_tuner = saa711x_g_tuner,
 };
diff --git a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c
index dc2213e..63c4b8f 100644
--- a/drivers/media/video/saa7134/saa6752hs.c
+++ b/drivers/media/video/saa7134/saa6752hs.c
@@ -928,9 +928,6 @@
 	.g_ext_ctrls = saa6752hs_g_ext_ctrls,
 	.s_ext_ctrls = saa6752hs_s_ext_ctrls,
 	.try_ext_ctrls = saa6752hs_try_ext_ctrls,
-};
-
-static const struct v4l2_subdev_tuner_ops saa6752hs_tuner_ops = {
 	.s_std = saa6752hs_s_std,
 };
 
@@ -941,7 +938,6 @@
 
 static const struct v4l2_subdev_ops saa6752hs_ops = {
 	.core = &saa6752hs_core_ops,
-	.tuner = &saa6752hs_tuner_ops,
 	.video = &saa6752hs_video_ops,
 };
 
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c
index b520e9c..493cad9 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -625,10 +625,10 @@
 	saa7134_set_decoder(dev);
 
 	if (card_in(dev, dev->ctl_input).tv)
-		saa_call_all(dev, tuner, s_std, dev->tvnorm->id);
+		saa_call_all(dev, core, s_std, dev->tvnorm->id);
 	/* Set the correct norm for the saa6752hs. This function
 	   does nothing if there is no saa6752hs. */
-	saa_call_empress(dev, tuner, s_std, dev->tvnorm->id);
+	saa_call_empress(dev, core, s_std, dev->tvnorm->id);
 }
 
 static void set_h_prescale(struct saa7134_dev *dev, int task, int prescale)
diff --git a/drivers/media/video/saa717x.c b/drivers/media/video/saa717x.c
index 25bf230..b73801c 100644
--- a/drivers/media/video/saa717x.c
+++ b/drivers/media/video/saa717x.c
@@ -1390,12 +1390,12 @@
 	.queryctrl = saa717x_queryctrl,
 	.g_ctrl = saa717x_g_ctrl,
 	.s_ctrl = saa717x_s_ctrl,
+	.s_std = saa717x_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops saa717x_tuner_ops = {
 	.g_tuner = saa717x_g_tuner,
 	.s_tuner = saa717x_s_tuner,
-	.s_std = saa717x_s_std,
 	.s_radio = saa717x_s_radio,
 };
 
diff --git a/drivers/media/video/saa7191.c b/drivers/media/video/saa7191.c
index 3f523ae..13ab4f2 100644
--- a/drivers/media/video/saa7191.c
+++ b/drivers/media/video/saa7191.c
@@ -582,9 +582,6 @@
 	.g_chip_ident = saa7191_g_chip_ident,
 	.g_ctrl = saa7191_g_ctrl,
 	.s_ctrl = saa7191_s_ctrl,
-};
-
-static const struct v4l2_subdev_tuner_ops saa7191_tuner_ops = {
 	.s_std = saa7191_s_std,
 };
 
@@ -597,7 +594,6 @@
 static const struct v4l2_subdev_ops saa7191_ops = {
 	.core = &saa7191_core_ops,
 	.video = &saa7191_video_ops,
-	.tuner = &saa7191_tuner_ops,
 };
 
 static int saa7191_probe(struct i2c_client *client,
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 61f1007..28af7b7 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -981,10 +981,10 @@
 
 static const struct v4l2_subdev_core_ops tuner_core_ops = {
 	.log_status = tuner_log_status,
+	.s_std = tuner_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
-	.s_std = tuner_s_std,
 	.s_radio = tuner_s_radio,
 	.g_tuner = tuner_g_tuner,
 	.s_tuner = tuner_s_tuner,
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
index 994753c..2a49c83 100644
--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -1911,12 +1911,12 @@
 	.queryctrl = tvaudio_queryctrl,
 	.g_ctrl = tvaudio_g_ctrl,
 	.s_ctrl = tvaudio_s_ctrl,
+	.s_std = tvaudio_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops tvaudio_tuner_ops = {
 	.s_radio = tvaudio_s_radio,
 	.s_frequency = tvaudio_s_frequency,
-	.s_std = tvaudio_s_std,
 	.s_tuner = tvaudio_s_tuner,
 	.s_tuner = tvaudio_g_tuner,
 };
diff --git a/drivers/media/video/tvp5150.c b/drivers/media/video/tvp5150.c
index d7f3bad2..4aea84a 100644
--- a/drivers/media/video/tvp5150.c
+++ b/drivers/media/video/tvp5150.c
@@ -1025,6 +1025,7 @@
 	.g_ctrl = tvp5150_g_ctrl,
 	.s_ctrl = tvp5150_s_ctrl,
 	.queryctrl = tvp5150_queryctrl,
+	.s_std = tvp5150_s_std,
 	.reset = tvp5150_reset,
 	.g_chip_ident = tvp5150_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1034,7 +1035,6 @@
 };
 
 static const struct v4l2_subdev_tuner_ops tvp5150_tuner_ops = {
-	.s_std = tvp5150_s_std,
 	.g_tuner = tvp5150_g_tuner,
 };
 
diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c
index 7db493c..c8f8a3c 100644
--- a/drivers/media/video/usbvision/usbvision-video.c
+++ b/drivers/media/video/usbvision/usbvision-video.c
@@ -621,7 +621,7 @@
 	usbvision->tvnormId=*id;
 
 	mutex_lock(&usbvision->lock);
-	call_all(usbvision, tuner, s_std, usbvision->tvnormId);
+	call_all(usbvision, core, s_std, usbvision->tvnormId);
 	mutex_unlock(&usbvision->lock);
 	/* propagate the change to the decoder */
 	usbvision_muxsel(usbvision, usbvision->ctl_input);
diff --git a/drivers/media/video/vino.c b/drivers/media/video/vino.c
index 8da4dd1..c39a2d4 100644
--- a/drivers/media/video/vino.c
+++ b/drivers/media/video/vino.c
@@ -2589,7 +2589,7 @@
 			}
 			if (data_norm == 3)
 				data_norm = VINO_DATA_NORM_PAL;
-			ret = decoder_call(tuner, s_std, norm);
+			ret = decoder_call(core, s_std, norm);
 		}
 
 		spin_lock_irqsave(&vino_drvdata->input_lock, flags);
@@ -2679,7 +2679,7 @@
 				}
 				if (data_norm == 3)
 					data_norm = VINO_DATA_NORM_PAL;
-				ret = decoder_call(tuner, s_std, norm);
+				ret = decoder_call(core, s_std, norm);
 			}
 
 			spin_lock_irqsave(&vino_drvdata->input_lock, flags);
@@ -2813,7 +2813,7 @@
 		 * as it may take a while... */
 
 		norm = vino_data_norms[data_norm].std;
-		err = decoder_call(tuner, s_std, norm);
+		err = decoder_call(core, s_std, norm);
 
 		spin_lock_irqsave(&vino_drvdata->input_lock, *flags);
 
diff --git a/drivers/media/video/vp27smpx.c b/drivers/media/video/vp27smpx.c
index 42e23a4..38e53b3 100644
--- a/drivers/media/video/vp27smpx.c
+++ b/drivers/media/video/vp27smpx.c
@@ -134,11 +134,11 @@
 static const struct v4l2_subdev_core_ops vp27smpx_core_ops = {
 	.log_status = vp27smpx_log_status,
 	.g_chip_ident = vp27smpx_g_chip_ident,
+	.s_std = vp27smpx_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = {
 	.s_radio = vp27smpx_s_radio,
-	.s_std = vp27smpx_s_std,
 	.s_tuner = vp27smpx_s_tuner,
 	.g_tuner = vp27smpx_g_tuner,
 };
diff --git a/drivers/media/video/vpx3220.c b/drivers/media/video/vpx3220.c
index 2fa7e8b..59a8bb0 100644
--- a/drivers/media/video/vpx3220.c
+++ b/drivers/media/video/vpx3220.c
@@ -516,9 +516,6 @@
 	.g_ctrl = vpx3220_g_ctrl,
 	.s_ctrl = vpx3220_s_ctrl,
 	.queryctrl = vpx3220_queryctrl,
-};
-
-static const struct v4l2_subdev_tuner_ops vpx3220_tuner_ops = {
 	.s_std = vpx3220_s_std,
 };
 
@@ -531,7 +528,6 @@
 
 static const struct v4l2_subdev_ops vpx3220_ops = {
 	.core = &vpx3220_core_ops,
-	.tuner = &vpx3220_tuner_ops,
 	.video = &vpx3220_video_ops,
 };
 
diff --git a/drivers/media/video/zoran/zoran_device.c b/drivers/media/video/zoran/zoran_device.c
index e0223de..25e565f 100644
--- a/drivers/media/video/zoran/zoran_device.c
+++ b/drivers/media/video/zoran/zoran_device.c
@@ -1584,7 +1584,7 @@
 	route.input = zr->card.input[zr->input].muxsel;
 
 	decoder_call(zr, core, init, 0);
-	decoder_call(zr, tuner, s_std, zr->norm);
+	decoder_call(zr, core, s_std, zr->norm);
 	decoder_call(zr, video, s_routing, &route);
 
 	encoder_call(zr, core, init, 0);
diff --git a/drivers/media/video/zoran/zoran_driver.c b/drivers/media/video/zoran/zoran_driver.c
index f16e57c..979e8d0 100644
--- a/drivers/media/video/zoran/zoran_driver.c
+++ b/drivers/media/video/zoran/zoran_driver.c
@@ -1449,7 +1449,7 @@
 		v4l2_std_id std = 0;
 
 		decoder_call(zr, video, querystd, &std);
-		decoder_call(zr, tuner, s_std, std);
+		decoder_call(zr, core, s_std, std);
 
 		/* let changes come into effect */
 		ssleep(2);
@@ -1461,7 +1461,7 @@
 				"%s: %s - no norm detected\n",
 				ZR_DEVNAME(zr), __func__);
 			/* reset norm */
-			decoder_call(zr, tuner, s_std, zr->norm);
+			decoder_call(zr, core, s_std, zr->norm);
 			return -EIO;
 		}
 
@@ -1480,7 +1480,7 @@
 	if (on)
 		zr36057_overlay(zr, 0);
 
-	decoder_call(zr, tuner, s_std, norm);
+	decoder_call(zr, core, s_std, norm);
 	encoder_call(zr, video, s_std_output, norm);
 
 	if (on)
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 38b89cf..b4e48dc 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -113,6 +113,7 @@
 	int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
 	int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
 	int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
+	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
 	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg);
@@ -137,7 +138,6 @@
 	int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq);
 	int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
 	int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
-	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
 	int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type);
 	int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config);
 	int (*s_standby)(struct v4l2_subdev *sd);