Re: [PATCH v4 03/11] media: imx8-isi: Support mbus_code filtering in format enumeration
From: Frank Li
Date: Tue Sep 29 2026 - 10:26:58 EST
On Tue, Sep 29, 2026 at 04:52:24PM +0800, Guoniu Zhou wrote:
> Extend mxc_isi_format_enum() to accept a v4l2_fmtdesc pointer instead
> of a plain index, so it can filter formats by mbus_code when set. This
> is used by the capture path to enumerate only formats compatible with
> the connected subdev output.
>
> For the M2M device, the V4L2 framework clears mbus_code to 0 for
> devices without V4L2_CAP_IO_MC (v4l2-ioctl.c), so this change has no
> effect on M2M format enumeration.
>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@xxxxxxxxxxx>
> ---
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> Changes in v4:
> - New patch
> ---
> drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 2 +-
> drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c | 2 +-
> drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 6 +++++-
> 3 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> index 58b47335afc7..a30633a7e2e9 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> @@ -322,7 +322,7 @@ mxc_isi_bus_format_by_index(unsigned int index, unsigned int pad);
> const struct mxc_isi_format_info *
> mxc_isi_format_by_fourcc(u32 fourcc, enum mxc_isi_video_type type);
> const struct mxc_isi_format_info *
> -mxc_isi_format_enum(unsigned int index, enum mxc_isi_video_type type);
> +mxc_isi_format_enum(const struct v4l2_fmtdesc *f, enum mxc_isi_video_type type);
> const struct mxc_isi_format_info *
> mxc_isi_format_try(struct mxc_isi_pipe *pipe, struct v4l2_pix_format_mplane *pix,
> enum mxc_isi_video_type type);
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
> index b729eecad0fe..1178947bb548 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
> @@ -492,7 +492,7 @@ static int mxc_isi_m2m_enum_fmt_vid(struct file *file, void *fh,
> MXC_ISI_VIDEO_M2M_OUT : MXC_ISI_VIDEO_M2M_CAP;
> const struct mxc_isi_format_info *info;
>
> - info = mxc_isi_format_enum(f->index, type);
> + info = mxc_isi_format_enum(f, type);
> if (!info)
> return -EINVAL;
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
> index f45c2aae59ce..0d87a1082727 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
> @@ -482,13 +482,17 @@ mxc_isi_format_by_fourcc(u32 fourcc, enum mxc_isi_video_type type)
> }
>
> const struct mxc_isi_format_info *
> -mxc_isi_format_enum(unsigned int index, enum mxc_isi_video_type type)
> +mxc_isi_format_enum(const struct v4l2_fmtdesc *f, enum mxc_isi_video_type type)
> {
> + unsigned int index = f->index;
> unsigned int i;
>
> for (i = 0; i < ARRAY_SIZE(mxc_isi_formats); i++) {
> const struct mxc_isi_format_info *fmt = &mxc_isi_formats[i];
>
> + if (f->mbus_code && fmt->mbus_code != f->mbus_code)
> + continue;
> +
> if (!(fmt->type & type))
> continue;
>
>
> --
> 2.34.1
>
>