diff mbox series

[RFC,v2,1/7] media: v4l2: Get rid of ->vidioc_enum_fmt_vid_{cap,out}_mplane

Message ID 20190404081700.30006-2-boris.brezillon@collabora.com (mailing list archive)
State New, archived
Headers show
Series media: v4l2: Add extended fmt and buffer ioctls | expand

Commit Message

Boris Brezillon April 4, 2019, 8:16 a.m. UTC
Support for multiplanar and singleplanar formats is mutually exclusive,
at least in practice. In our attempt to unify support for support for
mplane and !mplane in v4l, let's get rid of the
->vidioc_enum_fmt_{vid,out}_cap_mplane() hooks and call
->vidioc_enum_fmt_{vid,out}_cap() instead.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
Changes in v2:
- None
---
 drivers/media/pci/intel/ipu3/ipu3-cio2.c      |  2 +-
 drivers/media/platform/exynos-gsc/gsc-m2m.c   |  4 ++--
 .../media/platform/exynos4-is/fimc-capture.c  |  2 +-
 .../platform/exynos4-is/fimc-isp-video.c      |  2 +-
 drivers/media/platform/exynos4-is/fimc-lite.c |  2 +-
 drivers/media/platform/exynos4-is/fimc-m2m.c  |  4 ++--
 .../media/platform/mtk-jpeg/mtk_jpeg_core.c   |  4 ++--
 drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c  |  4 ++--
 .../platform/mtk-vcodec/mtk_vcodec_dec.c      |  4 ++--
 .../platform/mtk-vcodec/mtk_vcodec_enc.c      |  4 ++--
 .../media/platform/qcom/camss/camss-video.c   |  2 +-
 drivers/media/platform/qcom/venus/vdec.c      |  4 ++--
 drivers/media/platform/qcom/venus/venc.c      |  4 ++--
 drivers/media/platform/rcar_fdp1.c            |  4 ++--
 drivers/media/platform/rcar_jpu.c             |  4 ++--
 drivers/media/platform/renesas-ceu.c          |  2 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c  |  4 ++--
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |  4 ++--
 drivers/media/platform/ti-vpe/vpe.c           |  4 ++--
 drivers/media/platform/vicodec/vicodec-core.c |  2 --
 drivers/media/platform/vivid/vivid-core.c     |  6 ++----
 .../media/platform/vivid/vivid-vid-common.c   | 20 ------------------
 .../media/platform/vivid/vivid-vid-common.h   |  2 --
 drivers/media/v4l2-core/v4l2-dev.c            |  2 --
 drivers/media/v4l2-core/v4l2-ioctl.c          | 21 ++++++++++---------
 drivers/staging/media/ipu3/ipu3-v4l2.c        |  4 ++--
 .../media/rockchip/vpu/rockchip_vpu_enc.c     |  4 ++--
 include/media/v4l2-ioctl.h                    | 14 ++-----------
 28 files changed, 51 insertions(+), 88 deletions(-)

Comments

Hans Verkuil April 11, 2019, 7:59 a.m. UTC | #1
On 4/4/19 10:16 AM, Boris Brezillon wrote:
> Support for multiplanar and singleplanar formats is mutually exclusive,
> at least in practice. In our attempt to unify support for support for
> mplane and !mplane in v4l, let's get rid of the
> ->vidioc_enum_fmt_{vid,out}_cap_mplane() hooks and call
> ->vidioc_enum_fmt_{vid,out}_cap() instead.

This is a good idea. This can be done separately from the other patches in
this series and merged.

One comment...

> 
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
> Changes in v2:
> - None
> ---
>  drivers/media/pci/intel/ipu3/ipu3-cio2.c      |  2 +-
>  drivers/media/platform/exynos-gsc/gsc-m2m.c   |  4 ++--
>  .../media/platform/exynos4-is/fimc-capture.c  |  2 +-
>  .../platform/exynos4-is/fimc-isp-video.c      |  2 +-
>  drivers/media/platform/exynos4-is/fimc-lite.c |  2 +-
>  drivers/media/platform/exynos4-is/fimc-m2m.c  |  4 ++--
>  .../media/platform/mtk-jpeg/mtk_jpeg_core.c   |  4 ++--
>  drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c  |  4 ++--
>  .../platform/mtk-vcodec/mtk_vcodec_dec.c      |  4 ++--
>  .../platform/mtk-vcodec/mtk_vcodec_enc.c      |  4 ++--
>  .../media/platform/qcom/camss/camss-video.c   |  2 +-
>  drivers/media/platform/qcom/venus/vdec.c      |  4 ++--
>  drivers/media/platform/qcom/venus/venc.c      |  4 ++--
>  drivers/media/platform/rcar_fdp1.c            |  4 ++--
>  drivers/media/platform/rcar_jpu.c             |  4 ++--
>  drivers/media/platform/renesas-ceu.c          |  2 +-
>  drivers/media/platform/s5p-mfc/s5p_mfc_dec.c  |  4 ++--
>  drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |  4 ++--
>  drivers/media/platform/ti-vpe/vpe.c           |  4 ++--
>  drivers/media/platform/vicodec/vicodec-core.c |  2 --
>  drivers/media/platform/vivid/vivid-core.c     |  6 ++----
>  .../media/platform/vivid/vivid-vid-common.c   | 20 ------------------
>  .../media/platform/vivid/vivid-vid-common.h   |  2 --
>  drivers/media/v4l2-core/v4l2-dev.c            |  2 --
>  drivers/media/v4l2-core/v4l2-ioctl.c          | 21 ++++++++++---------
>  drivers/staging/media/ipu3/ipu3-v4l2.c        |  4 ++--
>  .../media/rockchip/vpu/rockchip_vpu_enc.c     |  4 ++--
>  include/media/v4l2-ioctl.h                    | 14 ++-----------
>  28 files changed, 51 insertions(+), 88 deletions(-)
> 
> diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> index f8020ebe9f05..c3b3af3c3b2f 100644
> --- a/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> +++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> @@ -1174,7 +1174,7 @@ static const struct v4l2_file_operations cio2_v4l2_fops = {
>  
>  static const struct v4l2_ioctl_ops cio2_v4l2_ioctl_ops = {
>  	.vidioc_querycap = cio2_v4l2_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = cio2_v4l2_enum_fmt,
> +	.vidioc_enum_fmt_vid_cap = cio2_v4l2_enum_fmt,
>  	.vidioc_g_fmt_vid_cap_mplane = cio2_v4l2_g_fmt,
>  	.vidioc_s_fmt_vid_cap_mplane = cio2_v4l2_s_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane = cio2_v4l2_try_fmt,
> diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c
> index c757f5d98bcc..9e2914d3d8f9 100644
> --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c
> +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c
> @@ -562,8 +562,8 @@ static int gsc_m2m_s_selection(struct file *file, void *fh,
>  
>  static const struct v4l2_ioctl_ops gsc_m2m_ioctl_ops = {
>  	.vidioc_querycap		= gsc_m2m_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane	= gsc_m2m_enum_fmt_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane	= gsc_m2m_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_cap	= gsc_m2m_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_out	= gsc_m2m_enum_fmt_mplane,

Please rename the functions as well, dropping the _mplane suffix. Here and in
the other drivers.

>  	.vidioc_g_fmt_vid_cap_mplane	= gsc_m2m_g_fmt_mplane,
>  	.vidioc_g_fmt_vid_out_mplane	= gsc_m2m_g_fmt_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= gsc_m2m_try_fmt_mplane,
> diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c
> index 3e9fcf4f8a13..649c3a5b4d03 100644
> --- a/drivers/media/platform/exynos4-is/fimc-capture.c
> +++ b/drivers/media/platform/exynos4-is/fimc-capture.c
> @@ -1361,7 +1361,7 @@ static int fimc_cap_s_selection(struct file *file, void *fh,
>  static const struct v4l2_ioctl_ops fimc_capture_ioctl_ops = {
>  	.vidioc_querycap		= fimc_cap_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane	= fimc_cap_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_cap	= fimc_cap_enum_fmt_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= fimc_cap_try_fmt_mplane,
>  	.vidioc_s_fmt_vid_cap_mplane	= fimc_cap_s_fmt_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane	= fimc_cap_g_fmt_mplane,
> diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c
> index bb35a2017f21..ffe10a2ea6b0 100644
> --- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
> +++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
> @@ -551,7 +551,7 @@ static int isp_video_reqbufs(struct file *file, void *priv,
>  
>  static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
>  	.vidioc_querycap		= isp_video_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane	= isp_video_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_cap	= isp_video_enum_fmt_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= isp_video_try_fmt_mplane,
>  	.vidioc_s_fmt_vid_cap_mplane	= isp_video_s_fmt_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane	= isp_video_g_fmt_mplane,
> diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c
> index 96f0a8a0dcae..b9c537d38a45 100644
> --- a/drivers/media/platform/exynos4-is/fimc-lite.c
> +++ b/drivers/media/platform/exynos4-is/fimc-lite.c
> @@ -954,7 +954,7 @@ static int fimc_lite_s_selection(struct file *file, void *fh,
>  
>  static const struct v4l2_ioctl_ops fimc_lite_ioctl_ops = {
>  	.vidioc_querycap		= fimc_lite_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane	= fimc_lite_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_cap	= fimc_lite_enum_fmt_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= fimc_lite_try_fmt_mplane,
>  	.vidioc_s_fmt_vid_cap_mplane	= fimc_lite_s_fmt_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane	= fimc_lite_g_fmt_mplane,
> diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media/platform/exynos4-is/fimc-m2m.c
> index 61c8177409cf..278ab067e30f 100644
> --- a/drivers/media/platform/exynos4-is/fimc-m2m.c
> +++ b/drivers/media/platform/exynos4-is/fimc-m2m.c
> @@ -533,8 +533,8 @@ static int fimc_m2m_s_selection(struct file *file, void *fh,
>  
>  static const struct v4l2_ioctl_ops fimc_m2m_ioctl_ops = {
>  	.vidioc_querycap		= fimc_m2m_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane	= fimc_m2m_enum_fmt_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane	= fimc_m2m_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_cap	= fimc_m2m_enum_fmt_mplane,
> +	.vidioc_enum_fmt_vid_out	= fimc_m2m_enum_fmt_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane	= fimc_m2m_g_fmt_mplane,
>  	.vidioc_g_fmt_vid_out_mplane	= fimc_m2m_g_fmt_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= fimc_m2m_try_fmt_mplane,
> diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
> index f761e4d8bf2a..3b199662cb34 100644
> --- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
> +++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
> @@ -536,8 +536,8 @@ static int mtk_jpeg_qbuf(struct file *file, void *priv, struct v4l2_buffer *buf)
>  
>  static const struct v4l2_ioctl_ops mtk_jpeg_ioctl_ops = {
>  	.vidioc_querycap                = mtk_jpeg_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = mtk_jpeg_enum_fmt_vid_cap,
> -	.vidioc_enum_fmt_vid_out_mplane = mtk_jpeg_enum_fmt_vid_out,
> +	.vidioc_enum_fmt_vid_cap	= mtk_jpeg_enum_fmt_vid_cap,
> +	.vidioc_enum_fmt_vid_out	= mtk_jpeg_enum_fmt_vid_out,
>  	.vidioc_try_fmt_vid_cap_mplane	= mtk_jpeg_try_fmt_vid_cap_mplane,
>  	.vidioc_try_fmt_vid_out_mplane	= mtk_jpeg_try_fmt_vid_out_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane    = mtk_jpeg_g_fmt_vid_mplane,
> diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
> index 7d15c06e9db9..f094d1030331 100644
> --- a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
> +++ b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
> @@ -935,8 +935,8 @@ static int mtk_mdp_m2m_s_selection(struct file *file, void *fh,
>  
>  static const struct v4l2_ioctl_ops mtk_mdp_m2m_ioctl_ops = {
>  	.vidioc_querycap		= mtk_mdp_m2m_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane	= mtk_mdp_m2m_enum_fmt_mplane_vid_cap,
> -	.vidioc_enum_fmt_vid_out_mplane	= mtk_mdp_m2m_enum_fmt_mplane_vid_out,
> +	.vidioc_enum_fmt_vid_cap	= mtk_mdp_m2m_enum_fmt_mplane_vid_cap,
> +	.vidioc_enum_fmt_vid_out	= mtk_mdp_m2m_enum_fmt_mplane_vid_out,
>  	.vidioc_g_fmt_vid_cap_mplane	= mtk_mdp_m2m_g_fmt_mplane,
>  	.vidioc_g_fmt_vid_out_mplane	= mtk_mdp_m2m_g_fmt_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= mtk_mdp_m2m_try_fmt_mplane,
> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
> index d022c65bb34c..1d922b8dfb6b 100644
> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
> @@ -1444,8 +1444,8 @@ const struct v4l2_ioctl_ops mtk_vdec_ioctl_ops = {
>  
>  	.vidioc_create_bufs		= v4l2_m2m_ioctl_create_bufs,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane	= vidioc_vdec_enum_fmt_vid_cap_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane	= vidioc_vdec_enum_fmt_vid_out_mplane,
> +	.vidioc_enum_fmt_vid_cap	= vidioc_vdec_enum_fmt_vid_cap_mplane,
> +	.vidioc_enum_fmt_vid_out	= vidioc_vdec_enum_fmt_vid_out_mplane,
>  	.vidioc_enum_framesizes	= vidioc_enum_framesizes,
>  
>  	.vidioc_querycap		= vidioc_vdec_querycap,
> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
> index c6b48b5925fb..6ee7ced96d84 100644
> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
> @@ -725,8 +725,8 @@ const struct v4l2_ioctl_ops mtk_venc_ioctl_ops = {
>  	.vidioc_dqbuf			= vidioc_venc_dqbuf,
>  
>  	.vidioc_querycap		= vidioc_venc_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
> +	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid_cap_mplane,
> +	.vidioc_enum_fmt_vid_out	= vidioc_enum_fmt_vid_out_mplane,
>  	.vidioc_enum_framesizes		= vidioc_enum_framesizes,
>  
>  	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap_mplane,
> diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c
> index 58aebe7114cd..1d50dfbbb762 100644
> --- a/drivers/media/platform/qcom/camss/camss-video.c
> +++ b/drivers/media/platform/qcom/camss/camss-video.c
> @@ -703,7 +703,7 @@ static int video_s_input(struct file *file, void *fh, unsigned int input)
>  
>  static const struct v4l2_ioctl_ops msm_vid_ioctl_ops = {
>  	.vidioc_querycap		= video_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane	= video_enum_fmt,
> +	.vidioc_enum_fmt_vid_cap	= video_enum_fmt,
>  	.vidioc_g_fmt_vid_cap_mplane	= video_g_fmt,
>  	.vidioc_s_fmt_vid_cap_mplane	= video_s_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane	= video_try_fmt,
> diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
> index 282de21cf2e1..2a47b9b8c5bc 100644
> --- a/drivers/media/platform/qcom/venus/vdec.c
> +++ b/drivers/media/platform/qcom/venus/vdec.c
> @@ -491,8 +491,8 @@ vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd)
>  
>  static const struct v4l2_ioctl_ops vdec_ioctl_ops = {
>  	.vidioc_querycap = vdec_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = vdec_enum_fmt,
> -	.vidioc_enum_fmt_vid_out_mplane = vdec_enum_fmt,
> +	.vidioc_enum_fmt_vid_cap = vdec_enum_fmt,
> +	.vidioc_enum_fmt_vid_out = vdec_enum_fmt,
>  	.vidioc_s_fmt_vid_cap_mplane = vdec_s_fmt,
>  	.vidioc_s_fmt_vid_out_mplane = vdec_s_fmt,
>  	.vidioc_g_fmt_vid_cap_mplane = vdec_g_fmt,
> diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
> index 32cff294582f..406a47923996 100644
> --- a/drivers/media/platform/qcom/venus/venc.c
> +++ b/drivers/media/platform/qcom/venus/venc.c
> @@ -616,8 +616,8 @@ static int venc_enum_frameintervals(struct file *file, void *fh,
>  
>  static const struct v4l2_ioctl_ops venc_ioctl_ops = {
>  	.vidioc_querycap = venc_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = venc_enum_fmt,
> -	.vidioc_enum_fmt_vid_out_mplane = venc_enum_fmt,
> +	.vidioc_enum_fmt_vid_cap = venc_enum_fmt,
> +	.vidioc_enum_fmt_vid_out = venc_enum_fmt,
>  	.vidioc_s_fmt_vid_cap_mplane = venc_s_fmt,
>  	.vidioc_s_fmt_vid_out_mplane = venc_s_fmt,
>  	.vidioc_g_fmt_vid_cap_mplane = venc_g_fmt,
> diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/rcar_fdp1.c
> index 6bda1eee9170..6e6471c37984 100644
> --- a/drivers/media/platform/rcar_fdp1.c
> +++ b/drivers/media/platform/rcar_fdp1.c
> @@ -1730,8 +1730,8 @@ static const char * const fdp1_ctrl_deint_menu[] = {
>  static const struct v4l2_ioctl_ops fdp1_ioctl_ops = {
>  	.vidioc_querycap	= fdp1_vidioc_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane = fdp1_enum_fmt_vid_cap,
> -	.vidioc_enum_fmt_vid_out_mplane = fdp1_enum_fmt_vid_out,
> +	.vidioc_enum_fmt_vid_cap	= fdp1_enum_fmt_vid_cap,
> +	.vidioc_enum_fmt_vid_out	= fdp1_enum_fmt_vid_out,
>  	.vidioc_g_fmt_vid_cap_mplane	= fdp1_g_fmt,
>  	.vidioc_g_fmt_vid_out_mplane	= fdp1_g_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane	= fdp1_try_fmt,
> diff --git a/drivers/media/platform/rcar_jpu.c b/drivers/media/platform/rcar_jpu.c
> index 1dfd2eb65920..a34f4e6b2f98 100644
> --- a/drivers/media/platform/rcar_jpu.c
> +++ b/drivers/media/platform/rcar_jpu.c
> @@ -948,8 +948,8 @@ static int jpu_streamon(struct file *file, void *priv, enum v4l2_buf_type type)
>  static const struct v4l2_ioctl_ops jpu_ioctl_ops = {
>  	.vidioc_querycap		= jpu_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane = jpu_enum_fmt_cap,
> -	.vidioc_enum_fmt_vid_out_mplane = jpu_enum_fmt_out,
> +	.vidioc_enum_fmt_vid_cap	= jpu_enum_fmt_cap,
> +	.vidioc_enum_fmt_vid_out	= jpu_enum_fmt_out,
>  	.vidioc_g_fmt_vid_cap_mplane	= jpu_g_fmt,
>  	.vidioc_g_fmt_vid_out_mplane	= jpu_g_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane	= jpu_try_fmt,
> diff --git a/drivers/media/platform/renesas-ceu.c b/drivers/media/platform/renesas-ceu.c
> index 150196f7cf96..57d0c0f9fa4b 100644
> --- a/drivers/media/platform/renesas-ceu.c
> +++ b/drivers/media/platform/renesas-ceu.c
> @@ -1339,7 +1339,7 @@ static int ceu_enum_frameintervals(struct file *file, void *fh,
>  static const struct v4l2_ioctl_ops ceu_ioctl_ops = {
>  	.vidioc_querycap		= ceu_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane	= ceu_enum_fmt_vid_cap,
> +	.vidioc_enum_fmt_vid_cap	= ceu_enum_fmt_vid_cap,
>  	.vidioc_try_fmt_vid_cap_mplane	= ceu_try_fmt_vid_cap,
>  	.vidioc_s_fmt_vid_cap_mplane	= ceu_s_fmt_vid_cap,
>  	.vidioc_g_fmt_vid_cap_mplane	= ceu_g_fmt_vid_cap,
> diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
> index e111f9c47179..b270ff59c5e3 100644
> --- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
> +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
> @@ -887,8 +887,8 @@ static int vidioc_subscribe_event(struct v4l2_fh *fh,
>  /* v4l2_ioctl_ops */
>  static const struct v4l2_ioctl_ops s5p_mfc_dec_ioctl_ops = {
>  	.vidioc_querycap = vidioc_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
> +	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap_mplane,
> +	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane = vidioc_g_fmt,
>  	.vidioc_g_fmt_vid_out_mplane = vidioc_g_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane = vidioc_try_fmt,
> diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
> index 8fcf627dedfb..2fa16ee9c7b0 100644
> --- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
> +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
> @@ -2343,8 +2343,8 @@ static int vidioc_subscribe_event(struct v4l2_fh *fh,
>  
>  static const struct v4l2_ioctl_ops s5p_mfc_enc_ioctl_ops = {
>  	.vidioc_querycap = vidioc_querycap,
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
> +	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap_mplane,
> +	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane = vidioc_g_fmt,
>  	.vidioc_g_fmt_vid_out_mplane = vidioc_g_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane = vidioc_try_fmt,
> diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform/ti-vpe/vpe.c
> index 207e7e76c048..ddfae9f4fbfa 100644
> --- a/drivers/media/platform/ti-vpe/vpe.c
> +++ b/drivers/media/platform/ti-vpe/vpe.c
> @@ -1973,12 +1973,12 @@ static const struct v4l2_ctrl_ops vpe_ctrl_ops = {
>  static const struct v4l2_ioctl_ops vpe_ioctl_ops = {
>  	.vidioc_querycap		= vpe_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane	= vpe_enum_fmt,
> +	.vidioc_enum_fmt_vid_cap	= vpe_enum_fmt,
>  	.vidioc_g_fmt_vid_cap_mplane	= vpe_g_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane	= vpe_try_fmt,
>  	.vidioc_s_fmt_vid_cap_mplane	= vpe_s_fmt,
>  
> -	.vidioc_enum_fmt_vid_out_mplane	= vpe_enum_fmt,
> +	.vidioc_enum_fmt_vid_out	= vpe_enum_fmt,
>  	.vidioc_g_fmt_vid_out_mplane	= vpe_g_fmt,
>  	.vidioc_try_fmt_vid_out_mplane	= vpe_try_fmt,
>  	.vidioc_s_fmt_vid_out_mplane	= vpe_s_fmt,
> diff --git a/drivers/media/platform/vicodec/vicodec-core.c b/drivers/media/platform/vicodec/vicodec-core.c
> index d7636fe9e174..fda726e43d60 100644
> --- a/drivers/media/platform/vicodec/vicodec-core.c
> +++ b/drivers/media/platform/vicodec/vicodec-core.c
> @@ -1140,7 +1140,6 @@ static const struct v4l2_ioctl_ops vicodec_ioctl_ops = {
>  	.vidioc_try_fmt_vid_cap	= vidioc_try_fmt_vid_cap,
>  	.vidioc_s_fmt_vid_cap	= vidioc_s_fmt_vid_cap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap,
>  	.vidioc_g_fmt_vid_cap_mplane	= vidioc_g_fmt_vid_cap,
>  	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap,
>  	.vidioc_s_fmt_vid_cap_mplane	= vidioc_s_fmt_vid_cap,
> @@ -1150,7 +1149,6 @@ static const struct v4l2_ioctl_ops vicodec_ioctl_ops = {
>  	.vidioc_try_fmt_vid_out	= vidioc_try_fmt_vid_out,
>  	.vidioc_s_fmt_vid_out	= vidioc_s_fmt_vid_out,
>  
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out,
>  	.vidioc_g_fmt_vid_out_mplane	= vidioc_g_fmt_vid_out,
>  	.vidioc_try_fmt_vid_out_mplane	= vidioc_try_fmt_vid_out,
>  	.vidioc_s_fmt_vid_out_mplane	= vidioc_s_fmt_vid_out,
> diff --git a/drivers/media/platform/vivid/vivid-core.c b/drivers/media/platform/vivid/vivid-core.c
> index 342e0e6c103b..345adde47789 100644
> --- a/drivers/media/platform/vivid/vivid-core.c
> +++ b/drivers/media/platform/vivid/vivid-core.c
> @@ -500,20 +500,18 @@ static const struct v4l2_file_operations vivid_radio_fops = {
>  static const struct v4l2_ioctl_ops vivid_ioctl_ops = {
>  	.vidioc_querycap		= vidioc_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid,
> +	.vidioc_enum_fmt_vid_cap	= vivid_enum_fmt_vid,
>  	.vidioc_g_fmt_vid_cap		= vidioc_g_fmt_vid_cap,
>  	.vidioc_try_fmt_vid_cap		= vidioc_try_fmt_vid_cap,
>  	.vidioc_s_fmt_vid_cap		= vidioc_s_fmt_vid_cap,
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane	= vidioc_g_fmt_vid_cap_mplane,
>  	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap_mplane,
>  	.vidioc_s_fmt_vid_cap_mplane	= vidioc_s_fmt_vid_cap_mplane,
>  
> -	.vidioc_enum_fmt_vid_out	= vidioc_enum_fmt_vid,
> +	.vidioc_enum_fmt_vid_out	= vivid_enum_fmt_vid,
>  	.vidioc_g_fmt_vid_out		= vidioc_g_fmt_vid_out,
>  	.vidioc_try_fmt_vid_out		= vidioc_try_fmt_vid_out,
>  	.vidioc_s_fmt_vid_out		= vidioc_s_fmt_vid_out,
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_mplane,
>  	.vidioc_g_fmt_vid_out_mplane	= vidioc_g_fmt_vid_out_mplane,
>  	.vidioc_try_fmt_vid_out_mplane	= vidioc_try_fmt_vid_out_mplane,
>  	.vidioc_s_fmt_vid_out_mplane	= vidioc_s_fmt_vid_out_mplane,
> diff --git a/drivers/media/platform/vivid/vivid-vid-common.c b/drivers/media/platform/vivid/vivid-vid-common.c
> index 74b83bcc6119..9307ce1cdd16 100644
> --- a/drivers/media/platform/vivid/vivid-vid-common.c
> +++ b/drivers/media/platform/vivid/vivid-vid-common.c
> @@ -797,26 +797,6 @@ int vivid_enum_fmt_vid(struct file *file, void  *priv,
>  	return 0;
>  }
>  
> -int vidioc_enum_fmt_vid_mplane(struct file *file, void  *priv,
> -					struct v4l2_fmtdesc *f)
> -{
> -	struct vivid_dev *dev = video_drvdata(file);
> -
> -	if (!dev->multiplanar)
> -		return -ENOTTY;
> -	return vivid_enum_fmt_vid(file, priv, f);
> -}
> -
> -int vidioc_enum_fmt_vid(struct file *file, void  *priv,
> -					struct v4l2_fmtdesc *f)
> -{
> -	struct vivid_dev *dev = video_drvdata(file);
> -
> -	if (dev->multiplanar)
> -		return -ENOTTY;
> -	return vivid_enum_fmt_vid(file, priv, f);
> -}
> -
>  int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)
>  {
>  	struct vivid_dev *dev = video_drvdata(file);
> diff --git a/drivers/media/platform/vivid/vivid-vid-common.h b/drivers/media/platform/vivid/vivid-vid-common.h
> index 29b6c0b40a1b..d908d9725283 100644
> --- a/drivers/media/platform/vivid/vivid-vid-common.h
> +++ b/drivers/media/platform/vivid/vivid-vid-common.h
> @@ -28,8 +28,6 @@ void vivid_send_source_change(struct vivid_dev *dev, unsigned type);
>  int vivid_vid_adjust_sel(unsigned flags, struct v4l2_rect *r);
>  
>  int vivid_enum_fmt_vid(struct file *file, void  *priv, struct v4l2_fmtdesc *f);
> -int vidioc_enum_fmt_vid_mplane(struct file *file, void  *priv, struct v4l2_fmtdesc *f);
> -int vidioc_enum_fmt_vid(struct file *file, void  *priv, struct v4l2_fmtdesc *f);
>  int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id);
>  int vidioc_g_dv_timings(struct file *file, void *_fh, struct v4l2_dv_timings *timings);
>  int vidioc_enum_dv_timings(struct file *file, void *_fh, struct v4l2_enum_dv_timings *timings);
> diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
> index d7528f82a66a..29946a2b2752 100644
> --- a/drivers/media/v4l2-core/v4l2-dev.c
> +++ b/drivers/media/v4l2-core/v4l2-dev.c
> @@ -593,11 +593,9 @@ static void determine_valid_ioctls(struct video_device *vdev)
>  	if (is_vid || is_tch) {
>  		/* video and metadata specific ioctls */
>  		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
> -			       ops->vidioc_enum_fmt_vid_cap_mplane ||
>  			       ops->vidioc_enum_fmt_vid_overlay ||
>  			       ops->vidioc_enum_fmt_meta_cap)) ||
>  		    (is_tx && (ops->vidioc_enum_fmt_vid_out ||
> -			       ops->vidioc_enum_fmt_vid_out_mplane ||
>  			       ops->vidioc_enum_fmt_meta_out)))
>  			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
>  		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index f6d663934648..97ba365218fb 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1380,6 +1380,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>  				struct file *file, void *fh, void *arg)
>  {
> +	struct video_device *vdev = video_devdata(file);
>  	struct v4l2_fmtdesc *p = arg;
>  	int ret = check_fmt(file, p->type);
>  
> @@ -1389,30 +1390,30 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>  
>  	switch (p->type) {
>  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> +	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=

Hmm. I am not sure if all drivers that set V4L2_CAP_VIDEO_CAPTURE_MPLANE also
fill in vdev->device_caps. While filling in vdev->device_caps is required for
new drivers, older drivers often don't do this.

You would have to check all drivers that set V4L2_CAP_VIDEO_CAPTURE/OUTPUT_MPLANE
to verify that they also set vdev->device_caps. I'm fairly certain the Samsung
drivers don't fill this in.

> +		    (p->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE))
> +			break;
> +
>  		if (unlikely(!ops->vidioc_enum_fmt_vid_cap))
>  			break;
>  		ret = ops->vidioc_enum_fmt_vid_cap(file, fh, arg);
>  		break;
> -	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> -		if (unlikely(!ops->vidioc_enum_fmt_vid_cap_mplane))
> -			break;
> -		ret = ops->vidioc_enum_fmt_vid_cap_mplane(file, fh, arg);
> -		break;
>  	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
>  		if (unlikely(!ops->vidioc_enum_fmt_vid_overlay))
>  			break;
>  		ret = ops->vidioc_enum_fmt_vid_overlay(file, fh, arg);
>  		break;
>  	case V4L2_BUF_TYPE_VIDEO_OUTPUT:
> +	case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
> +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE) !=
> +		    (p->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE))
> +			break;

See comment above.

> +
>  		if (unlikely(!ops->vidioc_enum_fmt_vid_out))
>  			break;
>  		ret = ops->vidioc_enum_fmt_vid_out(file, fh, arg);
>  		break;
> -	case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
> -		if (unlikely(!ops->vidioc_enum_fmt_vid_out_mplane))
> -			break;
> -		ret = ops->vidioc_enum_fmt_vid_out_mplane(file, fh, arg);
> -		break;
>  	case V4L2_BUF_TYPE_SDR_CAPTURE:
>  		if (unlikely(!ops->vidioc_enum_fmt_sdr_cap))
>  			break;
> diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
> index 9c0352b193a7..92240baddca4 100644
> --- a/drivers/staging/media/ipu3/ipu3-v4l2.c
> +++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
> @@ -959,12 +959,12 @@ static const struct v4l2_file_operations imgu_v4l2_fops = {
>  static const struct v4l2_ioctl_ops imgu_v4l2_ioctl_ops = {
>  	.vidioc_querycap = imgu_vidioc_querycap,
>  
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap,
> +	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
>  	.vidioc_g_fmt_vid_cap_mplane = imgu_vidioc_g_fmt,
>  	.vidioc_s_fmt_vid_cap_mplane = imgu_vidioc_s_fmt,
>  	.vidioc_try_fmt_vid_cap_mplane = imgu_vidioc_try_fmt,
>  
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out,
> +	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out,
>  	.vidioc_g_fmt_vid_out_mplane = imgu_vidioc_g_fmt,
>  	.vidioc_s_fmt_vid_out_mplane = imgu_vidioc_s_fmt,
>  	.vidioc_try_fmt_vid_out_mplane = imgu_vidioc_try_fmt,
> diff --git a/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c b/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c
> index ab0fb2053620..f42d8325fd33 100644
> --- a/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c
> +++ b/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c
> @@ -493,8 +493,8 @@ const struct v4l2_ioctl_ops rockchip_vpu_enc_ioctl_ops = {
>  	.vidioc_s_fmt_vid_cap_mplane = vidioc_s_fmt_cap_mplane,
>  	.vidioc_g_fmt_vid_out_mplane = vidioc_g_fmt_out_mplane,
>  	.vidioc_g_fmt_vid_cap_mplane = vidioc_g_fmt_cap_mplane,
> -	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
> -	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
> +	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out_mplane,
> +	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap_mplane,
>  
>  	.vidioc_reqbufs = v4l2_m2m_ioctl_reqbufs,
>  	.vidioc_querybuf = v4l2_m2m_ioctl_querybuf,
> diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
> index 8533ece5026e..400f2e46c108 100644
> --- a/include/media/v4l2-ioctl.h
> +++ b/include/media/v4l2-ioctl.h
> @@ -26,19 +26,13 @@ struct v4l2_fh;
>   *	:ref:`VIDIOC_QUERYCAP <vidioc_querycap>` ioctl
>   * @vidioc_enum_fmt_vid_cap: pointer to the function that implements
>   *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
> - *	for video capture in single plane mode
> + *	for video capture in single and multi plane mode
>   * @vidioc_enum_fmt_vid_overlay: pointer to the function that implements
>   *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
>   *	for video overlay
>   * @vidioc_enum_fmt_vid_out: pointer to the function that implements
>   *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
> - *	for video output in single plane mode
> - * @vidioc_enum_fmt_vid_cap_mplane: pointer to the function that implements
> - *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
> - *	for video capture in multiplane mode
> - * @vidioc_enum_fmt_vid_out_mplane: pointer to the function that implements
> - *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
> - *	for video output in multiplane mode
> + *	for video output in single and multi plane mode
>   * @vidioc_enum_fmt_sdr_cap: pointer to the function that implements
>   *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
>   *	for Software Defined Radio capture
> @@ -313,10 +307,6 @@ struct v4l2_ioctl_ops {
>  					   struct v4l2_fmtdesc *f);
>  	int (*vidioc_enum_fmt_vid_out)(struct file *file, void *fh,
>  				       struct v4l2_fmtdesc *f);
> -	int (*vidioc_enum_fmt_vid_cap_mplane)(struct file *file, void *fh,
> -					      struct v4l2_fmtdesc *f);
> -	int (*vidioc_enum_fmt_vid_out_mplane)(struct file *file, void *fh,
> -					      struct v4l2_fmtdesc *f);
>  	int (*vidioc_enum_fmt_sdr_cap)(struct file *file, void *fh,
>  				       struct v4l2_fmtdesc *f);
>  	int (*vidioc_enum_fmt_sdr_out)(struct file *file, void *fh,
> 

Regards,

	Hans
Boris Brezillon April 11, 2019, 10:36 a.m. UTC | #2
On Thu, 11 Apr 2019 09:59:19 +0200
Hans Verkuil <hverkuil@xs4all.nl> wrote:

> On 4/4/19 10:16 AM, Boris Brezillon wrote:
> > Support for multiplanar and singleplanar formats is mutually exclusive,
> > at least in practice. In our attempt to unify support for support for
> > mplane and !mplane in v4l, let's get rid of the  
> > ->vidioc_enum_fmt_{vid,out}_cap_mplane() hooks and call
> > ->vidioc_enum_fmt_{vid,out}_cap() instead.  
> 
> This is a good idea. This can be done separately from the other patches in
> this series and merged.

Sure, I'll send this patch separately.

> 
> One comment...
> 
> > 
> > Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> > ---
> > Changes in v2:
> > - None
> > ---
> >  drivers/media/pci/intel/ipu3/ipu3-cio2.c      |  2 +-
> >  drivers/media/platform/exynos-gsc/gsc-m2m.c   |  4 ++--
> >  .../media/platform/exynos4-is/fimc-capture.c  |  2 +-
> >  .../platform/exynos4-is/fimc-isp-video.c      |  2 +-
> >  drivers/media/platform/exynos4-is/fimc-lite.c |  2 +-
> >  drivers/media/platform/exynos4-is/fimc-m2m.c  |  4 ++--
> >  .../media/platform/mtk-jpeg/mtk_jpeg_core.c   |  4 ++--
> >  drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c  |  4 ++--
> >  .../platform/mtk-vcodec/mtk_vcodec_dec.c      |  4 ++--
> >  .../platform/mtk-vcodec/mtk_vcodec_enc.c      |  4 ++--
> >  .../media/platform/qcom/camss/camss-video.c   |  2 +-
> >  drivers/media/platform/qcom/venus/vdec.c      |  4 ++--
> >  drivers/media/platform/qcom/venus/venc.c      |  4 ++--
> >  drivers/media/platform/rcar_fdp1.c            |  4 ++--
> >  drivers/media/platform/rcar_jpu.c             |  4 ++--
> >  drivers/media/platform/renesas-ceu.c          |  2 +-
> >  drivers/media/platform/s5p-mfc/s5p_mfc_dec.c  |  4 ++--
> >  drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |  4 ++--
> >  drivers/media/platform/ti-vpe/vpe.c           |  4 ++--
> >  drivers/media/platform/vicodec/vicodec-core.c |  2 --
> >  drivers/media/platform/vivid/vivid-core.c     |  6 ++----
> >  .../media/platform/vivid/vivid-vid-common.c   | 20 ------------------
> >  .../media/platform/vivid/vivid-vid-common.h   |  2 --
> >  drivers/media/v4l2-core/v4l2-dev.c            |  2 --
> >  drivers/media/v4l2-core/v4l2-ioctl.c          | 21 ++++++++++---------
> >  drivers/staging/media/ipu3/ipu3-v4l2.c        |  4 ++--
> >  .../media/rockchip/vpu/rockchip_vpu_enc.c     |  4 ++--
> >  include/media/v4l2-ioctl.h                    | 14 ++-----------
> >  28 files changed, 51 insertions(+), 88 deletions(-)
> > 
> > diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> > index f8020ebe9f05..c3b3af3c3b2f 100644
> > --- a/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> > +++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> > @@ -1174,7 +1174,7 @@ static const struct v4l2_file_operations cio2_v4l2_fops = {
> >  
> >  static const struct v4l2_ioctl_ops cio2_v4l2_ioctl_ops = {
> >  	.vidioc_querycap = cio2_v4l2_querycap,
> > -	.vidioc_enum_fmt_vid_cap_mplane = cio2_v4l2_enum_fmt,
> > +	.vidioc_enum_fmt_vid_cap = cio2_v4l2_enum_fmt,
> >  	.vidioc_g_fmt_vid_cap_mplane = cio2_v4l2_g_fmt,
> >  	.vidioc_s_fmt_vid_cap_mplane = cio2_v4l2_s_fmt,
> >  	.vidioc_try_fmt_vid_cap_mplane = cio2_v4l2_try_fmt,
> > diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c
> > index c757f5d98bcc..9e2914d3d8f9 100644
> > --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c
> > +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c
> > @@ -562,8 +562,8 @@ static int gsc_m2m_s_selection(struct file *file, void *fh,
> >  
> >  static const struct v4l2_ioctl_ops gsc_m2m_ioctl_ops = {
> >  	.vidioc_querycap		= gsc_m2m_querycap,
> > -	.vidioc_enum_fmt_vid_cap_mplane	= gsc_m2m_enum_fmt_mplane,
> > -	.vidioc_enum_fmt_vid_out_mplane	= gsc_m2m_enum_fmt_mplane,
> > +	.vidioc_enum_fmt_vid_cap	= gsc_m2m_enum_fmt_mplane,
> > +	.vidioc_enum_fmt_vid_out	= gsc_m2m_enum_fmt_mplane,  
> 
> Please rename the functions as well, dropping the _mplane suffix. Here and in
> the other drivers.
> 

Okay, I'm remove those _mplane suffix.

> > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > index f6d663934648..97ba365218fb 100644
> > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > @@ -1380,6 +1380,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> >  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> >  				struct file *file, void *fh, void *arg)
> >  {
> > +	struct video_device *vdev = video_devdata(file);
> >  	struct v4l2_fmtdesc *p = arg;
> >  	int ret = check_fmt(file, p->type);
> >  
> > @@ -1389,30 +1390,30 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> >  
> >  	switch (p->type) {
> >  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> > +	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> > +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=  
> 
> Hmm. I am not sure if all drivers that set V4L2_CAP_VIDEO_CAPTURE_MPLANE also
> fill in vdev->device_caps. While filling in vdev->device_caps is required for
> new drivers, older drivers often don't do this.
> 
> You would have to check all drivers that set V4L2_CAP_VIDEO_CAPTURE/OUTPUT_MPLANE
> to verify that they also set vdev->device_caps. I'm fairly certain the Samsung
> drivers don't fill this in.

I'll check that and fix those that don't set the flag. Or do you have
another solution to handle that case?
Hans Verkuil April 11, 2019, 10:38 a.m. UTC | #3
On 4/11/19 12:36 PM, Boris Brezillon wrote:
> On Thu, 11 Apr 2019 09:59:19 +0200
> Hans Verkuil <hverkuil@xs4all.nl> wrote:
> 
>> On 4/4/19 10:16 AM, Boris Brezillon wrote:
>>> Support for multiplanar and singleplanar formats is mutually exclusive,
>>> at least in practice. In our attempt to unify support for support for
>>> mplane and !mplane in v4l, let's get rid of the  
>>> ->vidioc_enum_fmt_{vid,out}_cap_mplane() hooks and call
>>> ->vidioc_enum_fmt_{vid,out}_cap() instead.  
>>
>> This is a good idea. This can be done separately from the other patches in
>> this series and merged.
> 
> Sure, I'll send this patch separately.
> 
>>
>> One comment...
>>
>>>
>>> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
>>> ---
>>> Changes in v2:
>>> - None
>>> ---
>>>  drivers/media/pci/intel/ipu3/ipu3-cio2.c      |  2 +-
>>>  drivers/media/platform/exynos-gsc/gsc-m2m.c   |  4 ++--
>>>  .../media/platform/exynos4-is/fimc-capture.c  |  2 +-
>>>  .../platform/exynos4-is/fimc-isp-video.c      |  2 +-
>>>  drivers/media/platform/exynos4-is/fimc-lite.c |  2 +-
>>>  drivers/media/platform/exynos4-is/fimc-m2m.c  |  4 ++--
>>>  .../media/platform/mtk-jpeg/mtk_jpeg_core.c   |  4 ++--
>>>  drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c  |  4 ++--
>>>  .../platform/mtk-vcodec/mtk_vcodec_dec.c      |  4 ++--
>>>  .../platform/mtk-vcodec/mtk_vcodec_enc.c      |  4 ++--
>>>  .../media/platform/qcom/camss/camss-video.c   |  2 +-
>>>  drivers/media/platform/qcom/venus/vdec.c      |  4 ++--
>>>  drivers/media/platform/qcom/venus/venc.c      |  4 ++--
>>>  drivers/media/platform/rcar_fdp1.c            |  4 ++--
>>>  drivers/media/platform/rcar_jpu.c             |  4 ++--
>>>  drivers/media/platform/renesas-ceu.c          |  2 +-
>>>  drivers/media/platform/s5p-mfc/s5p_mfc_dec.c  |  4 ++--
>>>  drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |  4 ++--
>>>  drivers/media/platform/ti-vpe/vpe.c           |  4 ++--
>>>  drivers/media/platform/vicodec/vicodec-core.c |  2 --
>>>  drivers/media/platform/vivid/vivid-core.c     |  6 ++----
>>>  .../media/platform/vivid/vivid-vid-common.c   | 20 ------------------
>>>  .../media/platform/vivid/vivid-vid-common.h   |  2 --
>>>  drivers/media/v4l2-core/v4l2-dev.c            |  2 --
>>>  drivers/media/v4l2-core/v4l2-ioctl.c          | 21 ++++++++++---------
>>>  drivers/staging/media/ipu3/ipu3-v4l2.c        |  4 ++--
>>>  .../media/rockchip/vpu/rockchip_vpu_enc.c     |  4 ++--
>>>  include/media/v4l2-ioctl.h                    | 14 ++-----------
>>>  28 files changed, 51 insertions(+), 88 deletions(-)
>>>
>>> diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
>>> index f8020ebe9f05..c3b3af3c3b2f 100644
>>> --- a/drivers/media/pci/intel/ipu3/ipu3-cio2.c
>>> +++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
>>> @@ -1174,7 +1174,7 @@ static const struct v4l2_file_operations cio2_v4l2_fops = {
>>>  
>>>  static const struct v4l2_ioctl_ops cio2_v4l2_ioctl_ops = {
>>>  	.vidioc_querycap = cio2_v4l2_querycap,
>>> -	.vidioc_enum_fmt_vid_cap_mplane = cio2_v4l2_enum_fmt,
>>> +	.vidioc_enum_fmt_vid_cap = cio2_v4l2_enum_fmt,
>>>  	.vidioc_g_fmt_vid_cap_mplane = cio2_v4l2_g_fmt,
>>>  	.vidioc_s_fmt_vid_cap_mplane = cio2_v4l2_s_fmt,
>>>  	.vidioc_try_fmt_vid_cap_mplane = cio2_v4l2_try_fmt,
>>> diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c
>>> index c757f5d98bcc..9e2914d3d8f9 100644
>>> --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c
>>> +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c
>>> @@ -562,8 +562,8 @@ static int gsc_m2m_s_selection(struct file *file, void *fh,
>>>  
>>>  static const struct v4l2_ioctl_ops gsc_m2m_ioctl_ops = {
>>>  	.vidioc_querycap		= gsc_m2m_querycap,
>>> -	.vidioc_enum_fmt_vid_cap_mplane	= gsc_m2m_enum_fmt_mplane,
>>> -	.vidioc_enum_fmt_vid_out_mplane	= gsc_m2m_enum_fmt_mplane,
>>> +	.vidioc_enum_fmt_vid_cap	= gsc_m2m_enum_fmt_mplane,
>>> +	.vidioc_enum_fmt_vid_out	= gsc_m2m_enum_fmt_mplane,  
>>
>> Please rename the functions as well, dropping the _mplane suffix. Here and in
>> the other drivers.
>>
> 
> Okay, I'm remove those _mplane suffix.
> 
>>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>>> index f6d663934648..97ba365218fb 100644
>>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>>> @@ -1380,6 +1380,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>>>  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>>  				struct file *file, void *fh, void *arg)
>>>  {
>>> +	struct video_device *vdev = video_devdata(file);
>>>  	struct v4l2_fmtdesc *p = arg;
>>>  	int ret = check_fmt(file, p->type);
>>>  
>>> @@ -1389,30 +1390,30 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>>  
>>>  	switch (p->type) {
>>>  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
>>> +	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
>>> +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=  
>>
>> Hmm. I am not sure if all drivers that set V4L2_CAP_VIDEO_CAPTURE_MPLANE also
>> fill in vdev->device_caps. While filling in vdev->device_caps is required for
>> new drivers, older drivers often don't do this.
>>
>> You would have to check all drivers that set V4L2_CAP_VIDEO_CAPTURE/OUTPUT_MPLANE
>> to verify that they also set vdev->device_caps. I'm fairly certain the Samsung
>> drivers don't fill this in.
> 
> I'll check that and fix those that don't set the flag. Or do you have
> another solution to handle that case?
> 

There might be other solutions as well, but regardless of that it would be a very
good idea for other reasons as well if all MPLANE drivers would fill in vdev->device_caps.

Regards,

	Hans
Boris Brezillon April 12, 2019, 8:25 a.m. UTC | #4
On Thu, 11 Apr 2019 12:38:06 +0200
Hans Verkuil <hverkuil@xs4all.nl> wrote:

> >>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> >>> index f6d663934648..97ba365218fb 100644
> >>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> >>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> >>> @@ -1380,6 +1380,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> >>>  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> >>>  				struct file *file, void *fh, void *arg)
> >>>  {
> >>> +	struct video_device *vdev = video_devdata(file);
> >>>  	struct v4l2_fmtdesc *p = arg;
> >>>  	int ret = check_fmt(file, p->type);
> >>>  
> >>> @@ -1389,30 +1390,30 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> >>>  
> >>>  	switch (p->type) {
> >>>  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> >>> +	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> >>> +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=    
> >>
> >> Hmm. I am not sure if all drivers that set V4L2_CAP_VIDEO_CAPTURE_MPLANE also
> >> fill in vdev->device_caps. While filling in vdev->device_caps is required for
> >> new drivers, older drivers often don't do this.
> >>
> >> You would have to check all drivers that set V4L2_CAP_VIDEO_CAPTURE/OUTPUT_MPLANE
> >> to verify that they also set vdev->device_caps. I'm fairly certain the Samsung
> >> drivers don't fill this in.  
> > 
> > I'll check that and fix those that don't set the flag. Or do you have
> > another solution to handle that case?
> >   
> 
> There might be other solutions as well, but regardless of that it would be a very
> good idea for other reasons as well if all MPLANE drivers would fill in vdev->device_caps.

Looks like all drivers except fimc-isp-video.c have the _MPLANE caps
properly set/reported.
Boris Brezillon April 12, 2019, 8:33 a.m. UTC | #5
On Fri, 12 Apr 2019 10:25:26 +0200
Boris Brezillon <boris.brezillon@collabora.com> wrote:

> On Thu, 11 Apr 2019 12:38:06 +0200
> Hans Verkuil <hverkuil@xs4all.nl> wrote:
> 
> > >>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > >>> index f6d663934648..97ba365218fb 100644
> > >>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > >>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > >>> @@ -1380,6 +1380,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> > >>>  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> > >>>  				struct file *file, void *fh, void *arg)
> > >>>  {
> > >>> +	struct video_device *vdev = video_devdata(file);
> > >>>  	struct v4l2_fmtdesc *p = arg;
> > >>>  	int ret = check_fmt(file, p->type);
> > >>>  
> > >>> @@ -1389,30 +1390,30 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> > >>>  
> > >>>  	switch (p->type) {
> > >>>  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> > >>> +	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> > >>> +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=      
> > >>
> > >> Hmm. I am not sure if all drivers that set V4L2_CAP_VIDEO_CAPTURE_MPLANE also
> > >> fill in vdev->device_caps. While filling in vdev->device_caps is required for
> > >> new drivers, older drivers often don't do this.
> > >>
> > >> You would have to check all drivers that set V4L2_CAP_VIDEO_CAPTURE/OUTPUT_MPLANE
> > >> to verify that they also set vdev->device_caps. I'm fairly certain the Samsung
> > >> drivers don't fill this in.    
> > > 
> > > I'll check that and fix those that don't set the flag. Or do you have
> > > another solution to handle that case?
> > >     
> > 
> > There might be other solutions as well, but regardless of that it would be a very
> > good idea for other reasons as well if all MPLANE drivers would fill in vdev->device_caps.  
> 
> Looks like all drivers except fimc-isp-video.c have the _MPLANE caps
> properly set/reported.

Oh, and fimc-lite too.
Hans Verkuil April 12, 2019, 9:36 a.m. UTC | #6
On 4/12/19 10:25 AM, Boris Brezillon wrote:
> On Thu, 11 Apr 2019 12:38:06 +0200
> Hans Verkuil <hverkuil@xs4all.nl> wrote:
> 
>>>>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>>>>> index f6d663934648..97ba365218fb 100644
>>>>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>>>>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>>>>> @@ -1380,6 +1380,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>>>>>  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>>>>  				struct file *file, void *fh, void *arg)
>>>>>  {
>>>>> +	struct video_device *vdev = video_devdata(file);
>>>>>  	struct v4l2_fmtdesc *p = arg;
>>>>>  	int ret = check_fmt(file, p->type);
>>>>>  
>>>>> @@ -1389,30 +1390,30 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>>>>  
>>>>>  	switch (p->type) {
>>>>>  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
>>>>> +	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
>>>>> +		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=    
>>>>
>>>> Hmm. I am not sure if all drivers that set V4L2_CAP_VIDEO_CAPTURE_MPLANE also
>>>> fill in vdev->device_caps. While filling in vdev->device_caps is required for
>>>> new drivers, older drivers often don't do this.
>>>>
>>>> You would have to check all drivers that set V4L2_CAP_VIDEO_CAPTURE/OUTPUT_MPLANE
>>>> to verify that they also set vdev->device_caps. I'm fairly certain the Samsung
>>>> drivers don't fill this in.  
>>>
>>> I'll check that and fix those that don't set the flag. Or do you have
>>> another solution to handle that case?
>>>   
>>
>> There might be other solutions as well, but regardless of that it would be a very
>> good idea for other reasons as well if all MPLANE drivers would fill in vdev->device_caps.
> 
> Looks like all drivers except fimc-isp-video.c have the _MPLANE caps
> properly set/reported.
> 

That's not enough, they need to fill in vdev->device_caps as well. I.e., they shouldn't
fill in device_caps and capabilities in their querycap implementation, instead they
should just set device_caps in the struct video_device. That way the V4L2 core will
know the video device capabilities since it is now stored in an internal structure.

Regards,

	Hans
diff mbox series

Patch

diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.c b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
index f8020ebe9f05..c3b3af3c3b2f 100644
--- a/drivers/media/pci/intel/ipu3/ipu3-cio2.c
+++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.c
@@ -1174,7 +1174,7 @@  static const struct v4l2_file_operations cio2_v4l2_fops = {
 
 static const struct v4l2_ioctl_ops cio2_v4l2_ioctl_ops = {
 	.vidioc_querycap = cio2_v4l2_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = cio2_v4l2_enum_fmt,
+	.vidioc_enum_fmt_vid_cap = cio2_v4l2_enum_fmt,
 	.vidioc_g_fmt_vid_cap_mplane = cio2_v4l2_g_fmt,
 	.vidioc_s_fmt_vid_cap_mplane = cio2_v4l2_s_fmt,
 	.vidioc_try_fmt_vid_cap_mplane = cio2_v4l2_try_fmt,
diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c
index c757f5d98bcc..9e2914d3d8f9 100644
--- a/drivers/media/platform/exynos-gsc/gsc-m2m.c
+++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c
@@ -562,8 +562,8 @@  static int gsc_m2m_s_selection(struct file *file, void *fh,
 
 static const struct v4l2_ioctl_ops gsc_m2m_ioctl_ops = {
 	.vidioc_querycap		= gsc_m2m_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane	= gsc_m2m_enum_fmt_mplane,
-	.vidioc_enum_fmt_vid_out_mplane	= gsc_m2m_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_cap	= gsc_m2m_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_out	= gsc_m2m_enum_fmt_mplane,
 	.vidioc_g_fmt_vid_cap_mplane	= gsc_m2m_g_fmt_mplane,
 	.vidioc_g_fmt_vid_out_mplane	= gsc_m2m_g_fmt_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= gsc_m2m_try_fmt_mplane,
diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c
index 3e9fcf4f8a13..649c3a5b4d03 100644
--- a/drivers/media/platform/exynos4-is/fimc-capture.c
+++ b/drivers/media/platform/exynos4-is/fimc-capture.c
@@ -1361,7 +1361,7 @@  static int fimc_cap_s_selection(struct file *file, void *fh,
 static const struct v4l2_ioctl_ops fimc_capture_ioctl_ops = {
 	.vidioc_querycap		= fimc_cap_querycap,
 
-	.vidioc_enum_fmt_vid_cap_mplane	= fimc_cap_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_cap	= fimc_cap_enum_fmt_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= fimc_cap_try_fmt_mplane,
 	.vidioc_s_fmt_vid_cap_mplane	= fimc_cap_s_fmt_mplane,
 	.vidioc_g_fmt_vid_cap_mplane	= fimc_cap_g_fmt_mplane,
diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c
index bb35a2017f21..ffe10a2ea6b0 100644
--- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
+++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
@@ -551,7 +551,7 @@  static int isp_video_reqbufs(struct file *file, void *priv,
 
 static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
 	.vidioc_querycap		= isp_video_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane	= isp_video_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_cap	= isp_video_enum_fmt_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= isp_video_try_fmt_mplane,
 	.vidioc_s_fmt_vid_cap_mplane	= isp_video_s_fmt_mplane,
 	.vidioc_g_fmt_vid_cap_mplane	= isp_video_g_fmt_mplane,
diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c
index 96f0a8a0dcae..b9c537d38a45 100644
--- a/drivers/media/platform/exynos4-is/fimc-lite.c
+++ b/drivers/media/platform/exynos4-is/fimc-lite.c
@@ -954,7 +954,7 @@  static int fimc_lite_s_selection(struct file *file, void *fh,
 
 static const struct v4l2_ioctl_ops fimc_lite_ioctl_ops = {
 	.vidioc_querycap		= fimc_lite_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane	= fimc_lite_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_cap	= fimc_lite_enum_fmt_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= fimc_lite_try_fmt_mplane,
 	.vidioc_s_fmt_vid_cap_mplane	= fimc_lite_s_fmt_mplane,
 	.vidioc_g_fmt_vid_cap_mplane	= fimc_lite_g_fmt_mplane,
diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media/platform/exynos4-is/fimc-m2m.c
index 61c8177409cf..278ab067e30f 100644
--- a/drivers/media/platform/exynos4-is/fimc-m2m.c
+++ b/drivers/media/platform/exynos4-is/fimc-m2m.c
@@ -533,8 +533,8 @@  static int fimc_m2m_s_selection(struct file *file, void *fh,
 
 static const struct v4l2_ioctl_ops fimc_m2m_ioctl_ops = {
 	.vidioc_querycap		= fimc_m2m_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane	= fimc_m2m_enum_fmt_mplane,
-	.vidioc_enum_fmt_vid_out_mplane	= fimc_m2m_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_cap	= fimc_m2m_enum_fmt_mplane,
+	.vidioc_enum_fmt_vid_out	= fimc_m2m_enum_fmt_mplane,
 	.vidioc_g_fmt_vid_cap_mplane	= fimc_m2m_g_fmt_mplane,
 	.vidioc_g_fmt_vid_out_mplane	= fimc_m2m_g_fmt_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= fimc_m2m_try_fmt_mplane,
diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
index f761e4d8bf2a..3b199662cb34 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
@@ -536,8 +536,8 @@  static int mtk_jpeg_qbuf(struct file *file, void *priv, struct v4l2_buffer *buf)
 
 static const struct v4l2_ioctl_ops mtk_jpeg_ioctl_ops = {
 	.vidioc_querycap                = mtk_jpeg_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = mtk_jpeg_enum_fmt_vid_cap,
-	.vidioc_enum_fmt_vid_out_mplane = mtk_jpeg_enum_fmt_vid_out,
+	.vidioc_enum_fmt_vid_cap	= mtk_jpeg_enum_fmt_vid_cap,
+	.vidioc_enum_fmt_vid_out	= mtk_jpeg_enum_fmt_vid_out,
 	.vidioc_try_fmt_vid_cap_mplane	= mtk_jpeg_try_fmt_vid_cap_mplane,
 	.vidioc_try_fmt_vid_out_mplane	= mtk_jpeg_try_fmt_vid_out_mplane,
 	.vidioc_g_fmt_vid_cap_mplane    = mtk_jpeg_g_fmt_vid_mplane,
diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
index 7d15c06e9db9..f094d1030331 100644
--- a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
+++ b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
@@ -935,8 +935,8 @@  static int mtk_mdp_m2m_s_selection(struct file *file, void *fh,
 
 static const struct v4l2_ioctl_ops mtk_mdp_m2m_ioctl_ops = {
 	.vidioc_querycap		= mtk_mdp_m2m_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane	= mtk_mdp_m2m_enum_fmt_mplane_vid_cap,
-	.vidioc_enum_fmt_vid_out_mplane	= mtk_mdp_m2m_enum_fmt_mplane_vid_out,
+	.vidioc_enum_fmt_vid_cap	= mtk_mdp_m2m_enum_fmt_mplane_vid_cap,
+	.vidioc_enum_fmt_vid_out	= mtk_mdp_m2m_enum_fmt_mplane_vid_out,
 	.vidioc_g_fmt_vid_cap_mplane	= mtk_mdp_m2m_g_fmt_mplane,
 	.vidioc_g_fmt_vid_out_mplane	= mtk_mdp_m2m_g_fmt_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= mtk_mdp_m2m_try_fmt_mplane,
diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
index d022c65bb34c..1d922b8dfb6b 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
@@ -1444,8 +1444,8 @@  const struct v4l2_ioctl_ops mtk_vdec_ioctl_ops = {
 
 	.vidioc_create_bufs		= v4l2_m2m_ioctl_create_bufs,
 
-	.vidioc_enum_fmt_vid_cap_mplane	= vidioc_vdec_enum_fmt_vid_cap_mplane,
-	.vidioc_enum_fmt_vid_out_mplane	= vidioc_vdec_enum_fmt_vid_out_mplane,
+	.vidioc_enum_fmt_vid_cap	= vidioc_vdec_enum_fmt_vid_cap_mplane,
+	.vidioc_enum_fmt_vid_out	= vidioc_vdec_enum_fmt_vid_out_mplane,
 	.vidioc_enum_framesizes	= vidioc_enum_framesizes,
 
 	.vidioc_querycap		= vidioc_vdec_querycap,
diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
index c6b48b5925fb..6ee7ced96d84 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c
@@ -725,8 +725,8 @@  const struct v4l2_ioctl_ops mtk_venc_ioctl_ops = {
 	.vidioc_dqbuf			= vidioc_venc_dqbuf,
 
 	.vidioc_querycap		= vidioc_venc_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
+	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid_cap_mplane,
+	.vidioc_enum_fmt_vid_out	= vidioc_enum_fmt_vid_out_mplane,
 	.vidioc_enum_framesizes		= vidioc_enum_framesizes,
 
 	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap_mplane,
diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c
index 58aebe7114cd..1d50dfbbb762 100644
--- a/drivers/media/platform/qcom/camss/camss-video.c
+++ b/drivers/media/platform/qcom/camss/camss-video.c
@@ -703,7 +703,7 @@  static int video_s_input(struct file *file, void *fh, unsigned int input)
 
 static const struct v4l2_ioctl_ops msm_vid_ioctl_ops = {
 	.vidioc_querycap		= video_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane	= video_enum_fmt,
+	.vidioc_enum_fmt_vid_cap	= video_enum_fmt,
 	.vidioc_g_fmt_vid_cap_mplane	= video_g_fmt,
 	.vidioc_s_fmt_vid_cap_mplane	= video_s_fmt,
 	.vidioc_try_fmt_vid_cap_mplane	= video_try_fmt,
diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 282de21cf2e1..2a47b9b8c5bc 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -491,8 +491,8 @@  vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd)
 
 static const struct v4l2_ioctl_ops vdec_ioctl_ops = {
 	.vidioc_querycap = vdec_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = vdec_enum_fmt,
-	.vidioc_enum_fmt_vid_out_mplane = vdec_enum_fmt,
+	.vidioc_enum_fmt_vid_cap = vdec_enum_fmt,
+	.vidioc_enum_fmt_vid_out = vdec_enum_fmt,
 	.vidioc_s_fmt_vid_cap_mplane = vdec_s_fmt,
 	.vidioc_s_fmt_vid_out_mplane = vdec_s_fmt,
 	.vidioc_g_fmt_vid_cap_mplane = vdec_g_fmt,
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index 32cff294582f..406a47923996 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -616,8 +616,8 @@  static int venc_enum_frameintervals(struct file *file, void *fh,
 
 static const struct v4l2_ioctl_ops venc_ioctl_ops = {
 	.vidioc_querycap = venc_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = venc_enum_fmt,
-	.vidioc_enum_fmt_vid_out_mplane = venc_enum_fmt,
+	.vidioc_enum_fmt_vid_cap = venc_enum_fmt,
+	.vidioc_enum_fmt_vid_out = venc_enum_fmt,
 	.vidioc_s_fmt_vid_cap_mplane = venc_s_fmt,
 	.vidioc_s_fmt_vid_out_mplane = venc_s_fmt,
 	.vidioc_g_fmt_vid_cap_mplane = venc_g_fmt,
diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/rcar_fdp1.c
index 6bda1eee9170..6e6471c37984 100644
--- a/drivers/media/platform/rcar_fdp1.c
+++ b/drivers/media/platform/rcar_fdp1.c
@@ -1730,8 +1730,8 @@  static const char * const fdp1_ctrl_deint_menu[] = {
 static const struct v4l2_ioctl_ops fdp1_ioctl_ops = {
 	.vidioc_querycap	= fdp1_vidioc_querycap,
 
-	.vidioc_enum_fmt_vid_cap_mplane = fdp1_enum_fmt_vid_cap,
-	.vidioc_enum_fmt_vid_out_mplane = fdp1_enum_fmt_vid_out,
+	.vidioc_enum_fmt_vid_cap	= fdp1_enum_fmt_vid_cap,
+	.vidioc_enum_fmt_vid_out	= fdp1_enum_fmt_vid_out,
 	.vidioc_g_fmt_vid_cap_mplane	= fdp1_g_fmt,
 	.vidioc_g_fmt_vid_out_mplane	= fdp1_g_fmt,
 	.vidioc_try_fmt_vid_cap_mplane	= fdp1_try_fmt,
diff --git a/drivers/media/platform/rcar_jpu.c b/drivers/media/platform/rcar_jpu.c
index 1dfd2eb65920..a34f4e6b2f98 100644
--- a/drivers/media/platform/rcar_jpu.c
+++ b/drivers/media/platform/rcar_jpu.c
@@ -948,8 +948,8 @@  static int jpu_streamon(struct file *file, void *priv, enum v4l2_buf_type type)
 static const struct v4l2_ioctl_ops jpu_ioctl_ops = {
 	.vidioc_querycap		= jpu_querycap,
 
-	.vidioc_enum_fmt_vid_cap_mplane = jpu_enum_fmt_cap,
-	.vidioc_enum_fmt_vid_out_mplane = jpu_enum_fmt_out,
+	.vidioc_enum_fmt_vid_cap	= jpu_enum_fmt_cap,
+	.vidioc_enum_fmt_vid_out	= jpu_enum_fmt_out,
 	.vidioc_g_fmt_vid_cap_mplane	= jpu_g_fmt,
 	.vidioc_g_fmt_vid_out_mplane	= jpu_g_fmt,
 	.vidioc_try_fmt_vid_cap_mplane	= jpu_try_fmt,
diff --git a/drivers/media/platform/renesas-ceu.c b/drivers/media/platform/renesas-ceu.c
index 150196f7cf96..57d0c0f9fa4b 100644
--- a/drivers/media/platform/renesas-ceu.c
+++ b/drivers/media/platform/renesas-ceu.c
@@ -1339,7 +1339,7 @@  static int ceu_enum_frameintervals(struct file *file, void *fh,
 static const struct v4l2_ioctl_ops ceu_ioctl_ops = {
 	.vidioc_querycap		= ceu_querycap,
 
-	.vidioc_enum_fmt_vid_cap_mplane	= ceu_enum_fmt_vid_cap,
+	.vidioc_enum_fmt_vid_cap	= ceu_enum_fmt_vid_cap,
 	.vidioc_try_fmt_vid_cap_mplane	= ceu_try_fmt_vid_cap,
 	.vidioc_s_fmt_vid_cap_mplane	= ceu_s_fmt_vid_cap,
 	.vidioc_g_fmt_vid_cap_mplane	= ceu_g_fmt_vid_cap,
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
index e111f9c47179..b270ff59c5e3 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
@@ -887,8 +887,8 @@  static int vidioc_subscribe_event(struct v4l2_fh *fh,
 /* v4l2_ioctl_ops */
 static const struct v4l2_ioctl_ops s5p_mfc_dec_ioctl_ops = {
 	.vidioc_querycap = vidioc_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
+	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap_mplane,
+	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out_mplane,
 	.vidioc_g_fmt_vid_cap_mplane = vidioc_g_fmt,
 	.vidioc_g_fmt_vid_out_mplane = vidioc_g_fmt,
 	.vidioc_try_fmt_vid_cap_mplane = vidioc_try_fmt,
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
index 8fcf627dedfb..2fa16ee9c7b0 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
@@ -2343,8 +2343,8 @@  static int vidioc_subscribe_event(struct v4l2_fh *fh,
 
 static const struct v4l2_ioctl_ops s5p_mfc_enc_ioctl_ops = {
 	.vidioc_querycap = vidioc_querycap,
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
+	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap_mplane,
+	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out_mplane,
 	.vidioc_g_fmt_vid_cap_mplane = vidioc_g_fmt,
 	.vidioc_g_fmt_vid_out_mplane = vidioc_g_fmt,
 	.vidioc_try_fmt_vid_cap_mplane = vidioc_try_fmt,
diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform/ti-vpe/vpe.c
index 207e7e76c048..ddfae9f4fbfa 100644
--- a/drivers/media/platform/ti-vpe/vpe.c
+++ b/drivers/media/platform/ti-vpe/vpe.c
@@ -1973,12 +1973,12 @@  static const struct v4l2_ctrl_ops vpe_ctrl_ops = {
 static const struct v4l2_ioctl_ops vpe_ioctl_ops = {
 	.vidioc_querycap		= vpe_querycap,
 
-	.vidioc_enum_fmt_vid_cap_mplane	= vpe_enum_fmt,
+	.vidioc_enum_fmt_vid_cap	= vpe_enum_fmt,
 	.vidioc_g_fmt_vid_cap_mplane	= vpe_g_fmt,
 	.vidioc_try_fmt_vid_cap_mplane	= vpe_try_fmt,
 	.vidioc_s_fmt_vid_cap_mplane	= vpe_s_fmt,
 
-	.vidioc_enum_fmt_vid_out_mplane	= vpe_enum_fmt,
+	.vidioc_enum_fmt_vid_out	= vpe_enum_fmt,
 	.vidioc_g_fmt_vid_out_mplane	= vpe_g_fmt,
 	.vidioc_try_fmt_vid_out_mplane	= vpe_try_fmt,
 	.vidioc_s_fmt_vid_out_mplane	= vpe_s_fmt,
diff --git a/drivers/media/platform/vicodec/vicodec-core.c b/drivers/media/platform/vicodec/vicodec-core.c
index d7636fe9e174..fda726e43d60 100644
--- a/drivers/media/platform/vicodec/vicodec-core.c
+++ b/drivers/media/platform/vicodec/vicodec-core.c
@@ -1140,7 +1140,6 @@  static const struct v4l2_ioctl_ops vicodec_ioctl_ops = {
 	.vidioc_try_fmt_vid_cap	= vidioc_try_fmt_vid_cap,
 	.vidioc_s_fmt_vid_cap	= vidioc_s_fmt_vid_cap,
 
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap,
 	.vidioc_g_fmt_vid_cap_mplane	= vidioc_g_fmt_vid_cap,
 	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap,
 	.vidioc_s_fmt_vid_cap_mplane	= vidioc_s_fmt_vid_cap,
@@ -1150,7 +1149,6 @@  static const struct v4l2_ioctl_ops vicodec_ioctl_ops = {
 	.vidioc_try_fmt_vid_out	= vidioc_try_fmt_vid_out,
 	.vidioc_s_fmt_vid_out	= vidioc_s_fmt_vid_out,
 
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out,
 	.vidioc_g_fmt_vid_out_mplane	= vidioc_g_fmt_vid_out,
 	.vidioc_try_fmt_vid_out_mplane	= vidioc_try_fmt_vid_out,
 	.vidioc_s_fmt_vid_out_mplane	= vidioc_s_fmt_vid_out,
diff --git a/drivers/media/platform/vivid/vivid-core.c b/drivers/media/platform/vivid/vivid-core.c
index 342e0e6c103b..345adde47789 100644
--- a/drivers/media/platform/vivid/vivid-core.c
+++ b/drivers/media/platform/vivid/vivid-core.c
@@ -500,20 +500,18 @@  static const struct v4l2_file_operations vivid_radio_fops = {
 static const struct v4l2_ioctl_ops vivid_ioctl_ops = {
 	.vidioc_querycap		= vidioc_querycap,
 
-	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid,
+	.vidioc_enum_fmt_vid_cap	= vivid_enum_fmt_vid,
 	.vidioc_g_fmt_vid_cap		= vidioc_g_fmt_vid_cap,
 	.vidioc_try_fmt_vid_cap		= vidioc_try_fmt_vid_cap,
 	.vidioc_s_fmt_vid_cap		= vidioc_s_fmt_vid_cap,
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_mplane,
 	.vidioc_g_fmt_vid_cap_mplane	= vidioc_g_fmt_vid_cap_mplane,
 	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap_mplane,
 	.vidioc_s_fmt_vid_cap_mplane	= vidioc_s_fmt_vid_cap_mplane,
 
-	.vidioc_enum_fmt_vid_out	= vidioc_enum_fmt_vid,
+	.vidioc_enum_fmt_vid_out	= vivid_enum_fmt_vid,
 	.vidioc_g_fmt_vid_out		= vidioc_g_fmt_vid_out,
 	.vidioc_try_fmt_vid_out		= vidioc_try_fmt_vid_out,
 	.vidioc_s_fmt_vid_out		= vidioc_s_fmt_vid_out,
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_mplane,
 	.vidioc_g_fmt_vid_out_mplane	= vidioc_g_fmt_vid_out_mplane,
 	.vidioc_try_fmt_vid_out_mplane	= vidioc_try_fmt_vid_out_mplane,
 	.vidioc_s_fmt_vid_out_mplane	= vidioc_s_fmt_vid_out_mplane,
diff --git a/drivers/media/platform/vivid/vivid-vid-common.c b/drivers/media/platform/vivid/vivid-vid-common.c
index 74b83bcc6119..9307ce1cdd16 100644
--- a/drivers/media/platform/vivid/vivid-vid-common.c
+++ b/drivers/media/platform/vivid/vivid-vid-common.c
@@ -797,26 +797,6 @@  int vivid_enum_fmt_vid(struct file *file, void  *priv,
 	return 0;
 }
 
-int vidioc_enum_fmt_vid_mplane(struct file *file, void  *priv,
-					struct v4l2_fmtdesc *f)
-{
-	struct vivid_dev *dev = video_drvdata(file);
-
-	if (!dev->multiplanar)
-		return -ENOTTY;
-	return vivid_enum_fmt_vid(file, priv, f);
-}
-
-int vidioc_enum_fmt_vid(struct file *file, void  *priv,
-					struct v4l2_fmtdesc *f)
-{
-	struct vivid_dev *dev = video_drvdata(file);
-
-	if (dev->multiplanar)
-		return -ENOTTY;
-	return vivid_enum_fmt_vid(file, priv, f);
-}
-
 int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)
 {
 	struct vivid_dev *dev = video_drvdata(file);
diff --git a/drivers/media/platform/vivid/vivid-vid-common.h b/drivers/media/platform/vivid/vivid-vid-common.h
index 29b6c0b40a1b..d908d9725283 100644
--- a/drivers/media/platform/vivid/vivid-vid-common.h
+++ b/drivers/media/platform/vivid/vivid-vid-common.h
@@ -28,8 +28,6 @@  void vivid_send_source_change(struct vivid_dev *dev, unsigned type);
 int vivid_vid_adjust_sel(unsigned flags, struct v4l2_rect *r);
 
 int vivid_enum_fmt_vid(struct file *file, void  *priv, struct v4l2_fmtdesc *f);
-int vidioc_enum_fmt_vid_mplane(struct file *file, void  *priv, struct v4l2_fmtdesc *f);
-int vidioc_enum_fmt_vid(struct file *file, void  *priv, struct v4l2_fmtdesc *f);
 int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id);
 int vidioc_g_dv_timings(struct file *file, void *_fh, struct v4l2_dv_timings *timings);
 int vidioc_enum_dv_timings(struct file *file, void *_fh, struct v4l2_enum_dv_timings *timings);
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index d7528f82a66a..29946a2b2752 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -593,11 +593,9 @@  static void determine_valid_ioctls(struct video_device *vdev)
 	if (is_vid || is_tch) {
 		/* video and metadata specific ioctls */
 		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
-			       ops->vidioc_enum_fmt_vid_cap_mplane ||
 			       ops->vidioc_enum_fmt_vid_overlay ||
 			       ops->vidioc_enum_fmt_meta_cap)) ||
 		    (is_tx && (ops->vidioc_enum_fmt_vid_out ||
-			       ops->vidioc_enum_fmt_vid_out_mplane ||
 			       ops->vidioc_enum_fmt_meta_out)))
 			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index f6d663934648..97ba365218fb 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1380,6 +1380,7 @@  static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
 				struct file *file, void *fh, void *arg)
 {
+	struct video_device *vdev = video_devdata(file);
 	struct v4l2_fmtdesc *p = arg;
 	int ret = check_fmt(file, p->type);
 
@@ -1389,30 +1390,30 @@  static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
 
 	switch (p->type) {
 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
+	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
+		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE) !=
+		    (p->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE))
+			break;
+
 		if (unlikely(!ops->vidioc_enum_fmt_vid_cap))
 			break;
 		ret = ops->vidioc_enum_fmt_vid_cap(file, fh, arg);
 		break;
-	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
-		if (unlikely(!ops->vidioc_enum_fmt_vid_cap_mplane))
-			break;
-		ret = ops->vidioc_enum_fmt_vid_cap_mplane(file, fh, arg);
-		break;
 	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
 		if (unlikely(!ops->vidioc_enum_fmt_vid_overlay))
 			break;
 		ret = ops->vidioc_enum_fmt_vid_overlay(file, fh, arg);
 		break;
 	case V4L2_BUF_TYPE_VIDEO_OUTPUT:
+	case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
+		if (!!(vdev->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE) !=
+		    (p->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE))
+			break;
+
 		if (unlikely(!ops->vidioc_enum_fmt_vid_out))
 			break;
 		ret = ops->vidioc_enum_fmt_vid_out(file, fh, arg);
 		break;
-	case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
-		if (unlikely(!ops->vidioc_enum_fmt_vid_out_mplane))
-			break;
-		ret = ops->vidioc_enum_fmt_vid_out_mplane(file, fh, arg);
-		break;
 	case V4L2_BUF_TYPE_SDR_CAPTURE:
 		if (unlikely(!ops->vidioc_enum_fmt_sdr_cap))
 			break;
diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
index 9c0352b193a7..92240baddca4 100644
--- a/drivers/staging/media/ipu3/ipu3-v4l2.c
+++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
@@ -959,12 +959,12 @@  static const struct v4l2_file_operations imgu_v4l2_fops = {
 static const struct v4l2_ioctl_ops imgu_v4l2_ioctl_ops = {
 	.vidioc_querycap = imgu_vidioc_querycap,
 
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap,
+	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
 	.vidioc_g_fmt_vid_cap_mplane = imgu_vidioc_g_fmt,
 	.vidioc_s_fmt_vid_cap_mplane = imgu_vidioc_s_fmt,
 	.vidioc_try_fmt_vid_cap_mplane = imgu_vidioc_try_fmt,
 
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out,
+	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out,
 	.vidioc_g_fmt_vid_out_mplane = imgu_vidioc_g_fmt,
 	.vidioc_s_fmt_vid_out_mplane = imgu_vidioc_s_fmt,
 	.vidioc_try_fmt_vid_out_mplane = imgu_vidioc_try_fmt,
diff --git a/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c b/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c
index ab0fb2053620..f42d8325fd33 100644
--- a/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c
+++ b/drivers/staging/media/rockchip/vpu/rockchip_vpu_enc.c
@@ -493,8 +493,8 @@  const struct v4l2_ioctl_ops rockchip_vpu_enc_ioctl_ops = {
 	.vidioc_s_fmt_vid_cap_mplane = vidioc_s_fmt_cap_mplane,
 	.vidioc_g_fmt_vid_out_mplane = vidioc_g_fmt_out_mplane,
 	.vidioc_g_fmt_vid_cap_mplane = vidioc_g_fmt_cap_mplane,
-	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_out_mplane,
-	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_cap_mplane,
+	.vidioc_enum_fmt_vid_out = vidioc_enum_fmt_vid_out_mplane,
+	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap_mplane,
 
 	.vidioc_reqbufs = v4l2_m2m_ioctl_reqbufs,
 	.vidioc_querybuf = v4l2_m2m_ioctl_querybuf,
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
index 8533ece5026e..400f2e46c108 100644
--- a/include/media/v4l2-ioctl.h
+++ b/include/media/v4l2-ioctl.h
@@ -26,19 +26,13 @@  struct v4l2_fh;
  *	:ref:`VIDIOC_QUERYCAP <vidioc_querycap>` ioctl
  * @vidioc_enum_fmt_vid_cap: pointer to the function that implements
  *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
- *	for video capture in single plane mode
+ *	for video capture in single and multi plane mode
  * @vidioc_enum_fmt_vid_overlay: pointer to the function that implements
  *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  *	for video overlay
  * @vidioc_enum_fmt_vid_out: pointer to the function that implements
  *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
- *	for video output in single plane mode
- * @vidioc_enum_fmt_vid_cap_mplane: pointer to the function that implements
- *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
- *	for video capture in multiplane mode
- * @vidioc_enum_fmt_vid_out_mplane: pointer to the function that implements
- *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
- *	for video output in multiplane mode
+ *	for video output in single and multi plane mode
  * @vidioc_enum_fmt_sdr_cap: pointer to the function that implements
  *	:ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  *	for Software Defined Radio capture
@@ -313,10 +307,6 @@  struct v4l2_ioctl_ops {
 					   struct v4l2_fmtdesc *f);
 	int (*vidioc_enum_fmt_vid_out)(struct file *file, void *fh,
 				       struct v4l2_fmtdesc *f);
-	int (*vidioc_enum_fmt_vid_cap_mplane)(struct file *file, void *fh,
-					      struct v4l2_fmtdesc *f);
-	int (*vidioc_enum_fmt_vid_out_mplane)(struct file *file, void *fh,
-					      struct v4l2_fmtdesc *f);
 	int (*vidioc_enum_fmt_sdr_cap)(struct file *file, void *fh,
 				       struct v4l2_fmtdesc *f);
 	int (*vidioc_enum_fmt_sdr_out)(struct file *file, void *fh,