diff mbox

v4l: subdev: Move [gs]_std operation to video ops

Message ID 1394532878-3943-1-git-send-email-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show

Commit Message

Laurent Pinchart March 11, 2014, 10:14 a.m. UTC
The g_std and s_std operations are video-related, move them to the video
ops where they belong.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/media/i2c/adv7180.c                     |  6 +-----
 drivers/media/i2c/adv7183.c                     |  4 ++--
 drivers/media/i2c/adv7842.c                     |  4 ++--
 drivers/media/i2c/bt819.c                       |  2 +-
 drivers/media/i2c/cx25840/cx25840-core.c        |  4 ++--
 drivers/media/i2c/ks0127.c                      |  6 +-----
 drivers/media/i2c/ml86v7667.c                   |  2 +-
 drivers/media/i2c/msp3400-driver.c              |  2 +-
 drivers/media/i2c/saa6752hs.c                   |  2 +-
 drivers/media/i2c/saa7110.c                     |  2 +-
 drivers/media/i2c/saa7115.c                     |  2 +-
 drivers/media/i2c/saa717x.c                     |  2 +-
 drivers/media/i2c/saa7191.c                     |  2 +-
 drivers/media/i2c/soc_camera/tw9910.c           |  4 ++--
 drivers/media/i2c/sony-btf-mpx.c                | 10 +++++-----
 drivers/media/i2c/tvaudio.c                     |  6 +++++-
 drivers/media/i2c/tvp514x.c                     |  2 +-
 drivers/media/i2c/tvp5150.c                     |  2 +-
 drivers/media/i2c/tw2804.c                      |  2 +-
 drivers/media/i2c/tw9903.c                      |  2 +-
 drivers/media/i2c/tw9906.c                      |  2 +-
 drivers/media/i2c/vp27smpx.c                    |  6 +++++-
 drivers/media/i2c/vpx3220.c                     |  2 +-
 drivers/media/pci/bt8xx/bttv-driver.c           |  2 +-
 drivers/media/pci/cx18/cx18-av-core.c           |  2 +-
 drivers/media/pci/cx18/cx18-fileops.c           |  2 +-
 drivers/media/pci/cx18/cx18-gpio.c              |  6 +++++-
 drivers/media/pci/cx18/cx18-ioctl.c             |  2 +-
 drivers/media/pci/cx23885/cx23885-video.c       |  4 ++--
 drivers/media/pci/cx88/cx88-core.c              |  2 +-
 drivers/media/pci/ivtv/ivtv-fileops.c           |  2 +-
 drivers/media/pci/ivtv/ivtv-ioctl.c             |  2 +-
 drivers/media/pci/saa7134/saa7134-video.c       |  4 ++--
 drivers/media/pci/saa7146/mxb.c                 | 14 +++++++-------
 drivers/media/pci/sta2x11/sta2x11_vip.c         |  4 ++--
 drivers/media/pci/zoran/zoran_device.c          |  2 +-
 drivers/media/pci/zoran/zoran_driver.c          |  2 +-
 drivers/media/platform/blackfin/bfin_capture.c  |  4 ++--
 drivers/media/platform/davinci/vpfe_capture.c   |  2 +-
 drivers/media/platform/davinci/vpif_capture.c   |  2 +-
 drivers/media/platform/davinci/vpif_display.c   |  2 +-
 drivers/media/platform/fsl-viu.c                |  2 +-
 drivers/media/platform/soc_camera/soc_camera.c  |  4 ++--
 drivers/media/platform/timblogiw.c              |  2 +-
 drivers/media/platform/vino.c                   |  6 +++---
 drivers/media/usb/au0828/au0828-video.c         |  4 ++--
 drivers/media/usb/cx231xx/cx231xx-417.c         |  2 +-
 drivers/media/usb/cx231xx/cx231xx-video.c       |  6 +++---
 drivers/media/usb/em28xx/em28xx-video.c         |  4 ++--
 drivers/media/usb/pvrusb2/pvrusb2-hdw.c         |  2 +-
 drivers/media/usb/stk1160/stk1160-v4l.c         |  4 ++--
 drivers/media/usb/tm6000/tm6000-cards.c         |  2 +-
 drivers/media/usb/tm6000/tm6000-video.c         |  2 +-
 drivers/media/usb/usbvision/usbvision-video.c   |  2 +-
 drivers/media/v4l2-core/tuner-core.c            |  6 +++++-
 drivers/staging/media/davinci_vpfe/vpfe_video.c |  2 +-
 drivers/staging/media/go7007/go7007-v4l2.c      |  2 +-
 drivers/staging/media/go7007/s2250-board.c      |  2 +-
 drivers/staging/media/go7007/saa7134-go7007.c   |  4 ++++
 include/media/v4l2-subdev.h                     |  6 +++---
 60 files changed, 107 insertions(+), 95 deletions(-)

Comments

Laurent Pinchart April 21, 2014, 2:38 p.m. UTC | #1
Hans, Guennadi,

Could you please review this patch ? I'd like to get it in v3.16.

On Tuesday 11 March 2014 11:14:38 Laurent Pinchart wrote:
> The g_std and s_std operations are video-related, move them to the video
> ops where they belong.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  drivers/media/i2c/adv7180.c                     |  6 +-----
>  drivers/media/i2c/adv7183.c                     |  4 ++--
>  drivers/media/i2c/adv7842.c                     |  4 ++--
>  drivers/media/i2c/bt819.c                       |  2 +-
>  drivers/media/i2c/cx25840/cx25840-core.c        |  4 ++--
>  drivers/media/i2c/ks0127.c                      |  6 +-----
>  drivers/media/i2c/ml86v7667.c                   |  2 +-
>  drivers/media/i2c/msp3400-driver.c              |  2 +-
>  drivers/media/i2c/saa6752hs.c                   |  2 +-
>  drivers/media/i2c/saa7110.c                     |  2 +-
>  drivers/media/i2c/saa7115.c                     |  2 +-
>  drivers/media/i2c/saa717x.c                     |  2 +-
>  drivers/media/i2c/saa7191.c                     |  2 +-
>  drivers/media/i2c/soc_camera/tw9910.c           |  4 ++--
>  drivers/media/i2c/sony-btf-mpx.c                | 10 +++++-----
>  drivers/media/i2c/tvaudio.c                     |  6 +++++-
>  drivers/media/i2c/tvp514x.c                     |  2 +-
>  drivers/media/i2c/tvp5150.c                     |  2 +-
>  drivers/media/i2c/tw2804.c                      |  2 +-
>  drivers/media/i2c/tw9903.c                      |  2 +-
>  drivers/media/i2c/tw9906.c                      |  2 +-
>  drivers/media/i2c/vp27smpx.c                    |  6 +++++-
>  drivers/media/i2c/vpx3220.c                     |  2 +-
>  drivers/media/pci/bt8xx/bttv-driver.c           |  2 +-
>  drivers/media/pci/cx18/cx18-av-core.c           |  2 +-
>  drivers/media/pci/cx18/cx18-fileops.c           |  2 +-
>  drivers/media/pci/cx18/cx18-gpio.c              |  6 +++++-
>  drivers/media/pci/cx18/cx18-ioctl.c             |  2 +-
>  drivers/media/pci/cx23885/cx23885-video.c       |  4 ++--
>  drivers/media/pci/cx88/cx88-core.c              |  2 +-
>  drivers/media/pci/ivtv/ivtv-fileops.c           |  2 +-
>  drivers/media/pci/ivtv/ivtv-ioctl.c             |  2 +-
>  drivers/media/pci/saa7134/saa7134-video.c       |  4 ++--
>  drivers/media/pci/saa7146/mxb.c                 | 14 +++++++-------
>  drivers/media/pci/sta2x11/sta2x11_vip.c         |  4 ++--
>  drivers/media/pci/zoran/zoran_device.c          |  2 +-
>  drivers/media/pci/zoran/zoran_driver.c          |  2 +-
>  drivers/media/platform/blackfin/bfin_capture.c  |  4 ++--
>  drivers/media/platform/davinci/vpfe_capture.c   |  2 +-
>  drivers/media/platform/davinci/vpif_capture.c   |  2 +-
>  drivers/media/platform/davinci/vpif_display.c   |  2 +-
>  drivers/media/platform/fsl-viu.c                |  2 +-
>  drivers/media/platform/soc_camera/soc_camera.c  |  4 ++--
>  drivers/media/platform/timblogiw.c              |  2 +-
>  drivers/media/platform/vino.c                   |  6 +++---
>  drivers/media/usb/au0828/au0828-video.c         |  4 ++--
>  drivers/media/usb/cx231xx/cx231xx-417.c         |  2 +-
>  drivers/media/usb/cx231xx/cx231xx-video.c       |  6 +++---
>  drivers/media/usb/em28xx/em28xx-video.c         |  4 ++--
>  drivers/media/usb/pvrusb2/pvrusb2-hdw.c         |  2 +-
>  drivers/media/usb/stk1160/stk1160-v4l.c         |  4 ++--
>  drivers/media/usb/tm6000/tm6000-cards.c         |  2 +-
>  drivers/media/usb/tm6000/tm6000-video.c         |  2 +-
>  drivers/media/usb/usbvision/usbvision-video.c   |  2 +-
>  drivers/media/v4l2-core/tuner-core.c            |  6 +++++-
>  drivers/staging/media/davinci_vpfe/vpfe_video.c |  2 +-
>  drivers/staging/media/go7007/go7007-v4l2.c      |  2 +-
>  drivers/staging/media/go7007/s2250-board.c      |  2 +-
>  drivers/staging/media/go7007/saa7134-go7007.c   |  4 ++++
>  include/media/v4l2-subdev.h                     |  6 +++---
>  60 files changed, 107 insertions(+), 95 deletions(-)

[snip]
Hans Verkuil April 22, 2014, 1:01 p.m. UTC | #2
Hi Laurent,

On 03/11/2014 11:14 AM, Laurent Pinchart wrote:
> The g_std and s_std operations are video-related, move them to the video
> ops where they belong.

You need to rebase this as it no longer applies to adv7180.c (trivial fix).

Anyway, after rebasing:

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>

I've also run the daily build with this patch without errors, so it looks
like nothing was missed :-)

Regards,

	Hans

> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  drivers/media/i2c/adv7180.c                     |  6 +-----
>  drivers/media/i2c/adv7183.c                     |  4 ++--
>  drivers/media/i2c/adv7842.c                     |  4 ++--
>  drivers/media/i2c/bt819.c                       |  2 +-
>  drivers/media/i2c/cx25840/cx25840-core.c        |  4 ++--
>  drivers/media/i2c/ks0127.c                      |  6 +-----
>  drivers/media/i2c/ml86v7667.c                   |  2 +-
>  drivers/media/i2c/msp3400-driver.c              |  2 +-
>  drivers/media/i2c/saa6752hs.c                   |  2 +-
>  drivers/media/i2c/saa7110.c                     |  2 +-
>  drivers/media/i2c/saa7115.c                     |  2 +-
>  drivers/media/i2c/saa717x.c                     |  2 +-
>  drivers/media/i2c/saa7191.c                     |  2 +-
>  drivers/media/i2c/soc_camera/tw9910.c           |  4 ++--
>  drivers/media/i2c/sony-btf-mpx.c                | 10 +++++-----
>  drivers/media/i2c/tvaudio.c                     |  6 +++++-
>  drivers/media/i2c/tvp514x.c                     |  2 +-
>  drivers/media/i2c/tvp5150.c                     |  2 +-
>  drivers/media/i2c/tw2804.c                      |  2 +-
>  drivers/media/i2c/tw9903.c                      |  2 +-
>  drivers/media/i2c/tw9906.c                      |  2 +-
>  drivers/media/i2c/vp27smpx.c                    |  6 +++++-
>  drivers/media/i2c/vpx3220.c                     |  2 +-
>  drivers/media/pci/bt8xx/bttv-driver.c           |  2 +-
>  drivers/media/pci/cx18/cx18-av-core.c           |  2 +-
>  drivers/media/pci/cx18/cx18-fileops.c           |  2 +-
>  drivers/media/pci/cx18/cx18-gpio.c              |  6 +++++-
>  drivers/media/pci/cx18/cx18-ioctl.c             |  2 +-
>  drivers/media/pci/cx23885/cx23885-video.c       |  4 ++--
>  drivers/media/pci/cx88/cx88-core.c              |  2 +-
>  drivers/media/pci/ivtv/ivtv-fileops.c           |  2 +-
>  drivers/media/pci/ivtv/ivtv-ioctl.c             |  2 +-
>  drivers/media/pci/saa7134/saa7134-video.c       |  4 ++--
>  drivers/media/pci/saa7146/mxb.c                 | 14 +++++++-------
>  drivers/media/pci/sta2x11/sta2x11_vip.c         |  4 ++--
>  drivers/media/pci/zoran/zoran_device.c          |  2 +-
>  drivers/media/pci/zoran/zoran_driver.c          |  2 +-
>  drivers/media/platform/blackfin/bfin_capture.c  |  4 ++--
>  drivers/media/platform/davinci/vpfe_capture.c   |  2 +-
>  drivers/media/platform/davinci/vpif_capture.c   |  2 +-
>  drivers/media/platform/davinci/vpif_display.c   |  2 +-
>  drivers/media/platform/fsl-viu.c                |  2 +-
>  drivers/media/platform/soc_camera/soc_camera.c  |  4 ++--
>  drivers/media/platform/timblogiw.c              |  2 +-
>  drivers/media/platform/vino.c                   |  6 +++---
>  drivers/media/usb/au0828/au0828-video.c         |  4 ++--
>  drivers/media/usb/cx231xx/cx231xx-417.c         |  2 +-
>  drivers/media/usb/cx231xx/cx231xx-video.c       |  6 +++---
>  drivers/media/usb/em28xx/em28xx-video.c         |  4 ++--
>  drivers/media/usb/pvrusb2/pvrusb2-hdw.c         |  2 +-
>  drivers/media/usb/stk1160/stk1160-v4l.c         |  4 ++--
>  drivers/media/usb/tm6000/tm6000-cards.c         |  2 +-
>  drivers/media/usb/tm6000/tm6000-video.c         |  2 +-
>  drivers/media/usb/usbvision/usbvision-video.c   |  2 +-
>  drivers/media/v4l2-core/tuner-core.c            |  6 +++++-
>  drivers/staging/media/davinci_vpfe/vpfe_video.c |  2 +-
>  drivers/staging/media/go7007/go7007-v4l2.c      |  2 +-
>  drivers/staging/media/go7007/s2250-board.c      |  2 +-
>  drivers/staging/media/go7007/saa7134-go7007.c   |  4 ++++
>  include/media/v4l2-subdev.h                     |  6 +++---
>  60 files changed, 107 insertions(+), 95 deletions(-)
> 
> diff --git a/drivers/media/i2c/adv7180.c b/drivers/media/i2c/adv7180.c
> index d7d99f1..10074a4 100644
> --- a/drivers/media/i2c/adv7180.c
> +++ b/drivers/media/i2c/adv7180.c
> @@ -430,6 +430,7 @@ static int adv7180_g_mbus_config(struct v4l2_subdev *sd,
>  }
>  
>  static const struct v4l2_subdev_video_ops adv7180_video_ops = {
> +	.s_std = adv7180_s_std,
>  	.querystd = adv7180_querystd,
>  	.g_input_status = adv7180_g_input_status,
>  	.s_routing = adv7180_s_routing,
> @@ -440,12 +441,7 @@ static const struct v4l2_subdev_video_ops adv7180_video_ops = {
>  	.g_mbus_config = adv7180_g_mbus_config,
>  };
>  
> -static const struct v4l2_subdev_core_ops adv7180_core_ops = {
> -	.s_std = adv7180_s_std,
> -};
> -
>  static const struct v4l2_subdev_ops adv7180_ops = {
> -	.core = &adv7180_core_ops,
>  	.video = &adv7180_video_ops,
>  };
>  
> diff --git a/drivers/media/i2c/adv7183.c b/drivers/media/i2c/adv7183.c
> index d45e0e3..df461b0 100644
> --- a/drivers/media/i2c/adv7183.c
> +++ b/drivers/media/i2c/adv7183.c
> @@ -501,8 +501,6 @@ static const struct v4l2_ctrl_ops adv7183_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops adv7183_core_ops = {
>  	.log_status = adv7183_log_status,
> -	.g_std = adv7183_g_std,
> -	.s_std = adv7183_s_std,
>  	.reset = adv7183_reset,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>  	.g_register = adv7183_g_register,
> @@ -511,6 +509,8 @@ static const struct v4l2_subdev_core_ops adv7183_core_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops adv7183_video_ops = {
> +	.g_std = adv7183_g_std,
> +	.s_std = adv7183_s_std,
>  	.s_routing = adv7183_s_routing,
>  	.querystd = adv7183_querystd,
>  	.g_input_status = adv7183_g_input_status,
> diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
> index 88ce9dc..12fb675 100644
> --- a/drivers/media/i2c/adv7842.c
> +++ b/drivers/media/i2c/adv7842.c
> @@ -2869,8 +2869,6 @@ static const struct v4l2_ctrl_ops adv7842_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops adv7842_core_ops = {
>  	.log_status = adv7842_log_status,
> -	.g_std = adv7842_g_std,
> -	.s_std = adv7842_s_std,
>  	.ioctl = adv7842_ioctl,
>  	.interrupt_service_routine = adv7842_isr,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
> @@ -2880,6 +2878,8 @@ static const struct v4l2_subdev_core_ops adv7842_core_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops adv7842_video_ops = {
> +	.g_std = adv7842_g_std,
> +	.s_std = adv7842_s_std,
>  	.s_routing = adv7842_s_routing,
>  	.querystd = adv7842_querystd,
>  	.g_input_status = adv7842_g_input_status,
> diff --git a/drivers/media/i2c/bt819.c b/drivers/media/i2c/bt819.c
> index 369cf6f..76b334a 100644
> --- a/drivers/media/i2c/bt819.c
> +++ b/drivers/media/i2c/bt819.c
> @@ -387,10 +387,10 @@ static const struct v4l2_subdev_core_ops bt819_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = bt819_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops bt819_video_ops = {
> +	.s_std = bt819_s_std,
>  	.s_routing = bt819_s_routing,
>  	.s_stream = bt819_s_stream,
>  	.querystd = bt819_querystd,
> diff --git a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c
> index 2e3771d..e453a3f 100644
> --- a/drivers/media/i2c/cx25840/cx25840-core.c
> +++ b/drivers/media/i2c/cx25840/cx25840-core.c
> @@ -5041,8 +5041,6 @@ static const struct v4l2_subdev_core_ops cx25840_core_ops = {
>  	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = cx25840_s_std,
> -	.g_std = cx25840_g_std,
>  	.reset = cx25840_reset,
>  	.load_fw = cx25840_load_fw,
>  	.s_io_pin_config = common_s_io_pin_config,
> @@ -5067,6 +5065,8 @@ static const struct v4l2_subdev_audio_ops cx25840_audio_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops cx25840_video_ops = {
> +	.s_std = cx25840_s_std,
> +	.g_std = cx25840_g_std,
>  	.s_routing = cx25840_s_video_routing,
>  	.s_mbus_fmt = cx25840_s_mbus_fmt,
>  	.s_stream = cx25840_s_stream,
> diff --git a/drivers/media/i2c/ks0127.c b/drivers/media/i2c/ks0127.c
> index c3e94ae..25b81bc 100644
> --- a/drivers/media/i2c/ks0127.c
> +++ b/drivers/media/i2c/ks0127.c
> @@ -648,11 +648,8 @@ static int ks0127_g_input_status(struct v4l2_subdev *sd, u32 *status)
>  
>  /* ----------------------------------------------------------------------- */
>  
> -static const struct v4l2_subdev_core_ops ks0127_core_ops = {
> -	.s_std = ks0127_s_std,
> -};
> -
>  static const struct v4l2_subdev_video_ops ks0127_video_ops = {
> +	.s_std = ks0127_s_std,
>  	.s_routing = ks0127_s_routing,
>  	.s_stream = ks0127_s_stream,
>  	.querystd = ks0127_querystd,
> @@ -660,7 +657,6 @@ static const struct v4l2_subdev_video_ops ks0127_video_ops = {
>  };
>  
>  static const struct v4l2_subdev_ops ks0127_ops = {
> -	.core = &ks0127_core_ops,
>  	.video = &ks0127_video_ops,
>  };
>  
> diff --git a/drivers/media/i2c/ml86v7667.c b/drivers/media/i2c/ml86v7667.c
> index a9110d8..2cace73 100644
> --- a/drivers/media/i2c/ml86v7667.c
> +++ b/drivers/media/i2c/ml86v7667.c
> @@ -276,6 +276,7 @@ static const struct v4l2_ctrl_ops ml86v7667_ctrl_ops = {
>  };
>  
>  static struct v4l2_subdev_video_ops ml86v7667_subdev_video_ops = {
> +	.s_std = ml86v7667_s_std,
>  	.querystd = ml86v7667_querystd,
>  	.g_input_status = ml86v7667_g_input_status,
>  	.enum_mbus_fmt = ml86v7667_enum_mbus_fmt,
> @@ -286,7 +287,6 @@ static struct v4l2_subdev_video_ops ml86v7667_subdev_video_ops = {
>  };
>  
>  static struct v4l2_subdev_core_ops ml86v7667_subdev_core_ops = {
> -	.s_std = ml86v7667_s_std,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>  	.g_register = ml86v7667_g_register,
>  	.s_register = ml86v7667_s_register,
> diff --git a/drivers/media/i2c/msp3400-driver.c b/drivers/media/i2c/msp3400-driver.c
> index 8190fec..4d9c6bc 100644
> --- a/drivers/media/i2c/msp3400-driver.c
> +++ b/drivers/media/i2c/msp3400-driver.c
> @@ -649,10 +649,10 @@ static const struct v4l2_subdev_core_ops msp_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = msp_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops msp_video_ops = {
> +	.s_std = msp_s_std,
>  	.querystd = msp_querystd,
>  };
>  
> diff --git a/drivers/media/i2c/saa6752hs.c b/drivers/media/i2c/saa6752hs.c
> index 8272c0b..04e9e55 100644
> --- a/drivers/media/i2c/saa6752hs.c
> +++ b/drivers/media/i2c/saa6752hs.c
> @@ -643,10 +643,10 @@ static const struct v4l2_ctrl_ops saa6752hs_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops saa6752hs_core_ops = {
>  	.init = saa6752hs_init,
> -	.s_std = saa6752hs_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops saa6752hs_video_ops = {
> +	.s_std = saa6752hs_s_std,
>  	.s_mbus_fmt = saa6752hs_s_mbus_fmt,
>  	.try_mbus_fmt = saa6752hs_try_mbus_fmt,
>  	.g_mbus_fmt = saa6752hs_g_mbus_fmt,
> diff --git a/drivers/media/i2c/saa7110.c b/drivers/media/i2c/saa7110.c
> index ac43e92..99689ee 100644
> --- a/drivers/media/i2c/saa7110.c
> +++ b/drivers/media/i2c/saa7110.c
> @@ -365,10 +365,10 @@ static const struct v4l2_subdev_core_ops saa7110_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = saa7110_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops saa7110_video_ops = {
> +	.s_std = saa7110_s_std,
>  	.s_routing = saa7110_s_routing,
>  	.s_stream = saa7110_s_stream,
>  	.querystd = saa7110_querystd,
> diff --git a/drivers/media/i2c/saa7115.c b/drivers/media/i2c/saa7115.c
> index afdbcb0..35a4464 100644
> --- a/drivers/media/i2c/saa7115.c
> +++ b/drivers/media/i2c/saa7115.c
> @@ -1582,7 +1582,6 @@ static const struct v4l2_subdev_core_ops saa711x_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = saa711x_s_std,
>  	.reset = saa711x_reset,
>  	.s_gpio = saa711x_s_gpio,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
> @@ -1601,6 +1600,7 @@ static const struct v4l2_subdev_audio_ops saa711x_audio_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops saa711x_video_ops = {
> +	.s_std = saa711x_s_std,
>  	.s_routing = saa711x_s_routing,
>  	.s_crystal_freq = saa711x_s_crystal_freq,
>  	.s_mbus_fmt = saa711x_s_mbus_fmt,
> diff --git a/drivers/media/i2c/saa717x.c b/drivers/media/i2c/saa717x.c
> index 401ca11..6922a9f 100644
> --- a/drivers/media/i2c/saa717x.c
> +++ b/drivers/media/i2c/saa717x.c
> @@ -1198,7 +1198,6 @@ static const struct v4l2_subdev_core_ops saa717x_core_ops = {
>  	.g_register = saa717x_g_register,
>  	.s_register = saa717x_s_register,
>  #endif
> -	.s_std = saa717x_s_std,
>  	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
>  	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
>  	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
> @@ -1216,6 +1215,7 @@ static const struct v4l2_subdev_tuner_ops saa717x_tuner_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops saa717x_video_ops = {
> +	.s_std = saa717x_s_std,
>  	.s_routing = saa717x_s_video_routing,
>  	.s_mbus_fmt = saa717x_s_mbus_fmt,
>  	.s_stream = saa717x_s_stream,
> diff --git a/drivers/media/i2c/saa7191.c b/drivers/media/i2c/saa7191.c
> index 606a4ba..8e96992 100644
> --- a/drivers/media/i2c/saa7191.c
> +++ b/drivers/media/i2c/saa7191.c
> @@ -573,10 +573,10 @@ static int saa7191_g_input_status(struct v4l2_subdev *sd, u32 *status)
>  static const struct v4l2_subdev_core_ops saa7191_core_ops = {
>  	.g_ctrl = saa7191_g_ctrl,
>  	.s_ctrl = saa7191_s_ctrl,
> -	.s_std = saa7191_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops saa7191_video_ops = {
> +	.s_std = saa7191_s_std,
>  	.s_routing = saa7191_s_routing,
>  	.querystd = saa7191_querystd,
>  	.g_input_status = saa7191_g_input_status,
> diff --git a/drivers/media/i2c/soc_camera/tw9910.c b/drivers/media/i2c/soc_camera/tw9910.c
> index ab54628..059478a 100644
> --- a/drivers/media/i2c/soc_camera/tw9910.c
> +++ b/drivers/media/i2c/soc_camera/tw9910.c
> @@ -814,8 +814,6 @@ done:
>  }
>  
>  static struct v4l2_subdev_core_ops tw9910_subdev_core_ops = {
> -	.s_std		= tw9910_s_std,
> -	.g_std		= tw9910_g_std,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>  	.g_register	= tw9910_g_register,
>  	.s_register	= tw9910_s_register,
> @@ -873,6 +871,8 @@ static int tw9910_s_mbus_config(struct v4l2_subdev *sd,
>  }
>  
>  static struct v4l2_subdev_video_ops tw9910_subdev_video_ops = {
> +	.s_std		= tw9910_s_std,
> +	.g_std		= tw9910_g_std,
>  	.s_stream	= tw9910_s_stream,
>  	.g_mbus_fmt	= tw9910_g_fmt,
>  	.s_mbus_fmt	= tw9910_s_fmt,
> diff --git a/drivers/media/i2c/sony-btf-mpx.c b/drivers/media/i2c/sony-btf-mpx.c
> index 32d8232..1da8004 100644
> --- a/drivers/media/i2c/sony-btf-mpx.c
> +++ b/drivers/media/i2c/sony-btf-mpx.c
> @@ -327,18 +327,18 @@ static int sony_btf_mpx_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner
>  
>  /* --------------------------------------------------------------------------*/
>  
> -static const struct v4l2_subdev_core_ops sony_btf_mpx_core_ops = {
> -	.s_std = sony_btf_mpx_s_std,
> -};
> -
>  static const struct v4l2_subdev_tuner_ops sony_btf_mpx_tuner_ops = {
>  	.s_tuner = sony_btf_mpx_s_tuner,
>  	.g_tuner = sony_btf_mpx_g_tuner,
>  };
>  
> +static const struct v4l2_subdev_video_ops sony_btf_mpx_video_ops = {
> +	.s_std = sony_btf_mpx_s_std,
> +};
> +
>  static const struct v4l2_subdev_ops sony_btf_mpx_ops = {
> -	.core = &sony_btf_mpx_core_ops,
>  	.tuner = &sony_btf_mpx_tuner_ops,
> +	.video = &sony_btf_mpx_video_ops,
>  };
>  
>  /* --------------------------------------------------------------------------*/
> diff --git a/drivers/media/i2c/tvaudio.c b/drivers/media/i2c/tvaudio.c
> index d76c53a8..070c152 100644
> --- a/drivers/media/i2c/tvaudio.c
> +++ b/drivers/media/i2c/tvaudio.c
> @@ -1862,7 +1862,6 @@ static const struct v4l2_subdev_core_ops tvaudio_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = tvaudio_s_std,
>  };
>  
>  static const struct v4l2_subdev_tuner_ops tvaudio_tuner_ops = {
> @@ -1876,10 +1875,15 @@ static const struct v4l2_subdev_audio_ops tvaudio_audio_ops = {
>  	.s_routing = tvaudio_s_routing,
>  };
>  
> +static const struct v4l2_subdev_video_ops tvaudio_video_ops = {
> +	.s_std = tvaudio_s_std,
> +};
> +
>  static const struct v4l2_subdev_ops tvaudio_ops = {
>  	.core = &tvaudio_core_ops,
>  	.tuner = &tvaudio_tuner_ops,
>  	.audio = &tvaudio_audio_ops,
> +	.video = &tvaudio_video_ops,
>  };
>  
>  /* ----------------------------------------------------------------------- */
> diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
> index 83d85df..d163a95 100644
> --- a/drivers/media/i2c/tvp514x.c
> +++ b/drivers/media/i2c/tvp514x.c
> @@ -1009,10 +1009,10 @@ static const struct v4l2_subdev_core_ops tvp514x_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = tvp514x_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops tvp514x_video_ops = {
> +	.s_std = tvp514x_s_std,
>  	.s_routing = tvp514x_s_routing,
>  	.querystd = tvp514x_querystd,
>  	.enum_mbus_fmt = tvp514x_enum_mbus_fmt,
> diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
> index 542d252..5ee0f40 100644
> --- a/drivers/media/i2c/tvp5150.c
> +++ b/drivers/media/i2c/tvp5150.c
> @@ -1063,7 +1063,6 @@ static const struct v4l2_ctrl_ops tvp5150_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops tvp5150_core_ops = {
>  	.log_status = tvp5150_log_status,
> -	.s_std = tvp5150_s_std,
>  	.reset = tvp5150_reset,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>  	.g_register = tvp5150_g_register,
> @@ -1076,6 +1075,7 @@ static const struct v4l2_subdev_tuner_ops tvp5150_tuner_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops tvp5150_video_ops = {
> +	.s_std = tvp5150_s_std,
>  	.s_routing = tvp5150_s_routing,
>  	.enum_mbus_fmt = tvp5150_enum_mbus_fmt,
>  	.s_mbus_fmt = tvp5150_mbus_fmt,
> diff --git a/drivers/media/i2c/tw2804.c b/drivers/media/i2c/tw2804.c
> index f58607d..7347480 100644
> --- a/drivers/media/i2c/tw2804.c
> +++ b/drivers/media/i2c/tw2804.c
> @@ -342,12 +342,12 @@ static const struct v4l2_ctrl_ops tw2804_ctrl_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops tw2804_video_ops = {
> +	.s_std = tw2804_s_std,
>  	.s_routing = tw2804_s_video_routing,
>  };
>  
>  static const struct v4l2_subdev_core_ops tw2804_core_ops = {
>  	.log_status = tw2804_log_status,
> -	.s_std = tw2804_s_std,
>  };
>  
>  static const struct v4l2_subdev_ops tw2804_ops = {
> diff --git a/drivers/media/i2c/tw9903.c b/drivers/media/i2c/tw9903.c
> index 285b759..12c7d21 100644
> --- a/drivers/media/i2c/tw9903.c
> +++ b/drivers/media/i2c/tw9903.c
> @@ -187,10 +187,10 @@ static const struct v4l2_ctrl_ops tw9903_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops tw9903_core_ops = {
>  	.log_status = tw9903_log_status,
> -	.s_std = tw9903_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops tw9903_video_ops = {
> +	.s_std = tw9903_s_std,
>  	.s_routing = tw9903_s_video_routing,
>  };
>  
> diff --git a/drivers/media/i2c/tw9906.c b/drivers/media/i2c/tw9906.c
> index f6bef25..2672d89 100644
> --- a/drivers/media/i2c/tw9906.c
> +++ b/drivers/media/i2c/tw9906.c
> @@ -157,10 +157,10 @@ static const struct v4l2_ctrl_ops tw9906_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops tw9906_core_ops = {
>  	.log_status = tw9906_log_status,
> -	.s_std = tw9906_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops tw9906_video_ops = {
> +	.s_std = tw9906_s_std,
>  	.s_routing = tw9906_s_video_routing,
>  };
>  
> diff --git a/drivers/media/i2c/vp27smpx.c b/drivers/media/i2c/vp27smpx.c
> index 6a3a3ff..819ab6d 100644
> --- a/drivers/media/i2c/vp27smpx.c
> +++ b/drivers/media/i2c/vp27smpx.c
> @@ -124,7 +124,6 @@ static int vp27smpx_log_status(struct v4l2_subdev *sd)
>  
>  static const struct v4l2_subdev_core_ops vp27smpx_core_ops = {
>  	.log_status = vp27smpx_log_status,
> -	.s_std = vp27smpx_s_std,
>  };
>  
>  static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = {
> @@ -133,9 +132,14 @@ static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = {
>  	.g_tuner = vp27smpx_g_tuner,
>  };
>  
> +static const struct v4l2_subdev_video_ops vp27smpx_video_ops = {
> +	.s_std = vp27smpx_s_std,
> +};
> +
>  static const struct v4l2_subdev_ops vp27smpx_ops = {
>  	.core = &vp27smpx_core_ops,
>  	.tuner = &vp27smpx_tuner_ops,
> +	.video = &vp27smpx_video_ops,
>  };
>  
>  /* ----------------------------------------------------------------------- */
> diff --git a/drivers/media/i2c/vpx3220.c b/drivers/media/i2c/vpx3220.c
> index ece90df..016e766 100644
> --- a/drivers/media/i2c/vpx3220.c
> +++ b/drivers/media/i2c/vpx3220.c
> @@ -457,10 +457,10 @@ static const struct v4l2_subdev_core_ops vpx3220_core_ops = {
>  	.s_ctrl = v4l2_subdev_s_ctrl,
>  	.queryctrl = v4l2_subdev_queryctrl,
>  	.querymenu = v4l2_subdev_querymenu,
> -	.s_std = vpx3220_s_std,
>  };
>  
>  static const struct v4l2_subdev_video_ops vpx3220_video_ops = {
> +	.s_std = vpx3220_s_std,
>  	.s_routing = vpx3220_s_routing,
>  	.s_stream = vpx3220_s_stream,
>  	.querystd = vpx3220_querystd,
> diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
> index afcd53b..da780f4 100644
> --- a/drivers/media/pci/bt8xx/bttv-driver.c
> +++ b/drivers/media/pci/bt8xx/bttv-driver.c
> @@ -1182,7 +1182,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
>  		break;
>  	}
>  	id = tvnorm->v4l2_id;
> -	bttv_call_all(btv, core, s_std, id);
> +	bttv_call_all(btv, video, s_std, id);
>  
>  	return 0;
>  }
> diff --git a/drivers/media/pci/cx18/cx18-av-core.c b/drivers/media/pci/cx18/cx18-av-core.c
> index c4890a4..2d3afe0 100644
> --- a/drivers/media/pci/cx18/cx18-av-core.c
> +++ b/drivers/media/pci/cx18/cx18-av-core.c
> @@ -1263,7 +1263,6 @@ static const struct v4l2_subdev_core_ops cx18_av_general_ops = {
>  	.log_status = cx18_av_log_status,
>  	.load_fw = cx18_av_load_fw,
>  	.reset = cx18_av_reset,
> -	.s_std = cx18_av_s_std,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>  	.g_register = cx18_av_g_register,
>  	.s_register = cx18_av_s_register,
> @@ -1283,6 +1282,7 @@ static const struct v4l2_subdev_audio_ops cx18_av_audio_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops cx18_av_video_ops = {
> +	.s_std = cx18_av_s_std,
>  	.s_routing = cx18_av_s_video_routing,
>  	.s_stream = cx18_av_s_stream,
>  	.s_mbus_fmt = cx18_av_s_mbus_fmt,
> diff --git a/drivers/media/pci/cx18/cx18-fileops.c b/drivers/media/pci/cx18/cx18-fileops.c
> index 4bfd865..76a3b4a 100644
> --- a/drivers/media/pci/cx18/cx18-fileops.c
> +++ b/drivers/media/pci/cx18/cx18-fileops.c
> @@ -760,7 +760,7 @@ int cx18_v4l2_close(struct file *filp)
>  		/* 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, core, s_std, cx->std);
> +		cx18_call_all(cx, video, 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/pci/cx18/cx18-gpio.c b/drivers/media/pci/cx18/cx18-gpio.c
> index 5374aeb..38dc6b8 100644
> --- a/drivers/media/pci/cx18/cx18-gpio.c
> +++ b/drivers/media/pci/cx18/cx18-gpio.c
> @@ -180,7 +180,6 @@ static int gpiomux_s_audio_routing(struct v4l2_subdev *sd,
>  
>  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 = {
> @@ -191,10 +190,15 @@ static const struct v4l2_subdev_audio_ops gpiomux_audio_ops = {
>  	.s_routing = gpiomux_s_audio_routing,
>  };
>  
> +static const struct v4l2_subdev_video_ops gpiomux_video_ops = {
> +	.s_std = gpiomux_s_std,
> +};
> +
>  static const struct v4l2_subdev_ops gpiomux_ops = {
>  	.core = &gpiomux_core_ops,
>  	.tuner = &gpiomux_tuner_ops,
>  	.audio = &gpiomux_audio_ops,
> +	.video = &gpiomux_video_ops,
>  };
>  
>  /*
> diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c
> index 1110bcb..fefb2cd 100644
> --- a/drivers/media/pci/cx18/cx18-ioctl.c
> +++ b/drivers/media/pci/cx18/cx18-ioctl.c
> @@ -602,7 +602,7 @@ int cx18_s_std(struct file *file, void *fh, v4l2_std_id std)
>  			(unsigned long long) cx->std);
>  
>  	/* Tuner */
> -	cx18_call_all(cx, core, s_std, cx->std);
> +	cx18_call_all(cx, video, s_std, cx->std);
>  	return 0;
>  }
>  
> diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c
> index 7891f34..e0a5952 100644
> --- a/drivers/media/pci/cx23885/cx23885-video.c
> +++ b/drivers/media/pci/cx23885/cx23885-video.c
> @@ -326,7 +326,7 @@ int cx23885_set_tvnorm(struct cx23885_dev *dev, v4l2_std_id norm)
>  
>  	dev->tvnorm = norm;
>  
> -	call_all(dev, core, s_std, norm);
> +	call_all(dev, video, s_std, norm);
>  
>  	return 0;
>  }
> @@ -1589,7 +1589,7 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev,
>  		fe = &dev->ts1.analog_fe;
>  
>  	if (fe && fe->ops.tuner_ops.set_analog_params) {
> -		call_all(dev, core, s_std, dev->tvnorm);
> +		call_all(dev, video, s_std, dev->tvnorm);
>  		fe->ops.tuner_ops.set_analog_params(fe, &params);
>  	}
>  	else
> diff --git a/drivers/media/pci/cx88/cx88-core.c b/drivers/media/pci/cx88/cx88-core.c
> index ad59dc9..e061c88 100644
> --- a/drivers/media/pci/cx88/cx88-core.c
> +++ b/drivers/media/pci/cx88/cx88-core.c
> @@ -1012,7 +1012,7 @@ int cx88_set_tvnorm(struct cx88_core *core, v4l2_std_id norm)
>  	set_tvaudio(core);
>  
>  	// tell i2c chips
> -	call_all(core, core, s_std, norm);
> +	call_all(core, video, s_std, norm);
>  
>  	/* The chroma_agc control should be inaccessible if the video format is SECAM */
>  	v4l2_ctrl_grab(core->chroma_agc, cxiformat == VideoFormatSECAM);
> diff --git a/drivers/media/pci/ivtv/ivtv-fileops.c b/drivers/media/pci/ivtv/ivtv-fileops.c
> index 9caffd8..e5ff627 100644
> --- a/drivers/media/pci/ivtv/ivtv-fileops.c
> +++ b/drivers/media/pci/ivtv/ivtv-fileops.c
> @@ -894,7 +894,7 @@ int ivtv_v4l2_close(struct file *filp)
>  		/* 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, core, s_std, itv->std);
> +		ivtv_call_all(itv, video, 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/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c
> index 807b275..b3667a0 100644
> --- a/drivers/media/pci/ivtv/ivtv-ioctl.c
> +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c
> @@ -1090,7 +1090,7 @@ void ivtv_s_std_enc(struct ivtv *itv, v4l2_std_id std)
>  		itv->vbi.sliced_decoder_line_size = itv->is_60hz ? 272 : 284;
>  
>  	/* Tuner */
> -	ivtv_call_all(itv, core, s_std, itv->std);
> +	ivtv_call_all(itv, video, s_std, itv->std);
>  }
>  
>  void ivtv_s_std_dec(struct ivtv *itv, v4l2_std_id std)
> diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c
> index eb472b5..26082b4 100644
> --- a/drivers/media/pci/saa7134/saa7134-video.c
> +++ b/drivers/media/pci/saa7134/saa7134-video.c
> @@ -506,10 +506,10 @@ void saa7134_set_tvnorm_hw(struct saa7134_dev *dev)
>  	saa7134_set_decoder(dev);
>  
>  	if (card_in(dev, dev->ctl_input).tv)
> -		saa_call_all(dev, core, s_std, dev->tvnorm->id);
> +		saa_call_all(dev, video, 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, core, s_std, dev->tvnorm->id);
> +	saa_call_empress(dev, video, s_std, dev->tvnorm->id);
>  }
>  
>  static void set_h_prescale(struct saa7134_dev *dev, int task, int prescale)
> diff --git a/drivers/media/pci/saa7146/mxb.c b/drivers/media/pci/saa7146/mxb.c
> index 33abe33..c4c8fce 100644
> --- a/drivers/media/pci/saa7146/mxb.c
> +++ b/drivers/media/pci/saa7146/mxb.c
> @@ -357,7 +357,7 @@ static int mxb_init_done(struct saa7146_dev* dev)
>  	tea6420_route(mxb, 6);
>  
>  	/* select video mode in saa7111a */
> -	saa7111a_call(mxb, core, s_std, std);
> +	saa7111a_call(mxb, video, s_std, std);
>  
>  	/* select tuner-output on saa7111a */
>  	i = 0;
> @@ -379,8 +379,8 @@ static int mxb_init_done(struct saa7146_dev* dev)
>  	/* These two gpio calls set the GPIO pins that control the tda9820 */
>  	saa7146_write(dev, GPIO_CTRL, 0x00404050);
>  	saa7111a_call(mxb, core, s_gpio, 1);
> -	saa7111a_call(mxb, core, s_std, std);
> -	tuner_call(mxb, core, s_std, std);
> +	saa7111a_call(mxb, video, s_std, std);
> +	tuner_call(mxb, video, s_std, std);
>  
>  	/* switch to tuner-channel on tea6415c */
>  	tea6415c_call(mxb, video, s_routing, 3, 17, 0);
> @@ -771,9 +771,9 @@ static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *standa
>  		/* These two gpio calls set the GPIO pins that control the tda9820 */
>  		saa7146_write(dev, GPIO_CTRL, 0x00404050);
>  		saa7111a_call(mxb, core, s_gpio, 0);
> -		saa7111a_call(mxb, core, s_std, std);
> +		saa7111a_call(mxb, video, s_std, std);
>  		if (mxb->cur_input == 0)
> -			tuner_call(mxb, core, s_std, std);
> +			tuner_call(mxb, video, s_std, std);
>  	} else {
>  		v4l2_std_id std = V4L2_STD_PAL_BG;
>  
> @@ -783,9 +783,9 @@ static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *standa
>  		/* These two gpio calls set the GPIO pins that control the tda9820 */
>  		saa7146_write(dev, GPIO_CTRL, 0x00404050);
>  		saa7111a_call(mxb, core, s_gpio, 1);
> -		saa7111a_call(mxb, core, s_std, std);
> +		saa7111a_call(mxb, video, s_std, std);
>  		if (mxb->cur_input == 0)
> -			tuner_call(mxb, core, s_std, std);
> +			tuner_call(mxb, video, s_std, std);
>  	}
>  	return 0;
>  }
> diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c
> index bb11443..12485a9 100644
> --- a/drivers/media/pci/sta2x11/sta2x11_vip.c
> +++ b/drivers/media/pci/sta2x11/sta2x11_vip.c
> @@ -445,7 +445,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id std)
>  	int status;
>  
>  	if (V4L2_STD_ALL == std) {
> -		v4l2_subdev_call(vip->decoder, core, s_std, std);
> +		v4l2_subdev_call(vip->decoder, video, s_std, std);
>  		ssleep(2);
>  		v4l2_subdev_call(vip->decoder, video, querystd, &newstd);
>  		v4l2_subdev_call(vip->decoder, video, g_input_status, &status);
> @@ -468,7 +468,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id std)
>  			vip->format = formats_50[0];
>  	}
>  
> -	return v4l2_subdev_call(vip->decoder, core, s_std, std);
> +	return v4l2_subdev_call(vip->decoder, video, s_std, std);
>  }
>  
>  /**
> diff --git a/drivers/media/pci/zoran/zoran_device.c b/drivers/media/pci/zoran/zoran_device.c
> index 519164c..bf34b93 100644
> --- a/drivers/media/pci/zoran/zoran_device.c
> +++ b/drivers/media/pci/zoran/zoran_device.c
> @@ -1572,7 +1572,7 @@ zoran_init_hardware (struct zoran *zr)
>  	}
>  
>  	decoder_call(zr, core, init, 0);
> -	decoder_call(zr, core, s_std, zr->norm);
> +	decoder_call(zr, video, s_std, zr->norm);
>  	decoder_call(zr, video, s_routing,
>  		zr->card.input[zr->input].muxsel, 0, 0);
>  
> diff --git a/drivers/media/pci/zoran/zoran_driver.c b/drivers/media/pci/zoran/zoran_driver.c
> index e7e9840..099d5fb 100644
> --- a/drivers/media/pci/zoran/zoran_driver.c
> +++ b/drivers/media/pci/zoran/zoran_driver.c
> @@ -1469,7 +1469,7 @@ zoran_set_norm (struct zoran *zr,
>  	if (on)
>  		zr36057_overlay(zr, 0);
>  
> -	decoder_call(zr, core, s_std, norm);
> +	decoder_call(zr, video, s_std, norm);
>  	encoder_call(zr, video, s_std_output, norm);
>  
>  	if (on)
> diff --git a/drivers/media/platform/blackfin/bfin_capture.c b/drivers/media/platform/blackfin/bfin_capture.c
> index 200bec9..852c05b 100644
> --- a/drivers/media/platform/blackfin/bfin_capture.c
> +++ b/drivers/media/platform/blackfin/bfin_capture.c
> @@ -635,7 +635,7 @@ static int bcap_s_std(struct file *file, void *priv, v4l2_std_id std)
>  	if (vb2_is_busy(&bcap_dev->buffer_queue))
>  		return -EBUSY;
>  
> -	ret = v4l2_subdev_call(bcap_dev->sd, core, s_std, std);
> +	ret = v4l2_subdev_call(bcap_dev->sd, video, s_std, std);
>  	if (ret < 0)
>  		return ret;
>  
> @@ -1069,7 +1069,7 @@ static int bcap_probe(struct platform_device *pdev)
>  	/* now we can probe the default state */
>  	if (config->inputs[0].capabilities & V4L2_IN_CAP_STD) {
>  		v4l2_std_id std;
> -		ret = v4l2_subdev_call(bcap_dev->sd, core, g_std, &std);
> +		ret = v4l2_subdev_call(bcap_dev->sd, video, g_std, &std);
>  		if (ret) {
>  			v4l2_err(&bcap_dev->v4l2_dev,
>  					"Unable to get std\n");
> diff --git a/drivers/media/platform/davinci/vpfe_capture.c b/drivers/media/platform/davinci/vpfe_capture.c
> index d762246..0ebbdf1 100644
> --- a/drivers/media/platform/davinci/vpfe_capture.c
> +++ b/drivers/media/platform/davinci/vpfe_capture.c
> @@ -1215,7 +1215,7 @@ static int vpfe_s_std(struct file *file, void *priv, v4l2_std_id std_id)
>  	}
>  
>  	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
> -					 core, s_std, std_id);
> +					 video, s_std, std_id);
>  	if (ret < 0) {
>  		v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n");
>  		goto unlock_out;
> diff --git a/drivers/media/platform/davinci/vpif_capture.c b/drivers/media/platform/davinci/vpif_capture.c
> index 756da78..ff6e9e0 100644
> --- a/drivers/media/platform/davinci/vpif_capture.c
> +++ b/drivers/media/platform/davinci/vpif_capture.c
> @@ -1420,7 +1420,7 @@ static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
>  	vpif_config_format(ch);
>  
>  	/* set standard in the sub device */
> -	ret = v4l2_subdev_call(ch->sd, core, s_std, std_id);
> +	ret = v4l2_subdev_call(ch->sd, video, s_std, std_id);
>  	if (ret && ret != -ENOIOCTLCMD && ret != -ENODEV) {
>  		vpif_dbg(1, debug, "Failed to set standard for sub devices\n");
>  		return ret;
> diff --git a/drivers/media/platform/davinci/vpif_display.c b/drivers/media/platform/davinci/vpif_display.c
> index 0ac841e..37c5d48 100644
> --- a/drivers/media/platform/davinci/vpif_display.c
> +++ b/drivers/media/platform/davinci/vpif_display.c
> @@ -1076,7 +1076,7 @@ static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
>  		return ret;
>  	}
>  
> -	ret = v4l2_device_call_until_err(&vpif_obj.v4l2_dev, 1, core,
> +	ret = v4l2_device_call_until_err(&vpif_obj.v4l2_dev, 1, video,
>  							s_std, std_id);
>  	if (ret < 0)
>  		vpif_err("Failed to set standard for sub devices\n");
> diff --git a/drivers/media/platform/fsl-viu.c b/drivers/media/platform/fsl-viu.c
> index dbf0ce3..d5dc198 100644
> --- a/drivers/media/platform/fsl-viu.c
> +++ b/drivers/media/platform/fsl-viu.c
> @@ -964,7 +964,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
>  	struct viu_fh *fh = priv;
>  
>  	fh->dev->std = id;
> -	decoder_call(fh->dev, core, s_std, id);
> +	decoder_call(fh->dev, video, s_std, id);
>  	return 0;
>  }
>  
> diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c
> index 4b8c024..79bfbc6 100644
> --- a/drivers/media/platform/soc_camera/soc_camera.c
> +++ b/drivers/media/platform/soc_camera/soc_camera.c
> @@ -314,7 +314,7 @@ static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id a)
>  	struct soc_camera_device *icd = file->private_data;
>  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
>  
> -	return v4l2_subdev_call(sd, core, s_std, a);
> +	return v4l2_subdev_call(sd, video, s_std, a);
>  }
>  
>  static int soc_camera_g_std(struct file *file, void *priv, v4l2_std_id *a)
> @@ -322,7 +322,7 @@ static int soc_camera_g_std(struct file *file, void *priv, v4l2_std_id *a)
>  	struct soc_camera_device *icd = file->private_data;
>  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
>  
> -	return v4l2_subdev_call(sd, core, g_std, a);
> +	return v4l2_subdev_call(sd, video, g_std, a);
>  }
>  
>  static int soc_camera_enum_framesizes(struct file *file, void *fh,
> diff --git a/drivers/media/platform/timblogiw.c b/drivers/media/platform/timblogiw.c
> index ccdadd6..cc34eae 100644
> --- a/drivers/media/platform/timblogiw.c
> +++ b/drivers/media/platform/timblogiw.c
> @@ -347,7 +347,7 @@ static int timblogiw_s_std(struct file *file, void  *priv, v4l2_std_id std)
>  	mutex_lock(&lw->lock);
>  
>  	if (TIMBLOGIW_HAS_DECODER(lw))
> -		err = v4l2_subdev_call(lw->sd_enc, core, s_std, std);
> +		err = v4l2_subdev_call(lw->sd_enc, video, s_std, std);
>  
>  	if (!err)
>  		fh->cur_norm = timblogiw_get_norm(std);
> diff --git a/drivers/media/platform/vino.c b/drivers/media/platform/vino.c
> index c6af974..470d353 100644
> --- a/drivers/media/platform/vino.c
> +++ b/drivers/media/platform/vino.c
> @@ -2586,7 +2586,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
>  			}
>  			if (data_norm == 3)
>  				data_norm = VINO_DATA_NORM_PAL;
> -			ret = decoder_call(core, s_std, norm);
> +			ret = decoder_call(video, s_std, norm);
>  		}
>  
>  		spin_lock_irqsave(&vino_drvdata->input_lock, flags);
> @@ -2675,7 +2675,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input)
>  				}
>  				if (data_norm == 3)
>  					data_norm = VINO_DATA_NORM_PAL;
> -				ret = decoder_call(core, s_std, norm);
> +				ret = decoder_call(video, s_std, norm);
>  			}
>  
>  			spin_lock_irqsave(&vino_drvdata->input_lock, flags);
> @@ -2809,7 +2809,7 @@ static int vino_set_data_norm(struct vino_channel_settings *vcs,
>  		 * as it may take a while... */
>  
>  		norm = vino_data_norms[data_norm].std;
> -		err = decoder_call(core, s_std, norm);
> +		err = decoder_call(video, s_std, norm);
>  
>  		spin_lock_irqsave(&vino_drvdata->input_lock, *flags);
>  
> diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c
> index f615454..9038194 100644
> --- a/drivers/media/usb/au0828/au0828-video.c
> +++ b/drivers/media/usb/au0828/au0828-video.c
> @@ -1109,7 +1109,7 @@ static void au0828_init_tuner(struct au0828_dev *dev)
>  	/* If we've never sent the standard in tuner core, do so now.
>  	   We don't do this at device probe because we don't want to
>  	   incur the cost of a firmware load */
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->std);
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->std);
>  	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f);
>  	i2c_gate_ctrl(dev, 0);
>  }
> @@ -1368,7 +1368,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
>  	   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, core, s_std, norm);
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm);
>  
>  	i2c_gate_ctrl(dev, 0);
>  
> diff --git a/drivers/media/usb/cx231xx/cx231xx-417.c b/drivers/media/usb/cx231xx/cx231xx-417.c
> index 2f63029..30a0c69 100644
> --- a/drivers/media/usb/cx231xx/cx231xx-417.c
> +++ b/drivers/media/usb/cx231xx/cx231xx-417.c
> @@ -1516,7 +1516,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
>  		dev->ts1.height = 576;
>  		cx2341x_handler_set_50hz(&dev->mpeg_ctrl_handler, true);
>  	}
> -	call_all(dev, core, s_std, dev->norm);
> +	call_all(dev, video, s_std, dev->norm);
>  	/* do mode control overrides */
>  	cx231xx_do_mode_ctrl_overrides(dev);
>  
> diff --git a/drivers/media/usb/cx231xx/cx231xx-video.c b/drivers/media/usb/cx231xx/cx231xx-video.c
> index 9906261..1f87513 100644
> --- a/drivers/media/usb/cx231xx/cx231xx-video.c
> +++ b/drivers/media/usb/cx231xx/cx231xx-video.c
> @@ -1009,7 +1009,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
>  	dev->width = 720;
>  	dev->height = (dev->norm & V4L2_STD_625_50) ? 576 : 480;
>  
> -	call_all(dev, core, s_std, dev->norm);
> +	call_all(dev, video, s_std, dev->norm);
>  
>  	/* We need to reset basic properties in the decoder related to
>  	   resolution (since a standard change effects things like the number
> @@ -1108,7 +1108,7 @@ int cx231xx_s_input(struct file *file, void *priv, unsigned int i)
>  		/* There's a tuner, so reset the standard and put it on the
>  		   last known frequency (since it was probably powered down
>  		   until now */
> -		call_all(dev, core, s_std, dev->norm);
> +		call_all(dev, video, s_std, dev->norm);
>  	}
>  
>  	return 0;
> @@ -2099,7 +2099,7 @@ int cx231xx_register_analog_devices(struct cx231xx *dev)
>  	/* Set the initial input */
>  	video_mux(dev, dev->video_input);
>  
> -	call_all(dev, core, s_std, dev->norm);
> +	call_all(dev, video, s_std, dev->norm);
>  
>  	v4l2_ctrl_handler_init(&dev->ctrl_handler, 10);
>  	v4l2_ctrl_handler_init(&dev->radio_ctrl_handler, 5);
> diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
> index 0856e5d..b7c1abf 100644
> --- a/drivers/media/usb/em28xx/em28xx-video.c
> +++ b/drivers/media/usb/em28xx/em28xx-video.c
> @@ -1351,7 +1351,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
>  	size_to_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
>  
>  	em28xx_resolution_set(dev);
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
>  
>  	return 0;
>  }
> @@ -2349,7 +2349,7 @@ static int em28xx_v4l2_init(struct em28xx *dev)
>  
>  	/* set default norm */
>  	dev->norm = V4L2_STD_PAL;
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
>  	dev->interlaced = EM28XX_INTERLACED_DEFAULT;
>  
>  	/* Analog specific initialization */
> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
> index ea05f67..9623b62 100644
> --- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
> +++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
> @@ -2910,7 +2910,7 @@ static void pvr2_subdev_update(struct pvr2_hdw *hdw)
>  			v4l2_std_id vs;
>  			vs = hdw->std_mask_cur;
>  			v4l2_device_call_all(&hdw->v4l2_dev, 0,
> -					     core, s_std, vs);
> +					     video, s_std, vs);
>  			pvr2_hdw_cx25840_vbi_hack(hdw);
>  		}
>  		hdw->tuner_signal_stale = !0;
> diff --git a/drivers/media/usb/stk1160/stk1160-v4l.c b/drivers/media/usb/stk1160/stk1160-v4l.c
> index 37bc00f..759e4b0 100644
> --- a/drivers/media/usb/stk1160/stk1160-v4l.c
> +++ b/drivers/media/usb/stk1160/stk1160-v4l.c
> @@ -406,7 +406,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
>  
>  	stk1160_set_std(dev);
>  
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std,
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std,
>  			dev->norm);
>  
>  	return 0;
> @@ -682,7 +682,7 @@ int stk1160_video_register(struct stk1160 *dev)
>  	dev->fmt = &format[0];
>  	stk1160_set_std(dev);
>  
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std,
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std,
>  			dev->norm);
>  
>  	video_set_drvdata(&dev->vdev, dev);
> diff --git a/drivers/media/usb/tm6000/tm6000-cards.c b/drivers/media/usb/tm6000/tm6000-cards.c
> index 1ccaadd..2e8c3af 100644
> --- a/drivers/media/usb/tm6000/tm6000-cards.c
> +++ b/drivers/media/usb/tm6000/tm6000-cards.c
> @@ -1120,7 +1120,7 @@ static int tm6000_init_dev(struct tm6000_core *dev)
>  	tm6000_config_tuner(dev);
>  
>  	/* Set video standard */
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
>  
>  	/* Set tuner frequency - also loads firmware on xc2028/xc3028 */
>  	f.tuner = 0;
> diff --git a/drivers/media/usb/tm6000/tm6000-video.c b/drivers/media/usb/tm6000/tm6000-video.c
> index cc1aa14..e6b3d5d 100644
> --- a/drivers/media/usb/tm6000/tm6000-video.c
> +++ b/drivers/media/usb/tm6000/tm6000-video.c
> @@ -1071,7 +1071,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
>  	if (rc < 0)
>  		return rc;
>  
> -	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
> +	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
>  
>  	return 0;
>  }
> diff --git a/drivers/media/usb/usbvision/usbvision-video.c b/drivers/media/usb/usbvision/usbvision-video.c
> index 5c9e312..68bc961 100644
> --- a/drivers/media/usb/usbvision/usbvision-video.c
> +++ b/drivers/media/usb/usbvision/usbvision-video.c
> @@ -597,7 +597,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
>  
>  	usbvision->tvnorm_id = id;
>  
> -	call_all(usbvision, core, s_std, usbvision->tvnorm_id);
> +	call_all(usbvision, video, s_std, usbvision->tvnorm_id);
>  	/* propagate the change to the decoder */
>  	usbvision_muxsel(usbvision, usbvision->ctl_input);
>  
> diff --git a/drivers/media/v4l2-core/tuner-core.c b/drivers/media/v4l2-core/tuner-core.c
> index 20c0922..06c18ba 100644
> --- a/drivers/media/v4l2-core/tuner-core.c
> +++ b/drivers/media/v4l2-core/tuner-core.c
> @@ -1301,7 +1301,6 @@ static int tuner_command(struct i2c_client *client, unsigned cmd, void *arg)
>  
>  static const struct v4l2_subdev_core_ops tuner_core_ops = {
>  	.log_status = tuner_log_status,
> -	.s_std = tuner_s_std,
>  	.s_power = tuner_s_power,
>  };
>  
> @@ -1315,9 +1314,14 @@ static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
>  	.s_config = tuner_s_config,
>  };
>  
> +static const struct v4l2_subdev_video_ops tuner_video_ops = {
> +	.s_std = tuner_s_std,
> +};
> +
>  static const struct v4l2_subdev_ops tuner_ops = {
>  	.core = &tuner_core_ops,
>  	.tuner = &tuner_tuner_ops,
> +	.video = &tuner_video_ops,
>  };
>  
>  /*
> diff --git a/drivers/staging/media/davinci_vpfe/vpfe_video.c b/drivers/staging/media/davinci_vpfe/vpfe_video.c
> index 8c101cb..f59b9fd 100644
> --- a/drivers/staging/media/davinci_vpfe/vpfe_video.c
> +++ b/drivers/staging/media/davinci_vpfe/vpfe_video.c
> @@ -945,7 +945,7 @@ static int vpfe_s_std(struct file *file, void *priv, v4l2_std_id std_id)
>  		goto unlock_out;
>  	}
>  	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
> -					 core, s_std, std_id);
> +					 video, s_std, std_id);
>  	if (ret < 0) {
>  		v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n");
>  		video->stdid = V4L2_STD_UNKNOWN;
> diff --git a/drivers/staging/media/go7007/go7007-v4l2.c b/drivers/staging/media/go7007/go7007-v4l2.c
> index a349878..a767746 100644
> --- a/drivers/staging/media/go7007/go7007-v4l2.c
> +++ b/drivers/staging/media/go7007/go7007-v4l2.c
> @@ -665,7 +665,7 @@ static int go7007_s_std(struct go7007 *go)
>  		go->sensor_framerate = 30000;
>  	}
>  
> -	call_all(&go->v4l2_dev, core, s_std, go->std);
> +	call_all(&go->v4l2_dev, video, s_std, go->std);
>  	set_capture_size(go, NULL, 0);
>  	return 0;
>  }
> diff --git a/drivers/staging/media/go7007/s2250-board.c b/drivers/staging/media/go7007/s2250-board.c
> index 696a807..eaa2b09 100644
> --- a/drivers/staging/media/go7007/s2250-board.c
> +++ b/drivers/staging/media/go7007/s2250-board.c
> @@ -474,7 +474,6 @@ static const struct v4l2_ctrl_ops s2250_ctrl_ops = {
>  
>  static const struct v4l2_subdev_core_ops s2250_core_ops = {
>  	.log_status = s2250_log_status,
> -	.s_std = s2250_s_std,
>  };
>  
>  static const struct v4l2_subdev_audio_ops s2250_audio_ops = {
> @@ -482,6 +481,7 @@ static const struct v4l2_subdev_audio_ops s2250_audio_ops = {
>  };
>  
>  static const struct v4l2_subdev_video_ops s2250_video_ops = {
> +	.s_std = s2250_s_std,
>  	.s_routing = s2250_s_video_routing,
>  	.s_mbus_fmt = s2250_s_mbus_fmt,
>  };
> diff --git a/drivers/staging/media/go7007/saa7134-go7007.c b/drivers/staging/media/go7007/saa7134-go7007.c
> index 6e2ca33..e40f7fb 100644
> --- a/drivers/staging/media/go7007/saa7134-go7007.c
> +++ b/drivers/staging/media/go7007/saa7134-go7007.c
> @@ -434,11 +434,15 @@ static const struct v4l2_subdev_core_ops saa7134_go7007_core_ops = {
>  	.g_ctrl = saa7134_go7007_g_ctrl,
>  	.s_ctrl = saa7134_go7007_s_ctrl,
>  	.queryctrl = saa7134_go7007_queryctrl,
> +};
> +
> +static const struct v4l2_subdev_video_ops saa7134_go7007_video_ops = {
>  	.s_std = saa7134_go7007_s_std,
>  };
>  
>  static const struct v4l2_subdev_ops saa7134_go7007_sd_ops = {
>  	.core = &saa7134_go7007_core_ops,
> +	.video = &saa7134_go7007_video_ops,
>  };
>  
>  /* --------------------------------------------------------------------------*/
> diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
> index 1752530..323236e 100644
> --- a/include/media/v4l2-subdev.h
> +++ b/include/media/v4l2-subdev.h
> @@ -159,8 +159,6 @@ struct v4l2_subdev_core_ops {
>  	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 (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
> -	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
>  	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
>  #ifdef CONFIG_COMPAT
>  	long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,
> @@ -309,6 +307,8 @@ struct v4l2_mbus_frame_desc {
>  struct v4l2_subdev_video_ops {
>  	int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
>  	int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
> +	int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
> +	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
>  	int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
>  	int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
>  	int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
> @@ -684,7 +684,7 @@ void v4l2_subdev_init(struct v4l2_subdev *sd,
>  /* Call an ops of a v4l2_subdev, doing the right checks against
>     NULL pointers.
>  
> -   Example: err = v4l2_subdev_call(sd, core, s_std, norm);
> +   Example: err = v4l2_subdev_call(sd, video, s_std, norm);
>   */
>  #define v4l2_subdev_call(sd, o, f, args...)				\
>  	(!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ?	\
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lad, Prabhakar April 23, 2014, 5:39 p.m. UTC | #3
Hi Laurent,

Thanks for the patch.

On Tue, Mar 11, 2014 at 3:44 PM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> The g_std and s_std operations are video-related, move them to the video
> ops where they belong.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
[snip]
>  drivers/media/i2c/tvp514x.c                     |  2 +-
>  drivers/media/platform/davinci/vpfe_capture.c   |  2 +-
>  drivers/media/platform/davinci/vpif_capture.c   |  2 +-
>  drivers/staging/media/davinci_vpfe/vpfe_video.c |  2 +-
>  include/media/v4l2-subdev.h                     |  6 +++---
>  };
>
>
For the above: Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>

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

Patch

diff --git a/drivers/media/i2c/adv7180.c b/drivers/media/i2c/adv7180.c
index d7d99f1..10074a4 100644
--- a/drivers/media/i2c/adv7180.c
+++ b/drivers/media/i2c/adv7180.c
@@ -430,6 +430,7 @@  static int adv7180_g_mbus_config(struct v4l2_subdev *sd,
 }
 
 static const struct v4l2_subdev_video_ops adv7180_video_ops = {
+	.s_std = adv7180_s_std,
 	.querystd = adv7180_querystd,
 	.g_input_status = adv7180_g_input_status,
 	.s_routing = adv7180_s_routing,
@@ -440,12 +441,7 @@  static const struct v4l2_subdev_video_ops adv7180_video_ops = {
 	.g_mbus_config = adv7180_g_mbus_config,
 };
 
-static const struct v4l2_subdev_core_ops adv7180_core_ops = {
-	.s_std = adv7180_s_std,
-};
-
 static const struct v4l2_subdev_ops adv7180_ops = {
-	.core = &adv7180_core_ops,
 	.video = &adv7180_video_ops,
 };
 
diff --git a/drivers/media/i2c/adv7183.c b/drivers/media/i2c/adv7183.c
index d45e0e3..df461b0 100644
--- a/drivers/media/i2c/adv7183.c
+++ b/drivers/media/i2c/adv7183.c
@@ -501,8 +501,6 @@  static const struct v4l2_ctrl_ops adv7183_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops adv7183_core_ops = {
 	.log_status = adv7183_log_status,
-	.g_std = adv7183_g_std,
-	.s_std = adv7183_s_std,
 	.reset = adv7183_reset,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.g_register = adv7183_g_register,
@@ -511,6 +509,8 @@  static const struct v4l2_subdev_core_ops adv7183_core_ops = {
 };
 
 static const struct v4l2_subdev_video_ops adv7183_video_ops = {
+	.g_std = adv7183_g_std,
+	.s_std = adv7183_s_std,
 	.s_routing = adv7183_s_routing,
 	.querystd = adv7183_querystd,
 	.g_input_status = adv7183_g_input_status,
diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
index 88ce9dc..12fb675 100644
--- a/drivers/media/i2c/adv7842.c
+++ b/drivers/media/i2c/adv7842.c
@@ -2869,8 +2869,6 @@  static const struct v4l2_ctrl_ops adv7842_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops adv7842_core_ops = {
 	.log_status = adv7842_log_status,
-	.g_std = adv7842_g_std,
-	.s_std = adv7842_s_std,
 	.ioctl = adv7842_ioctl,
 	.interrupt_service_routine = adv7842_isr,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -2880,6 +2878,8 @@  static const struct v4l2_subdev_core_ops adv7842_core_ops = {
 };
 
 static const struct v4l2_subdev_video_ops adv7842_video_ops = {
+	.g_std = adv7842_g_std,
+	.s_std = adv7842_s_std,
 	.s_routing = adv7842_s_routing,
 	.querystd = adv7842_querystd,
 	.g_input_status = adv7842_g_input_status,
diff --git a/drivers/media/i2c/bt819.c b/drivers/media/i2c/bt819.c
index 369cf6f..76b334a 100644
--- a/drivers/media/i2c/bt819.c
+++ b/drivers/media/i2c/bt819.c
@@ -387,10 +387,10 @@  static const struct v4l2_subdev_core_ops bt819_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = bt819_s_std,
 };
 
 static const struct v4l2_subdev_video_ops bt819_video_ops = {
+	.s_std = bt819_s_std,
 	.s_routing = bt819_s_routing,
 	.s_stream = bt819_s_stream,
 	.querystd = bt819_querystd,
diff --git a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c
index 2e3771d..e453a3f 100644
--- a/drivers/media/i2c/cx25840/cx25840-core.c
+++ b/drivers/media/i2c/cx25840/cx25840-core.c
@@ -5041,8 +5041,6 @@  static const struct v4l2_subdev_core_ops cx25840_core_ops = {
 	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = cx25840_s_std,
-	.g_std = cx25840_g_std,
 	.reset = cx25840_reset,
 	.load_fw = cx25840_load_fw,
 	.s_io_pin_config = common_s_io_pin_config,
@@ -5067,6 +5065,8 @@  static const struct v4l2_subdev_audio_ops cx25840_audio_ops = {
 };
 
 static const struct v4l2_subdev_video_ops cx25840_video_ops = {
+	.s_std = cx25840_s_std,
+	.g_std = cx25840_g_std,
 	.s_routing = cx25840_s_video_routing,
 	.s_mbus_fmt = cx25840_s_mbus_fmt,
 	.s_stream = cx25840_s_stream,
diff --git a/drivers/media/i2c/ks0127.c b/drivers/media/i2c/ks0127.c
index c3e94ae..25b81bc 100644
--- a/drivers/media/i2c/ks0127.c
+++ b/drivers/media/i2c/ks0127.c
@@ -648,11 +648,8 @@  static int ks0127_g_input_status(struct v4l2_subdev *sd, u32 *status)
 
 /* ----------------------------------------------------------------------- */
 
-static const struct v4l2_subdev_core_ops ks0127_core_ops = {
-	.s_std = ks0127_s_std,
-};
-
 static const struct v4l2_subdev_video_ops ks0127_video_ops = {
+	.s_std = ks0127_s_std,
 	.s_routing = ks0127_s_routing,
 	.s_stream = ks0127_s_stream,
 	.querystd = ks0127_querystd,
@@ -660,7 +657,6 @@  static const struct v4l2_subdev_video_ops ks0127_video_ops = {
 };
 
 static const struct v4l2_subdev_ops ks0127_ops = {
-	.core = &ks0127_core_ops,
 	.video = &ks0127_video_ops,
 };
 
diff --git a/drivers/media/i2c/ml86v7667.c b/drivers/media/i2c/ml86v7667.c
index a9110d8..2cace73 100644
--- a/drivers/media/i2c/ml86v7667.c
+++ b/drivers/media/i2c/ml86v7667.c
@@ -276,6 +276,7 @@  static const struct v4l2_ctrl_ops ml86v7667_ctrl_ops = {
 };
 
 static struct v4l2_subdev_video_ops ml86v7667_subdev_video_ops = {
+	.s_std = ml86v7667_s_std,
 	.querystd = ml86v7667_querystd,
 	.g_input_status = ml86v7667_g_input_status,
 	.enum_mbus_fmt = ml86v7667_enum_mbus_fmt,
@@ -286,7 +287,6 @@  static struct v4l2_subdev_video_ops ml86v7667_subdev_video_ops = {
 };
 
 static struct v4l2_subdev_core_ops ml86v7667_subdev_core_ops = {
-	.s_std = ml86v7667_s_std,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.g_register = ml86v7667_g_register,
 	.s_register = ml86v7667_s_register,
diff --git a/drivers/media/i2c/msp3400-driver.c b/drivers/media/i2c/msp3400-driver.c
index 8190fec..4d9c6bc 100644
--- a/drivers/media/i2c/msp3400-driver.c
+++ b/drivers/media/i2c/msp3400-driver.c
@@ -649,10 +649,10 @@  static const struct v4l2_subdev_core_ops msp_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = msp_s_std,
 };
 
 static const struct v4l2_subdev_video_ops msp_video_ops = {
+	.s_std = msp_s_std,
 	.querystd = msp_querystd,
 };
 
diff --git a/drivers/media/i2c/saa6752hs.c b/drivers/media/i2c/saa6752hs.c
index 8272c0b..04e9e55 100644
--- a/drivers/media/i2c/saa6752hs.c
+++ b/drivers/media/i2c/saa6752hs.c
@@ -643,10 +643,10 @@  static const struct v4l2_ctrl_ops saa6752hs_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops saa6752hs_core_ops = {
 	.init = saa6752hs_init,
-	.s_std = saa6752hs_s_std,
 };
 
 static const struct v4l2_subdev_video_ops saa6752hs_video_ops = {
+	.s_std = saa6752hs_s_std,
 	.s_mbus_fmt = saa6752hs_s_mbus_fmt,
 	.try_mbus_fmt = saa6752hs_try_mbus_fmt,
 	.g_mbus_fmt = saa6752hs_g_mbus_fmt,
diff --git a/drivers/media/i2c/saa7110.c b/drivers/media/i2c/saa7110.c
index ac43e92..99689ee 100644
--- a/drivers/media/i2c/saa7110.c
+++ b/drivers/media/i2c/saa7110.c
@@ -365,10 +365,10 @@  static const struct v4l2_subdev_core_ops saa7110_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = saa7110_s_std,
 };
 
 static const struct v4l2_subdev_video_ops saa7110_video_ops = {
+	.s_std = saa7110_s_std,
 	.s_routing = saa7110_s_routing,
 	.s_stream = saa7110_s_stream,
 	.querystd = saa7110_querystd,
diff --git a/drivers/media/i2c/saa7115.c b/drivers/media/i2c/saa7115.c
index afdbcb0..35a4464 100644
--- a/drivers/media/i2c/saa7115.c
+++ b/drivers/media/i2c/saa7115.c
@@ -1582,7 +1582,6 @@  static const struct v4l2_subdev_core_ops saa711x_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = saa711x_s_std,
 	.reset = saa711x_reset,
 	.s_gpio = saa711x_s_gpio,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1601,6 +1600,7 @@  static const struct v4l2_subdev_audio_ops saa711x_audio_ops = {
 };
 
 static const struct v4l2_subdev_video_ops saa711x_video_ops = {
+	.s_std = saa711x_s_std,
 	.s_routing = saa711x_s_routing,
 	.s_crystal_freq = saa711x_s_crystal_freq,
 	.s_mbus_fmt = saa711x_s_mbus_fmt,
diff --git a/drivers/media/i2c/saa717x.c b/drivers/media/i2c/saa717x.c
index 401ca11..6922a9f 100644
--- a/drivers/media/i2c/saa717x.c
+++ b/drivers/media/i2c/saa717x.c
@@ -1198,7 +1198,6 @@  static const struct v4l2_subdev_core_ops saa717x_core_ops = {
 	.g_register = saa717x_g_register,
 	.s_register = saa717x_s_register,
 #endif
-	.s_std = saa717x_s_std,
 	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
 	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
 	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
@@ -1216,6 +1215,7 @@  static const struct v4l2_subdev_tuner_ops saa717x_tuner_ops = {
 };
 
 static const struct v4l2_subdev_video_ops saa717x_video_ops = {
+	.s_std = saa717x_s_std,
 	.s_routing = saa717x_s_video_routing,
 	.s_mbus_fmt = saa717x_s_mbus_fmt,
 	.s_stream = saa717x_s_stream,
diff --git a/drivers/media/i2c/saa7191.c b/drivers/media/i2c/saa7191.c
index 606a4ba..8e96992 100644
--- a/drivers/media/i2c/saa7191.c
+++ b/drivers/media/i2c/saa7191.c
@@ -573,10 +573,10 @@  static int saa7191_g_input_status(struct v4l2_subdev *sd, u32 *status)
 static const struct v4l2_subdev_core_ops saa7191_core_ops = {
 	.g_ctrl = saa7191_g_ctrl,
 	.s_ctrl = saa7191_s_ctrl,
-	.s_std = saa7191_s_std,
 };
 
 static const struct v4l2_subdev_video_ops saa7191_video_ops = {
+	.s_std = saa7191_s_std,
 	.s_routing = saa7191_s_routing,
 	.querystd = saa7191_querystd,
 	.g_input_status = saa7191_g_input_status,
diff --git a/drivers/media/i2c/soc_camera/tw9910.c b/drivers/media/i2c/soc_camera/tw9910.c
index ab54628..059478a 100644
--- a/drivers/media/i2c/soc_camera/tw9910.c
+++ b/drivers/media/i2c/soc_camera/tw9910.c
@@ -814,8 +814,6 @@  done:
 }
 
 static struct v4l2_subdev_core_ops tw9910_subdev_core_ops = {
-	.s_std		= tw9910_s_std,
-	.g_std		= tw9910_g_std,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.g_register	= tw9910_g_register,
 	.s_register	= tw9910_s_register,
@@ -873,6 +871,8 @@  static int tw9910_s_mbus_config(struct v4l2_subdev *sd,
 }
 
 static struct v4l2_subdev_video_ops tw9910_subdev_video_ops = {
+	.s_std		= tw9910_s_std,
+	.g_std		= tw9910_g_std,
 	.s_stream	= tw9910_s_stream,
 	.g_mbus_fmt	= tw9910_g_fmt,
 	.s_mbus_fmt	= tw9910_s_fmt,
diff --git a/drivers/media/i2c/sony-btf-mpx.c b/drivers/media/i2c/sony-btf-mpx.c
index 32d8232..1da8004 100644
--- a/drivers/media/i2c/sony-btf-mpx.c
+++ b/drivers/media/i2c/sony-btf-mpx.c
@@ -327,18 +327,18 @@  static int sony_btf_mpx_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner
 
 /* --------------------------------------------------------------------------*/
 
-static const struct v4l2_subdev_core_ops sony_btf_mpx_core_ops = {
-	.s_std = sony_btf_mpx_s_std,
-};
-
 static const struct v4l2_subdev_tuner_ops sony_btf_mpx_tuner_ops = {
 	.s_tuner = sony_btf_mpx_s_tuner,
 	.g_tuner = sony_btf_mpx_g_tuner,
 };
 
+static const struct v4l2_subdev_video_ops sony_btf_mpx_video_ops = {
+	.s_std = sony_btf_mpx_s_std,
+};
+
 static const struct v4l2_subdev_ops sony_btf_mpx_ops = {
-	.core = &sony_btf_mpx_core_ops,
 	.tuner = &sony_btf_mpx_tuner_ops,
+	.video = &sony_btf_mpx_video_ops,
 };
 
 /* --------------------------------------------------------------------------*/
diff --git a/drivers/media/i2c/tvaudio.c b/drivers/media/i2c/tvaudio.c
index d76c53a8..070c152 100644
--- a/drivers/media/i2c/tvaudio.c
+++ b/drivers/media/i2c/tvaudio.c
@@ -1862,7 +1862,6 @@  static const struct v4l2_subdev_core_ops tvaudio_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = tvaudio_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops tvaudio_tuner_ops = {
@@ -1876,10 +1875,15 @@  static const struct v4l2_subdev_audio_ops tvaudio_audio_ops = {
 	.s_routing = tvaudio_s_routing,
 };
 
+static const struct v4l2_subdev_video_ops tvaudio_video_ops = {
+	.s_std = tvaudio_s_std,
+};
+
 static const struct v4l2_subdev_ops tvaudio_ops = {
 	.core = &tvaudio_core_ops,
 	.tuner = &tvaudio_tuner_ops,
 	.audio = &tvaudio_audio_ops,
+	.video = &tvaudio_video_ops,
 };
 
 /* ----------------------------------------------------------------------- */
diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
index 83d85df..d163a95 100644
--- a/drivers/media/i2c/tvp514x.c
+++ b/drivers/media/i2c/tvp514x.c
@@ -1009,10 +1009,10 @@  static const struct v4l2_subdev_core_ops tvp514x_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = tvp514x_s_std,
 };
 
 static const struct v4l2_subdev_video_ops tvp514x_video_ops = {
+	.s_std = tvp514x_s_std,
 	.s_routing = tvp514x_s_routing,
 	.querystd = tvp514x_querystd,
 	.enum_mbus_fmt = tvp514x_enum_mbus_fmt,
diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
index 542d252..5ee0f40 100644
--- a/drivers/media/i2c/tvp5150.c
+++ b/drivers/media/i2c/tvp5150.c
@@ -1063,7 +1063,6 @@  static const struct v4l2_ctrl_ops tvp5150_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops tvp5150_core_ops = {
 	.log_status = tvp5150_log_status,
-	.s_std = tvp5150_s_std,
 	.reset = tvp5150_reset,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.g_register = tvp5150_g_register,
@@ -1076,6 +1075,7 @@  static const struct v4l2_subdev_tuner_ops tvp5150_tuner_ops = {
 };
 
 static const struct v4l2_subdev_video_ops tvp5150_video_ops = {
+	.s_std = tvp5150_s_std,
 	.s_routing = tvp5150_s_routing,
 	.enum_mbus_fmt = tvp5150_enum_mbus_fmt,
 	.s_mbus_fmt = tvp5150_mbus_fmt,
diff --git a/drivers/media/i2c/tw2804.c b/drivers/media/i2c/tw2804.c
index f58607d..7347480 100644
--- a/drivers/media/i2c/tw2804.c
+++ b/drivers/media/i2c/tw2804.c
@@ -342,12 +342,12 @@  static const struct v4l2_ctrl_ops tw2804_ctrl_ops = {
 };
 
 static const struct v4l2_subdev_video_ops tw2804_video_ops = {
+	.s_std = tw2804_s_std,
 	.s_routing = tw2804_s_video_routing,
 };
 
 static const struct v4l2_subdev_core_ops tw2804_core_ops = {
 	.log_status = tw2804_log_status,
-	.s_std = tw2804_s_std,
 };
 
 static const struct v4l2_subdev_ops tw2804_ops = {
diff --git a/drivers/media/i2c/tw9903.c b/drivers/media/i2c/tw9903.c
index 285b759..12c7d21 100644
--- a/drivers/media/i2c/tw9903.c
+++ b/drivers/media/i2c/tw9903.c
@@ -187,10 +187,10 @@  static const struct v4l2_ctrl_ops tw9903_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops tw9903_core_ops = {
 	.log_status = tw9903_log_status,
-	.s_std = tw9903_s_std,
 };
 
 static const struct v4l2_subdev_video_ops tw9903_video_ops = {
+	.s_std = tw9903_s_std,
 	.s_routing = tw9903_s_video_routing,
 };
 
diff --git a/drivers/media/i2c/tw9906.c b/drivers/media/i2c/tw9906.c
index f6bef25..2672d89 100644
--- a/drivers/media/i2c/tw9906.c
+++ b/drivers/media/i2c/tw9906.c
@@ -157,10 +157,10 @@  static const struct v4l2_ctrl_ops tw9906_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops tw9906_core_ops = {
 	.log_status = tw9906_log_status,
-	.s_std = tw9906_s_std,
 };
 
 static const struct v4l2_subdev_video_ops tw9906_video_ops = {
+	.s_std = tw9906_s_std,
 	.s_routing = tw9906_s_video_routing,
 };
 
diff --git a/drivers/media/i2c/vp27smpx.c b/drivers/media/i2c/vp27smpx.c
index 6a3a3ff..819ab6d 100644
--- a/drivers/media/i2c/vp27smpx.c
+++ b/drivers/media/i2c/vp27smpx.c
@@ -124,7 +124,6 @@  static int vp27smpx_log_status(struct v4l2_subdev *sd)
 
 static const struct v4l2_subdev_core_ops vp27smpx_core_ops = {
 	.log_status = vp27smpx_log_status,
-	.s_std = vp27smpx_s_std,
 };
 
 static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = {
@@ -133,9 +132,14 @@  static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = {
 	.g_tuner = vp27smpx_g_tuner,
 };
 
+static const struct v4l2_subdev_video_ops vp27smpx_video_ops = {
+	.s_std = vp27smpx_s_std,
+};
+
 static const struct v4l2_subdev_ops vp27smpx_ops = {
 	.core = &vp27smpx_core_ops,
 	.tuner = &vp27smpx_tuner_ops,
+	.video = &vp27smpx_video_ops,
 };
 
 /* ----------------------------------------------------------------------- */
diff --git a/drivers/media/i2c/vpx3220.c b/drivers/media/i2c/vpx3220.c
index ece90df..016e766 100644
--- a/drivers/media/i2c/vpx3220.c
+++ b/drivers/media/i2c/vpx3220.c
@@ -457,10 +457,10 @@  static const struct v4l2_subdev_core_ops vpx3220_core_ops = {
 	.s_ctrl = v4l2_subdev_s_ctrl,
 	.queryctrl = v4l2_subdev_queryctrl,
 	.querymenu = v4l2_subdev_querymenu,
-	.s_std = vpx3220_s_std,
 };
 
 static const struct v4l2_subdev_video_ops vpx3220_video_ops = {
+	.s_std = vpx3220_s_std,
 	.s_routing = vpx3220_s_routing,
 	.s_stream = vpx3220_s_stream,
 	.querystd = vpx3220_querystd,
diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
index afcd53b..da780f4 100644
--- a/drivers/media/pci/bt8xx/bttv-driver.c
+++ b/drivers/media/pci/bt8xx/bttv-driver.c
@@ -1182,7 +1182,7 @@  set_tvnorm(struct bttv *btv, unsigned int norm)
 		break;
 	}
 	id = tvnorm->v4l2_id;
-	bttv_call_all(btv, core, s_std, id);
+	bttv_call_all(btv, video, s_std, id);
 
 	return 0;
 }
diff --git a/drivers/media/pci/cx18/cx18-av-core.c b/drivers/media/pci/cx18/cx18-av-core.c
index c4890a4..2d3afe0 100644
--- a/drivers/media/pci/cx18/cx18-av-core.c
+++ b/drivers/media/pci/cx18/cx18-av-core.c
@@ -1263,7 +1263,6 @@  static const struct v4l2_subdev_core_ops cx18_av_general_ops = {
 	.log_status = cx18_av_log_status,
 	.load_fw = cx18_av_load_fw,
 	.reset = cx18_av_reset,
-	.s_std = cx18_av_s_std,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.g_register = cx18_av_g_register,
 	.s_register = cx18_av_s_register,
@@ -1283,6 +1282,7 @@  static const struct v4l2_subdev_audio_ops cx18_av_audio_ops = {
 };
 
 static const struct v4l2_subdev_video_ops cx18_av_video_ops = {
+	.s_std = cx18_av_s_std,
 	.s_routing = cx18_av_s_video_routing,
 	.s_stream = cx18_av_s_stream,
 	.s_mbus_fmt = cx18_av_s_mbus_fmt,
diff --git a/drivers/media/pci/cx18/cx18-fileops.c b/drivers/media/pci/cx18/cx18-fileops.c
index 4bfd865..76a3b4a 100644
--- a/drivers/media/pci/cx18/cx18-fileops.c
+++ b/drivers/media/pci/cx18/cx18-fileops.c
@@ -760,7 +760,7 @@  int cx18_v4l2_close(struct file *filp)
 		/* 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, core, s_std, cx->std);
+		cx18_call_all(cx, video, 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/pci/cx18/cx18-gpio.c b/drivers/media/pci/cx18/cx18-gpio.c
index 5374aeb..38dc6b8 100644
--- a/drivers/media/pci/cx18/cx18-gpio.c
+++ b/drivers/media/pci/cx18/cx18-gpio.c
@@ -180,7 +180,6 @@  static int gpiomux_s_audio_routing(struct v4l2_subdev *sd,
 
 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 = {
@@ -191,10 +190,15 @@  static const struct v4l2_subdev_audio_ops gpiomux_audio_ops = {
 	.s_routing = gpiomux_s_audio_routing,
 };
 
+static const struct v4l2_subdev_video_ops gpiomux_video_ops = {
+	.s_std = gpiomux_s_std,
+};
+
 static const struct v4l2_subdev_ops gpiomux_ops = {
 	.core = &gpiomux_core_ops,
 	.tuner = &gpiomux_tuner_ops,
 	.audio = &gpiomux_audio_ops,
+	.video = &gpiomux_video_ops,
 };
 
 /*
diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c
index 1110bcb..fefb2cd 100644
--- a/drivers/media/pci/cx18/cx18-ioctl.c
+++ b/drivers/media/pci/cx18/cx18-ioctl.c
@@ -602,7 +602,7 @@  int cx18_s_std(struct file *file, void *fh, v4l2_std_id std)
 			(unsigned long long) cx->std);
 
 	/* Tuner */
-	cx18_call_all(cx, core, s_std, cx->std);
+	cx18_call_all(cx, video, s_std, cx->std);
 	return 0;
 }
 
diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c
index 7891f34..e0a5952 100644
--- a/drivers/media/pci/cx23885/cx23885-video.c
+++ b/drivers/media/pci/cx23885/cx23885-video.c
@@ -326,7 +326,7 @@  int cx23885_set_tvnorm(struct cx23885_dev *dev, v4l2_std_id norm)
 
 	dev->tvnorm = norm;
 
-	call_all(dev, core, s_std, norm);
+	call_all(dev, video, s_std, norm);
 
 	return 0;
 }
@@ -1589,7 +1589,7 @@  static int cx23885_set_freq_via_ops(struct cx23885_dev *dev,
 		fe = &dev->ts1.analog_fe;
 
 	if (fe && fe->ops.tuner_ops.set_analog_params) {
-		call_all(dev, core, s_std, dev->tvnorm);
+		call_all(dev, video, s_std, dev->tvnorm);
 		fe->ops.tuner_ops.set_analog_params(fe, &params);
 	}
 	else
diff --git a/drivers/media/pci/cx88/cx88-core.c b/drivers/media/pci/cx88/cx88-core.c
index ad59dc9..e061c88 100644
--- a/drivers/media/pci/cx88/cx88-core.c
+++ b/drivers/media/pci/cx88/cx88-core.c
@@ -1012,7 +1012,7 @@  int cx88_set_tvnorm(struct cx88_core *core, v4l2_std_id norm)
 	set_tvaudio(core);
 
 	// tell i2c chips
-	call_all(core, core, s_std, norm);
+	call_all(core, video, s_std, norm);
 
 	/* The chroma_agc control should be inaccessible if the video format is SECAM */
 	v4l2_ctrl_grab(core->chroma_agc, cxiformat == VideoFormatSECAM);
diff --git a/drivers/media/pci/ivtv/ivtv-fileops.c b/drivers/media/pci/ivtv/ivtv-fileops.c
index 9caffd8..e5ff627 100644
--- a/drivers/media/pci/ivtv/ivtv-fileops.c
+++ b/drivers/media/pci/ivtv/ivtv-fileops.c
@@ -894,7 +894,7 @@  int ivtv_v4l2_close(struct file *filp)
 		/* 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, core, s_std, itv->std);
+		ivtv_call_all(itv, video, 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/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c
index 807b275..b3667a0 100644
--- a/drivers/media/pci/ivtv/ivtv-ioctl.c
+++ b/drivers/media/pci/ivtv/ivtv-ioctl.c
@@ -1090,7 +1090,7 @@  void ivtv_s_std_enc(struct ivtv *itv, v4l2_std_id std)
 		itv->vbi.sliced_decoder_line_size = itv->is_60hz ? 272 : 284;
 
 	/* Tuner */
-	ivtv_call_all(itv, core, s_std, itv->std);
+	ivtv_call_all(itv, video, s_std, itv->std);
 }
 
 void ivtv_s_std_dec(struct ivtv *itv, v4l2_std_id std)
diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c
index eb472b5..26082b4 100644
--- a/drivers/media/pci/saa7134/saa7134-video.c
+++ b/drivers/media/pci/saa7134/saa7134-video.c
@@ -506,10 +506,10 @@  void saa7134_set_tvnorm_hw(struct saa7134_dev *dev)
 	saa7134_set_decoder(dev);
 
 	if (card_in(dev, dev->ctl_input).tv)
-		saa_call_all(dev, core, s_std, dev->tvnorm->id);
+		saa_call_all(dev, video, 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, core, s_std, dev->tvnorm->id);
+	saa_call_empress(dev, video, s_std, dev->tvnorm->id);
 }
 
 static void set_h_prescale(struct saa7134_dev *dev, int task, int prescale)
diff --git a/drivers/media/pci/saa7146/mxb.c b/drivers/media/pci/saa7146/mxb.c
index 33abe33..c4c8fce 100644
--- a/drivers/media/pci/saa7146/mxb.c
+++ b/drivers/media/pci/saa7146/mxb.c
@@ -357,7 +357,7 @@  static int mxb_init_done(struct saa7146_dev* dev)
 	tea6420_route(mxb, 6);
 
 	/* select video mode in saa7111a */
-	saa7111a_call(mxb, core, s_std, std);
+	saa7111a_call(mxb, video, s_std, std);
 
 	/* select tuner-output on saa7111a */
 	i = 0;
@@ -379,8 +379,8 @@  static int mxb_init_done(struct saa7146_dev* dev)
 	/* These two gpio calls set the GPIO pins that control the tda9820 */
 	saa7146_write(dev, GPIO_CTRL, 0x00404050);
 	saa7111a_call(mxb, core, s_gpio, 1);
-	saa7111a_call(mxb, core, s_std, std);
-	tuner_call(mxb, core, s_std, std);
+	saa7111a_call(mxb, video, s_std, std);
+	tuner_call(mxb, video, s_std, std);
 
 	/* switch to tuner-channel on tea6415c */
 	tea6415c_call(mxb, video, s_routing, 3, 17, 0);
@@ -771,9 +771,9 @@  static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *standa
 		/* These two gpio calls set the GPIO pins that control the tda9820 */
 		saa7146_write(dev, GPIO_CTRL, 0x00404050);
 		saa7111a_call(mxb, core, s_gpio, 0);
-		saa7111a_call(mxb, core, s_std, std);
+		saa7111a_call(mxb, video, s_std, std);
 		if (mxb->cur_input == 0)
-			tuner_call(mxb, core, s_std, std);
+			tuner_call(mxb, video, s_std, std);
 	} else {
 		v4l2_std_id std = V4L2_STD_PAL_BG;
 
@@ -783,9 +783,9 @@  static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *standa
 		/* These two gpio calls set the GPIO pins that control the tda9820 */
 		saa7146_write(dev, GPIO_CTRL, 0x00404050);
 		saa7111a_call(mxb, core, s_gpio, 1);
-		saa7111a_call(mxb, core, s_std, std);
+		saa7111a_call(mxb, video, s_std, std);
 		if (mxb->cur_input == 0)
-			tuner_call(mxb, core, s_std, std);
+			tuner_call(mxb, video, s_std, std);
 	}
 	return 0;
 }
diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c
index bb11443..12485a9 100644
--- a/drivers/media/pci/sta2x11/sta2x11_vip.c
+++ b/drivers/media/pci/sta2x11/sta2x11_vip.c
@@ -445,7 +445,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id std)
 	int status;
 
 	if (V4L2_STD_ALL == std) {
-		v4l2_subdev_call(vip->decoder, core, s_std, std);
+		v4l2_subdev_call(vip->decoder, video, s_std, std);
 		ssleep(2);
 		v4l2_subdev_call(vip->decoder, video, querystd, &newstd);
 		v4l2_subdev_call(vip->decoder, video, g_input_status, &status);
@@ -468,7 +468,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id std)
 			vip->format = formats_50[0];
 	}
 
-	return v4l2_subdev_call(vip->decoder, core, s_std, std);
+	return v4l2_subdev_call(vip->decoder, video, s_std, std);
 }
 
 /**
diff --git a/drivers/media/pci/zoran/zoran_device.c b/drivers/media/pci/zoran/zoran_device.c
index 519164c..bf34b93 100644
--- a/drivers/media/pci/zoran/zoran_device.c
+++ b/drivers/media/pci/zoran/zoran_device.c
@@ -1572,7 +1572,7 @@  zoran_init_hardware (struct zoran *zr)
 	}
 
 	decoder_call(zr, core, init, 0);
-	decoder_call(zr, core, s_std, zr->norm);
+	decoder_call(zr, video, s_std, zr->norm);
 	decoder_call(zr, video, s_routing,
 		zr->card.input[zr->input].muxsel, 0, 0);
 
diff --git a/drivers/media/pci/zoran/zoran_driver.c b/drivers/media/pci/zoran/zoran_driver.c
index e7e9840..099d5fb 100644
--- a/drivers/media/pci/zoran/zoran_driver.c
+++ b/drivers/media/pci/zoran/zoran_driver.c
@@ -1469,7 +1469,7 @@  zoran_set_norm (struct zoran *zr,
 	if (on)
 		zr36057_overlay(zr, 0);
 
-	decoder_call(zr, core, s_std, norm);
+	decoder_call(zr, video, s_std, norm);
 	encoder_call(zr, video, s_std_output, norm);
 
 	if (on)
diff --git a/drivers/media/platform/blackfin/bfin_capture.c b/drivers/media/platform/blackfin/bfin_capture.c
index 200bec9..852c05b 100644
--- a/drivers/media/platform/blackfin/bfin_capture.c
+++ b/drivers/media/platform/blackfin/bfin_capture.c
@@ -635,7 +635,7 @@  static int bcap_s_std(struct file *file, void *priv, v4l2_std_id std)
 	if (vb2_is_busy(&bcap_dev->buffer_queue))
 		return -EBUSY;
 
-	ret = v4l2_subdev_call(bcap_dev->sd, core, s_std, std);
+	ret = v4l2_subdev_call(bcap_dev->sd, video, s_std, std);
 	if (ret < 0)
 		return ret;
 
@@ -1069,7 +1069,7 @@  static int bcap_probe(struct platform_device *pdev)
 	/* now we can probe the default state */
 	if (config->inputs[0].capabilities & V4L2_IN_CAP_STD) {
 		v4l2_std_id std;
-		ret = v4l2_subdev_call(bcap_dev->sd, core, g_std, &std);
+		ret = v4l2_subdev_call(bcap_dev->sd, video, g_std, &std);
 		if (ret) {
 			v4l2_err(&bcap_dev->v4l2_dev,
 					"Unable to get std\n");
diff --git a/drivers/media/platform/davinci/vpfe_capture.c b/drivers/media/platform/davinci/vpfe_capture.c
index d762246..0ebbdf1 100644
--- a/drivers/media/platform/davinci/vpfe_capture.c
+++ b/drivers/media/platform/davinci/vpfe_capture.c
@@ -1215,7 +1215,7 @@  static int vpfe_s_std(struct file *file, void *priv, v4l2_std_id std_id)
 	}
 
 	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
-					 core, s_std, std_id);
+					 video, s_std, std_id);
 	if (ret < 0) {
 		v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n");
 		goto unlock_out;
diff --git a/drivers/media/platform/davinci/vpif_capture.c b/drivers/media/platform/davinci/vpif_capture.c
index 756da78..ff6e9e0 100644
--- a/drivers/media/platform/davinci/vpif_capture.c
+++ b/drivers/media/platform/davinci/vpif_capture.c
@@ -1420,7 +1420,7 @@  static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
 	vpif_config_format(ch);
 
 	/* set standard in the sub device */
-	ret = v4l2_subdev_call(ch->sd, core, s_std, std_id);
+	ret = v4l2_subdev_call(ch->sd, video, s_std, std_id);
 	if (ret && ret != -ENOIOCTLCMD && ret != -ENODEV) {
 		vpif_dbg(1, debug, "Failed to set standard for sub devices\n");
 		return ret;
diff --git a/drivers/media/platform/davinci/vpif_display.c b/drivers/media/platform/davinci/vpif_display.c
index 0ac841e..37c5d48 100644
--- a/drivers/media/platform/davinci/vpif_display.c
+++ b/drivers/media/platform/davinci/vpif_display.c
@@ -1076,7 +1076,7 @@  static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
 		return ret;
 	}
 
-	ret = v4l2_device_call_until_err(&vpif_obj.v4l2_dev, 1, core,
+	ret = v4l2_device_call_until_err(&vpif_obj.v4l2_dev, 1, video,
 							s_std, std_id);
 	if (ret < 0)
 		vpif_err("Failed to set standard for sub devices\n");
diff --git a/drivers/media/platform/fsl-viu.c b/drivers/media/platform/fsl-viu.c
index dbf0ce3..d5dc198 100644
--- a/drivers/media/platform/fsl-viu.c
+++ b/drivers/media/platform/fsl-viu.c
@@ -964,7 +964,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
 	struct viu_fh *fh = priv;
 
 	fh->dev->std = id;
-	decoder_call(fh->dev, core, s_std, id);
+	decoder_call(fh->dev, video, s_std, id);
 	return 0;
 }
 
diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c
index 4b8c024..79bfbc6 100644
--- a/drivers/media/platform/soc_camera/soc_camera.c
+++ b/drivers/media/platform/soc_camera/soc_camera.c
@@ -314,7 +314,7 @@  static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id a)
 	struct soc_camera_device *icd = file->private_data;
 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
 
-	return v4l2_subdev_call(sd, core, s_std, a);
+	return v4l2_subdev_call(sd, video, s_std, a);
 }
 
 static int soc_camera_g_std(struct file *file, void *priv, v4l2_std_id *a)
@@ -322,7 +322,7 @@  static int soc_camera_g_std(struct file *file, void *priv, v4l2_std_id *a)
 	struct soc_camera_device *icd = file->private_data;
 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
 
-	return v4l2_subdev_call(sd, core, g_std, a);
+	return v4l2_subdev_call(sd, video, g_std, a);
 }
 
 static int soc_camera_enum_framesizes(struct file *file, void *fh,
diff --git a/drivers/media/platform/timblogiw.c b/drivers/media/platform/timblogiw.c
index ccdadd6..cc34eae 100644
--- a/drivers/media/platform/timblogiw.c
+++ b/drivers/media/platform/timblogiw.c
@@ -347,7 +347,7 @@  static int timblogiw_s_std(struct file *file, void  *priv, v4l2_std_id std)
 	mutex_lock(&lw->lock);
 
 	if (TIMBLOGIW_HAS_DECODER(lw))
-		err = v4l2_subdev_call(lw->sd_enc, core, s_std, std);
+		err = v4l2_subdev_call(lw->sd_enc, video, s_std, std);
 
 	if (!err)
 		fh->cur_norm = timblogiw_get_norm(std);
diff --git a/drivers/media/platform/vino.c b/drivers/media/platform/vino.c
index c6af974..470d353 100644
--- a/drivers/media/platform/vino.c
+++ b/drivers/media/platform/vino.c
@@ -2586,7 +2586,7 @@  static int vino_acquire_input(struct vino_channel_settings *vcs)
 			}
 			if (data_norm == 3)
 				data_norm = VINO_DATA_NORM_PAL;
-			ret = decoder_call(core, s_std, norm);
+			ret = decoder_call(video, s_std, norm);
 		}
 
 		spin_lock_irqsave(&vino_drvdata->input_lock, flags);
@@ -2675,7 +2675,7 @@  static int vino_set_input(struct vino_channel_settings *vcs, int input)
 				}
 				if (data_norm == 3)
 					data_norm = VINO_DATA_NORM_PAL;
-				ret = decoder_call(core, s_std, norm);
+				ret = decoder_call(video, s_std, norm);
 			}
 
 			spin_lock_irqsave(&vino_drvdata->input_lock, flags);
@@ -2809,7 +2809,7 @@  static int vino_set_data_norm(struct vino_channel_settings *vcs,
 		 * as it may take a while... */
 
 		norm = vino_data_norms[data_norm].std;
-		err = decoder_call(core, s_std, norm);
+		err = decoder_call(video, s_std, norm);
 
 		spin_lock_irqsave(&vino_drvdata->input_lock, *flags);
 
diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c
index f615454..9038194 100644
--- a/drivers/media/usb/au0828/au0828-video.c
+++ b/drivers/media/usb/au0828/au0828-video.c
@@ -1109,7 +1109,7 @@  static void au0828_init_tuner(struct au0828_dev *dev)
 	/* If we've never sent the standard in tuner core, do so now.
 	   We don't do this at device probe because we don't want to
 	   incur the cost of a firmware load */
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->std);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->std);
 	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f);
 	i2c_gate_ctrl(dev, 0);
 }
@@ -1368,7 +1368,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
 	   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, core, s_std, norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm);
 
 	i2c_gate_ctrl(dev, 0);
 
diff --git a/drivers/media/usb/cx231xx/cx231xx-417.c b/drivers/media/usb/cx231xx/cx231xx-417.c
index 2f63029..30a0c69 100644
--- a/drivers/media/usb/cx231xx/cx231xx-417.c
+++ b/drivers/media/usb/cx231xx/cx231xx-417.c
@@ -1516,7 +1516,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
 		dev->ts1.height = 576;
 		cx2341x_handler_set_50hz(&dev->mpeg_ctrl_handler, true);
 	}
-	call_all(dev, core, s_std, dev->norm);
+	call_all(dev, video, s_std, dev->norm);
 	/* do mode control overrides */
 	cx231xx_do_mode_ctrl_overrides(dev);
 
diff --git a/drivers/media/usb/cx231xx/cx231xx-video.c b/drivers/media/usb/cx231xx/cx231xx-video.c
index 9906261..1f87513 100644
--- a/drivers/media/usb/cx231xx/cx231xx-video.c
+++ b/drivers/media/usb/cx231xx/cx231xx-video.c
@@ -1009,7 +1009,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
 	dev->width = 720;
 	dev->height = (dev->norm & V4L2_STD_625_50) ? 576 : 480;
 
-	call_all(dev, core, s_std, dev->norm);
+	call_all(dev, video, s_std, dev->norm);
 
 	/* We need to reset basic properties in the decoder related to
 	   resolution (since a standard change effects things like the number
@@ -1108,7 +1108,7 @@  int cx231xx_s_input(struct file *file, void *priv, unsigned int i)
 		/* There's a tuner, so reset the standard and put it on the
 		   last known frequency (since it was probably powered down
 		   until now */
-		call_all(dev, core, s_std, dev->norm);
+		call_all(dev, video, s_std, dev->norm);
 	}
 
 	return 0;
@@ -2099,7 +2099,7 @@  int cx231xx_register_analog_devices(struct cx231xx *dev)
 	/* Set the initial input */
 	video_mux(dev, dev->video_input);
 
-	call_all(dev, core, s_std, dev->norm);
+	call_all(dev, video, s_std, dev->norm);
 
 	v4l2_ctrl_handler_init(&dev->ctrl_handler, 10);
 	v4l2_ctrl_handler_init(&dev->radio_ctrl_handler, 5);
diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 0856e5d..b7c1abf 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1351,7 +1351,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
 	size_to_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
 
 	em28xx_resolution_set(dev);
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
 
 	return 0;
 }
@@ -2349,7 +2349,7 @@  static int em28xx_v4l2_init(struct em28xx *dev)
 
 	/* set default norm */
 	dev->norm = V4L2_STD_PAL;
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
 	dev->interlaced = EM28XX_INTERLACED_DEFAULT;
 
 	/* Analog specific initialization */
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
index ea05f67..9623b62 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
@@ -2910,7 +2910,7 @@  static void pvr2_subdev_update(struct pvr2_hdw *hdw)
 			v4l2_std_id vs;
 			vs = hdw->std_mask_cur;
 			v4l2_device_call_all(&hdw->v4l2_dev, 0,
-					     core, s_std, vs);
+					     video, s_std, vs);
 			pvr2_hdw_cx25840_vbi_hack(hdw);
 		}
 		hdw->tuner_signal_stale = !0;
diff --git a/drivers/media/usb/stk1160/stk1160-v4l.c b/drivers/media/usb/stk1160/stk1160-v4l.c
index 37bc00f..759e4b0 100644
--- a/drivers/media/usb/stk1160/stk1160-v4l.c
+++ b/drivers/media/usb/stk1160/stk1160-v4l.c
@@ -406,7 +406,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
 
 	stk1160_set_std(dev);
 
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std,
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std,
 			dev->norm);
 
 	return 0;
@@ -682,7 +682,7 @@  int stk1160_video_register(struct stk1160 *dev)
 	dev->fmt = &format[0];
 	stk1160_set_std(dev);
 
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std,
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std,
 			dev->norm);
 
 	video_set_drvdata(&dev->vdev, dev);
diff --git a/drivers/media/usb/tm6000/tm6000-cards.c b/drivers/media/usb/tm6000/tm6000-cards.c
index 1ccaadd..2e8c3af 100644
--- a/drivers/media/usb/tm6000/tm6000-cards.c
+++ b/drivers/media/usb/tm6000/tm6000-cards.c
@@ -1120,7 +1120,7 @@  static int tm6000_init_dev(struct tm6000_core *dev)
 	tm6000_config_tuner(dev);
 
 	/* Set video standard */
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
 
 	/* Set tuner frequency - also loads firmware on xc2028/xc3028 */
 	f.tuner = 0;
diff --git a/drivers/media/usb/tm6000/tm6000-video.c b/drivers/media/usb/tm6000/tm6000-video.c
index cc1aa14..e6b3d5d 100644
--- a/drivers/media/usb/tm6000/tm6000-video.c
+++ b/drivers/media/usb/tm6000/tm6000-video.c
@@ -1071,7 +1071,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
 	if (rc < 0)
 		return rc;
 
-	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
+	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->norm);
 
 	return 0;
 }
diff --git a/drivers/media/usb/usbvision/usbvision-video.c b/drivers/media/usb/usbvision/usbvision-video.c
index 5c9e312..68bc961 100644
--- a/drivers/media/usb/usbvision/usbvision-video.c
+++ b/drivers/media/usb/usbvision/usbvision-video.c
@@ -597,7 +597,7 @@  static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
 
 	usbvision->tvnorm_id = id;
 
-	call_all(usbvision, core, s_std, usbvision->tvnorm_id);
+	call_all(usbvision, video, s_std, usbvision->tvnorm_id);
 	/* propagate the change to the decoder */
 	usbvision_muxsel(usbvision, usbvision->ctl_input);
 
diff --git a/drivers/media/v4l2-core/tuner-core.c b/drivers/media/v4l2-core/tuner-core.c
index 20c0922..06c18ba 100644
--- a/drivers/media/v4l2-core/tuner-core.c
+++ b/drivers/media/v4l2-core/tuner-core.c
@@ -1301,7 +1301,6 @@  static int tuner_command(struct i2c_client *client, unsigned cmd, void *arg)
 
 static const struct v4l2_subdev_core_ops tuner_core_ops = {
 	.log_status = tuner_log_status,
-	.s_std = tuner_s_std,
 	.s_power = tuner_s_power,
 };
 
@@ -1315,9 +1314,14 @@  static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
 	.s_config = tuner_s_config,
 };
 
+static const struct v4l2_subdev_video_ops tuner_video_ops = {
+	.s_std = tuner_s_std,
+};
+
 static const struct v4l2_subdev_ops tuner_ops = {
 	.core = &tuner_core_ops,
 	.tuner = &tuner_tuner_ops,
+	.video = &tuner_video_ops,
 };
 
 /*
diff --git a/drivers/staging/media/davinci_vpfe/vpfe_video.c b/drivers/staging/media/davinci_vpfe/vpfe_video.c
index 8c101cb..f59b9fd 100644
--- a/drivers/staging/media/davinci_vpfe/vpfe_video.c
+++ b/drivers/staging/media/davinci_vpfe/vpfe_video.c
@@ -945,7 +945,7 @@  static int vpfe_s_std(struct file *file, void *priv, v4l2_std_id std_id)
 		goto unlock_out;
 	}
 	ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id,
-					 core, s_std, std_id);
+					 video, s_std, std_id);
 	if (ret < 0) {
 		v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n");
 		video->stdid = V4L2_STD_UNKNOWN;
diff --git a/drivers/staging/media/go7007/go7007-v4l2.c b/drivers/staging/media/go7007/go7007-v4l2.c
index a349878..a767746 100644
--- a/drivers/staging/media/go7007/go7007-v4l2.c
+++ b/drivers/staging/media/go7007/go7007-v4l2.c
@@ -665,7 +665,7 @@  static int go7007_s_std(struct go7007 *go)
 		go->sensor_framerate = 30000;
 	}
 
-	call_all(&go->v4l2_dev, core, s_std, go->std);
+	call_all(&go->v4l2_dev, video, s_std, go->std);
 	set_capture_size(go, NULL, 0);
 	return 0;
 }
diff --git a/drivers/staging/media/go7007/s2250-board.c b/drivers/staging/media/go7007/s2250-board.c
index 696a807..eaa2b09 100644
--- a/drivers/staging/media/go7007/s2250-board.c
+++ b/drivers/staging/media/go7007/s2250-board.c
@@ -474,7 +474,6 @@  static const struct v4l2_ctrl_ops s2250_ctrl_ops = {
 
 static const struct v4l2_subdev_core_ops s2250_core_ops = {
 	.log_status = s2250_log_status,
-	.s_std = s2250_s_std,
 };
 
 static const struct v4l2_subdev_audio_ops s2250_audio_ops = {
@@ -482,6 +481,7 @@  static const struct v4l2_subdev_audio_ops s2250_audio_ops = {
 };
 
 static const struct v4l2_subdev_video_ops s2250_video_ops = {
+	.s_std = s2250_s_std,
 	.s_routing = s2250_s_video_routing,
 	.s_mbus_fmt = s2250_s_mbus_fmt,
 };
diff --git a/drivers/staging/media/go7007/saa7134-go7007.c b/drivers/staging/media/go7007/saa7134-go7007.c
index 6e2ca33..e40f7fb 100644
--- a/drivers/staging/media/go7007/saa7134-go7007.c
+++ b/drivers/staging/media/go7007/saa7134-go7007.c
@@ -434,11 +434,15 @@  static const struct v4l2_subdev_core_ops saa7134_go7007_core_ops = {
 	.g_ctrl = saa7134_go7007_g_ctrl,
 	.s_ctrl = saa7134_go7007_s_ctrl,
 	.queryctrl = saa7134_go7007_queryctrl,
+};
+
+static const struct v4l2_subdev_video_ops saa7134_go7007_video_ops = {
 	.s_std = saa7134_go7007_s_std,
 };
 
 static const struct v4l2_subdev_ops saa7134_go7007_sd_ops = {
 	.core = &saa7134_go7007_core_ops,
+	.video = &saa7134_go7007_video_ops,
 };
 
 /* --------------------------------------------------------------------------*/
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 1752530..323236e 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -159,8 +159,6 @@  struct v4l2_subdev_core_ops {
 	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 (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
-	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
 	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 #ifdef CONFIG_COMPAT
 	long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,
@@ -309,6 +307,8 @@  struct v4l2_mbus_frame_desc {
 struct v4l2_subdev_video_ops {
 	int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
 	int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
+	int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
+	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
 	int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
 	int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
 	int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
@@ -684,7 +684,7 @@  void v4l2_subdev_init(struct v4l2_subdev *sd,
 /* Call an ops of a v4l2_subdev, doing the right checks against
    NULL pointers.
 
-   Example: err = v4l2_subdev_call(sd, core, s_std, norm);
+   Example: err = v4l2_subdev_call(sd, video, s_std, norm);
  */
 #define v4l2_subdev_call(sd, o, f, args...)				\
 	(!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ?	\