public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: "Jacopo Mondi" <jacopo.mondi@ideasonboard.com>,
	linux-media@vger.kernel.org, hans@jjverkuil.nl,
	Prabhakar <prabhakar.csengg@gmail.com>,
	"Kate Hsuan" <hpa@redhat.com>,
	"Dave Stevenson" <dave.stevenson@raspberrypi.com>,
	"Tommaso Merciai" <tomm.merciai@gmail.com>,
	"Benjamin Mugnier" <benjamin.mugnier@foss.st.com>,
	"Sylvain Petinot" <sylvain.petinot@foss.st.com>,
	"Christophe JAILLET" <christophe.jaillet@wanadoo.fr>,
	"Julien Massot" <julien.massot@collabora.com>,
	"Naushir Patuck" <naush@raspberrypi.com>,
	"Yan, Dongcheng" <dongcheng.yan@intel.com>,
	"Cao, Bingbu" <bingbu.cao@intel.com>,
	"Qiu, Tian Shu" <tian.shu.qiu@intel.com>,
	"Stefan Klug" <stefan.klug@ideasonboard.com>,
	"Mirela Rabulea" <mirela.rabulea@nxp.com>,
	"André Apitzsch" <git@apitzsch.eu>,
	"Heimir Thor Sverrisson" <heimir.sverrisson@gmail.com>,
	"Kieran Bingham" <kieran.bingham@ideasonboard.com>,
	"Mehdi Djait" <mehdi.djait@linux.intel.com>,
	"Ricardo Ribalda Delgado" <ribalda@kernel.org>,
	"Hans de Goede" <hansg@kernel.org>,
	"Tomi Valkeinen" <tomi.valkeinen@ideasonboard.com>,
	"David Plowman" <david.plowman@raspberrypi.com>,
	"Yu, Ong Hock" <ong.hock.yu@intel.com>,
	"Ng, Khai Wen" <khai.wen.ng@intel.com>,
	"Jai Luthra" <jai.luthra@ideasonboard.com>,
	"Rishikesh Donadkar" <r-donadkar@ti.com>
Subject: Re: [PATCH v4 24/29] media: v4l2-subdev: Introduce v4l2_subdev_get_frame_desc()
Date: Thu, 16 Apr 2026 19:16:54 +0300	[thread overview]
Message-ID: <20260416161654.GC1823068@killaraus.ideasonboard.com> (raw)
In-Reply-To: <adykK0JxoIoZjWUT@kekkonen.localdomain>

On Mon, Apr 13, 2026 at 11:07:07AM +0300, Sakari Ailus wrote:
> On Fri, Apr 10, 2026 at 12:53:42PM +0200, Jacopo Mondi wrote:
> > On Wed, Apr 08, 2026 at 06:39:33PM +0300, Sakari Ailus wrote:
> > > Introduce v4l2_subdev_get_frame_desc() in order to facilitate implementing
> > > drivers that need frame descriptors. If the remote sub-device does not
> > > support frame descriptors, v4l2_subdev_get_frame_desc() creates one (with
> > > a single entry) opportunistically, thus avoiding the need to add frame
> > > descriptor support to sensor drivers the device for which only generates a

s/the device for which/whose device/

I think all sensor drivers should implement .get_frame_desc(), possibly
with a helper.

> > > single stream, or managing the situation on the caller side.

That part I agree with, we currently need to manage the situation on the
caller side because not all subdevs implement the operation. That will
still be the case for a while, so this helper is useful.

Can you also replace manual calls to .get_frame_desc() with the helper ?
Some of the existing callers implement fallbacks, I fonud them at least
in

drivers/media/platform/broadcom/bcm2835-unicam.c
drivers/media/platform/raspberrypi/rp1-cfe/cfe.c
drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
drivers/media/platform/ti/cal/cal.c

(directly in the function that calls .get_frame_desc(), or in its
caller)

Replacing those will ensure the helper works as expected.

> > > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > > ---
> > >  drivers/media/v4l2-core/v4l2-subdev.c | 96 +++++++++++++++++++++++++++
> > >  include/media/v4l2-subdev.h           | 20 ++++++
> > >  2 files changed, 116 insertions(+)
> > >
> > > diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
> > > index 647587c0499a..40b28e070726 100644
> > > --- a/drivers/media/v4l2-core/v4l2-subdev.c
> > > +++ b/drivers/media/v4l2-core/v4l2-subdev.c
> > > @@ -20,6 +20,7 @@
> > >  #include <linux/version.h>
> > >  #include <linux/videodev2.h>
> > >
> > > +#include <media/mipi-csi2.h>
> > >  #include <media/v4l2-ctrls.h>
> > >  #include <media/v4l2-device.h>
> > >  #include <media/v4l2-event.h>
> > > @@ -2758,3 +2759,98 @@ void v4l2_subdev_put_privacy_led(struct v4l2_subdev *sd)
> > >  #endif
> > >  }
> > >  EXPORT_SYMBOL_GPL(v4l2_subdev_put_privacy_led);
> > > +
> > > +static int get_mipi_dt_for_mbus(u32 code)

v4l2_subdev_get_mipi_dt_for_mbus()

Or move the function to v4l2-common.c, name it mipi_csi2_dt_for_mbus()
and declare it in include/media/mipi-csi2.h.

> > > +{
> > > +	switch (code) {
> > > +	case MEDIA_BUS_FMT_BGR888_1X24:
> > > +		return MIPI_CSI2_DT_RGB888;
> > > +	case MEDIA_BUS_FMT_Y8_1X8:
> > > +	case MEDIA_BUS_FMT_SBGGR8_1X8:
> > > +	case MEDIA_BUS_FMT_SGBRG8_1X8:
> > > +	case MEDIA_BUS_FMT_SGRBG8_1X8:
> > > +	case MEDIA_BUS_FMT_SRGGB8_1X8:
> > > +		return MIPI_CSI2_DT_RAW8;
> > > +	case MEDIA_BUS_FMT_Y10_1X10:
> > > +	case MEDIA_BUS_FMT_SBGGR10_1X10:
> > > +	case MEDIA_BUS_FMT_SGBRG10_1X10:
> > > +	case MEDIA_BUS_FMT_SGRBG10_1X10:
> > > +	case MEDIA_BUS_FMT_SRGGB10_1X10:
> > > +		return MIPI_CSI2_DT_RAW10;
> > > +	case MEDIA_BUS_FMT_Y12_1X12:
> > > +	case MEDIA_BUS_FMT_SBGGR12_1X12:
> > > +	case MEDIA_BUS_FMT_SGBRG12_1X12:
> > > +	case MEDIA_BUS_FMT_SGRBG12_1X12:
> > > +	case MEDIA_BUS_FMT_SRGGB12_1X12:
> > > +		return MIPI_CSI2_DT_RAW12;
> > > +	case MEDIA_BUS_FMT_Y14_1X14:
> > > +	case MEDIA_BUS_FMT_SBGGR14_1X14:
> > > +	case MEDIA_BUS_FMT_SGBRG14_1X14:
> > > +	case MEDIA_BUS_FMT_SGRBG14_1X14:
> > > +	case MEDIA_BUS_FMT_SRGGB14_1X14:
> > > +		return MIPI_CSI2_DT_RAW14;
> > > +	case MEDIA_BUS_FMT_Y16_1X16:
> > > +	case MEDIA_BUS_FMT_SBGGR16_1X16:
> > > +	case MEDIA_BUS_FMT_SGBRG16_1X16:
> > > +	case MEDIA_BUS_FMT_SGRBG16_1X16:
> > > +	case MEDIA_BUS_FMT_SRGGB16_1X16:
> > > +		return MIPI_CSI2_DT_RAW16;
> > > +	case MEDIA_BUS_FMT_SBGGR20_1X20:
> > > +	case MEDIA_BUS_FMT_SGBRG20_1X20:
> > > +	case MEDIA_BUS_FMT_SGRBG20_1X20:
> > > +	case MEDIA_BUS_FMT_SRGGB20_1X20:
> > > +		return MIPI_CSI2_DT_RAW20;
> > > +	default:
> > > +		return -EINVAL;
> > > +	}
> > > +}
> > > +
> > > +int v4l2_subdev_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
> > > +			       struct v4l2_mbus_frame_desc *desc)
> > > +{
> > > +	struct v4l2_subdev_format subdev_fmt = {
> > > +		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
> > > +		.pad = pad,
> > > +	};
> > > +	int ret;
> > > +
> > > +	if (v4l2_subdev_has_op(sd, pad, get_frame_desc)) {
> > > +		unsigned int type = desc->type;
> > > +
> > > +		ret = v4l2_subdev_call(sd, pad, get_frame_desc, pad, desc);
> > > +
> > > +		if (desc->type != type)
> > > +			return -EINVAL;

I'd add a dev_err() here. There are .get_frame_desc() callers that check
if the returned type matches what they expect and log an error
otherwise. When using this helper the check can't be performed in the
callera any more, leading to possibly hard to debug issues if no message
is printed.

> > > +
> > > +		return ret;
> > > +	}
> > > +
> > > +	if (desc->type != V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL &&
> > > +	    desc->type != V4L2_MBUS_FRAME_DESC_TYPE_CSI2)
> > > +		return -EINVAL;
> > > +
> > > +	ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, NULL,
> > > +			       &subdev_fmt);
> > > +	if (ret)
> > > +		return ret;
> > > +
> > > +	struct v4l2_mbus_frame_desc_entry entry = {
> > > +		.pixelcode = subdev_fmt.format.code,
> > > +	};
> > > +
> > > +	if (desc->type == V4L2_MBUS_FRAME_DESC_TYPE_CSI2) {
> > > +		int dt;
> > > +
> > > +		dt = get_mipi_dt_for_mbus(subdev_fmt.format.code);
> > > +		if (dt < 0)
> > > +			return dt;
> > > +
> > > +		entry.bus.csi2.dt = dt;
> > > +	}
> > > +
> > > +	desc->entry[0] = entry;
> > > +	desc->num_entries = 1;
> > > +
> > > +	return 0;
> > > +}
> > > +EXPORT_SYMBOL_GPL(v4l2_subdev_get_frame_desc);
> > > diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
> > > index 4588992b4417..93b672edd08e 100644
> > > --- a/include/media/v4l2-subdev.h
> > > +++ b/include/media/v4l2-subdev.h
> > > @@ -2058,4 +2058,24 @@ void v4l2_subdev_notify_event(struct v4l2_subdev *sd,
> > >   */
> > >  bool v4l2_subdev_is_streaming(struct v4l2_subdev *sd);
> > >
> > > +/**
> > > + * v4l2_subdev_get_frame_desc() - Get a pad's frame descriptor
> > > + * @sd: The sub-device
> > > + * @pad: The number of the pad in @sd from which to obtain the frame descriptor
> > > + * @desc: A pointer to a frame descriptor, with its type field set
> > > + *
> > > + * Obtain a frame descriptor from a sub-device. If the sub-device supports the
> > > + * get_frame_desc pad operation, its result is returned, just like calling it
> > > + * directly using v4l2_subdev_call(). If the sub-device driver does not support
> > > + * it, then one containing a single entry is created using the information from

s/one /a frame descriptor/

> > > + * the sub-device active state, which this function locks for the duration of
> > > + * the call to obtain it.
> > 
> > This doesn't seem to apply anymore...
> 
> I'll rephrase it.
> 
> > > + *
> > > + * The caller is required to set @desc->type to the expected bus type.
> > 
> > Is it worth mentioning that only V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL
> > and V4L2_MBUS_FRAME_DESC_TYPE_CSI2 are supported ?
> 
> I'll add that.
> 
> > > + *
> > > + * Return: %0 on success or negative error code on failure.
> > > + */
> > > +int v4l2_subdev_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
> > > +			       struct v4l2_mbus_frame_desc *desc);
> > 
> > With the documentation addressed
> > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2026-04-16 16:16 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-08 15:39 [PATCH v4 00/29] Metadata series preparation Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 01/29] media: imx219: Rename "PIXEL_ARRAY" as "VISIBLE" Sakari Ailus
2026-04-16 13:14   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 02/29] media: imx219: Fix maximum frame length in lines Sakari Ailus
2026-04-16 13:56   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 03/29] media: imx219: Set horizontal blanking on mode change Sakari Ailus
2026-04-10  7:27   ` Jacopo Mondi
2026-04-16 14:22     ` Laurent Pinchart
2026-04-16 14:38     ` Dave Stevenson
2026-04-08 15:39 ` [PATCH v4 04/29] media: imx219: Scale the vblank limits according to rate_factor Sakari Ailus
2026-04-10  8:28   ` Jacopo Mondi
2026-04-10  8:41     ` Sakari Ailus
2026-04-10  9:01       ` Jacopo Mondi
2026-04-20 21:08         ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 05/29] media: imx219: Fix vertical blanking and exposure for analogue binning Sakari Ailus
2026-04-10  8:42   ` Jacopo Mondi
2026-04-10  8:46     ` Sakari Ailus
2026-04-10  8:56       ` Jacopo Mondi
2026-04-10  9:04         ` Sakari Ailus
2026-04-10 13:38           ` Jacopo Mondi
2026-04-15 14:38     ` Jai Luthra
2026-04-20 21:02       ` Sakari Ailus
2026-04-15 17:15   ` Jai Luthra
2026-04-20 20:54     ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 06/29] media: imx219: Don't update exposure limits while setting format Sakari Ailus
2026-04-10  8:44   ` Jacopo Mondi
2026-04-10 10:14     ` Sakari Ailus
2026-04-10 10:29     ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 07/29] media: imx219: Rename "binning" as "bin_hv" in imx219_set_pad_format Sakari Ailus
2026-04-16 14:25   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 08/29] media: imx274: Remove redundant kernel-doc comments Sakari Ailus
2026-04-10  8:48   ` Jacopo Mondi
2026-04-10  8:54     ` Sakari Ailus
2026-04-10  9:02       ` Jacopo Mondi
2026-04-16 14:26   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 09/29] media: imx334: " Sakari Ailus
2026-04-10  9:02   ` Jacopo Mondi
2026-04-16 14:27   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 10/29] media: imx335: " Sakari Ailus
2026-04-10  9:02   ` Jacopo Mondi
2026-04-16 14:27   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 11/29] media: imx412: " Sakari Ailus
2026-04-10  9:03   ` Jacopo Mondi
2026-04-16 14:28   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 12/29] media: ov9282: " Sakari Ailus
2026-04-10  9:08   ` Jacopo Mondi
2026-04-16 14:28   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 13/29] media: tvp514x: " Sakari Ailus
2026-04-10  9:08   ` Jacopo Mondi
2026-04-16 14:28   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 14/29] media: Documentation: Improve LINK_FREQ documentation Sakari Ailus
2026-04-16 15:05   ` Laurent Pinchart
2026-04-21 14:42     ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 15/29] media: Documentation: Improve pixel rate calculation documentation Sakari Ailus
2026-04-16 16:20   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 16/29] media: v4l2-subdev: Refactor returning routes Sakari Ailus
2026-04-16 16:24   ` Laurent Pinchart
2026-04-21 14:50     ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 17/29] media: v4l2-subdev: Allow accessing routes with STREAMS client capability Sakari Ailus
2026-04-16 15:06   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 18/29] media: mc: Simplify link processing in __media_pipeline_start() Sakari Ailus
2026-04-10  9:26   ` Jacopo Mondi
2026-04-16 14:35   ` Laurent Pinchart
2026-04-21 10:24     ` Sakari Ailus
2026-04-21 11:18       ` Laurent Pinchart
2026-04-21 12:37         ` Sakari Ailus
2026-04-21 22:10           ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 19/29] media: mc: Separate single link validation into a new function Sakari Ailus
2026-04-10  9:29   ` Jacopo Mondi
2026-04-16 16:35   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 20/29] media: uapi: Bump the STREAMS bit a little Sakari Ailus
2026-04-10  9:31   ` Jacopo Mondi
2026-04-16 14:31     ` Laurent Pinchart
2026-04-21 10:27       ` Sakari Ailus
2026-04-21 11:18         ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 21/29] media: mc: Don't care about unsettable flags in MEDIA_IOC_LINK_SETUP Sakari Ailus
2026-04-10 10:31   ` Jacopo Mondi
2026-04-10 12:56     ` Sakari Ailus
2026-04-10 13:24       ` Jacopo Mondi
2026-04-16 15:59   ` Laurent Pinchart
2026-04-21 10:44     ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 22/29] media: mc: Add MEDIA_LNK_FL_VALIDATE_LATE Sakari Ailus
2026-04-10 10:41   ` Jacopo Mondi
2026-04-13  7:59     ` Sakari Ailus
2026-04-13  9:30       ` Jacopo Mondi
2026-04-16 16:29   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 23/29] media: Improve enable_streams and disable_streams documentation Sakari Ailus
2026-04-16 15:49   ` Laurent Pinchart
2026-04-21 15:35     ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 24/29] media: v4l2-subdev: Introduce v4l2_subdev_get_frame_desc() Sakari Ailus
2026-04-10 10:53   ` Jacopo Mondi
2026-04-13  8:07     ` Sakari Ailus
2026-04-16 16:16       ` Laurent Pinchart [this message]
2026-04-21 12:18         ` Sakari Ailus
2026-04-21 22:18           ` Laurent Pinchart
2026-04-22  8:26             ` Sakari Ailus
2026-04-22  9:02               ` Laurent Pinchart
2026-04-22 10:02                 ` Sakari Ailus
2026-04-22 10:47                   ` Laurent Pinchart
2026-04-22 10:48                     ` Sakari Ailus
2026-04-22 10:54                       ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 25/29] media: v4l2-subdev: Move subdev client capabilities into a new struct Sakari Ailus
2026-04-10 13:31   ` Jacopo Mondi
2026-04-13  8:11     ` Sakari Ailus
2026-04-13 12:42       ` Jacopo Mondi
2026-04-16 17:30         ` Laurent Pinchart
2026-04-23  7:02           ` Jacopo Mondi
2026-04-08 15:39 ` [PATCH v4 26/29] media: v4l2-subdev: Add struct v4l2_subdev_client_info pointer to pad ops Sakari Ailus
2026-04-16 17:32   ` Laurent Pinchart
2026-04-08 15:39 ` [PATCH v4 27/29] media: v4l2-subdev: Add v4l2_subdev_call_ci_active_state Sakari Ailus
2026-04-16 17:38   ` Laurent Pinchart
2026-04-21 16:04     ` Sakari Ailus
2026-04-21 16:12       ` Laurent Pinchart
2026-04-21 16:34         ` Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 28/29] media: v4l2-subdev: Perform client info changes to i2c drivers Sakari Ailus
2026-04-08 15:39 ` [PATCH v4 29/29] media: v4l2-subdev: Add struct v4l2_subdev_client_info argument to pad ops Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260416161654.GC1823068@killaraus.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=benjamin.mugnier@foss.st.com \
    --cc=bingbu.cao@intel.com \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=david.plowman@raspberrypi.com \
    --cc=dongcheng.yan@intel.com \
    --cc=git@apitzsch.eu \
    --cc=hans@jjverkuil.nl \
    --cc=hansg@kernel.org \
    --cc=heimir.sverrisson@gmail.com \
    --cc=hpa@redhat.com \
    --cc=jacopo.mondi@ideasonboard.com \
    --cc=jai.luthra@ideasonboard.com \
    --cc=julien.massot@collabora.com \
    --cc=khai.wen.ng@intel.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mehdi.djait@linux.intel.com \
    --cc=mirela.rabulea@nxp.com \
    --cc=naush@raspberrypi.com \
    --cc=ong.hock.yu@intel.com \
    --cc=prabhakar.csengg@gmail.com \
    --cc=r-donadkar@ti.com \
    --cc=ribalda@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=stefan.klug@ideasonboard.com \
    --cc=sylvain.petinot@foss.st.com \
    --cc=tian.shu.qiu@intel.com \
    --cc=tomi.valkeinen@ideasonboard.com \
    --cc=tomm.merciai@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox