From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: laurent.pinchart@ideasonboard.com,
Dave Stevenson <dave.stevenson@raspberrypi.com>,
Jacopo Mondi <jacopo.mondi@ideasonboard.com>,
Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
Jai Luthra <jai.luthra@ideasonboard.com>,
Mehdi Djait <mehdi.djait@linux.intel.com>,
Mattijs Korpershoek <mkorpershoek@kernel.org>
Subject: [PATCH v3 00/29] Rework frame descriptors
Date: Mon, 24 Aug 2026 15:14:22 +0300 [thread overview]
Message-ID: <20260824121451.3348583-1-sakari.ailus@linux.intel.com> (raw)
Hi folks,
This smallish set makes frame descriptors dynamically allocated and
implements a single-entry frame descriptor based on the device's format,
using a new helper called v4l2_subdev_get_frame_desc(). All drivers that
do not obtain their frame descriptor from upstream are converted. The
helper also obtains a frame descriptor for the desired type (parallel or
CSI-2) and checks there's at least one entry there. These checks are
removed from drivers that currently perform them. (Some drivers also check
there's exactly a single frame descriptor entry but I think in most cases
this check could be loosened. That could be done after this set.)
More formats can be added to df-to-mbus conversion as needed. These are
meant to be initial formats that are enough for typical raw sensors (and
one RGB format, too).
In the long run this information should probably reside in sub-device
state. This set however avoids having all receiver drivers to work with
sub-device drivers (~ 100 of such exist) that have a single stream and so
do not implement get_frame_desc() op.
since v2:
- Introduce v4l2_subdev_get_frame_desc_passthrough_csi2() and
v4l2_subdev_get_frame_desc_passthrough_dvp(), which both set the
bus_type field. Use v4l2_subdev_get_frame_desc_passthrough_csi2() in
ds90ub913, ds90ub953, imx8-isi, rzg2l-cru and dw-mipi-csi2rx drivers.
- Remove the non-frame descriptor support upstream compatibility code in
the unicam driver and handle errors in unicam_start_rx().
- Convert cdns-csi2rx, imx8-isi-pipe, rp1-cfe, j721e-csi2rx and ti-cal
drivers to use v4l2_subdev_get_frame_desc().
- Add bits-per-pixel values to metadata mbus format info.
- Also allocate the streams in __v4l2_subdev_get_frame_desc_passthrough()
if the pre-allocated array isn't large enough.
- Declare subdev_fmt in v4l2_subdev_get_frame_desc() where it is used.
- Document the get_frame_desc() op better in v4l2-subdev.h.
- Move the allocation of the frame descriptors if more than
V4L2_FRAME_DESC_ENTRY_PREALLOC to the callee -- was in
call_get_frame_desc() wrapper.
since v1:
- Take Frank's patch adding media bus format to dt / bpp conversion.
Always return -EINVAL on error.
- Rework sub-device framework patch split to make the patches more
reviewable.
- In call_get_frame_desc(), always set fd->entry to fd->entry_mem and
fd->len_entries. Also use memset_after().
- Check for num_entries in call_get_frame_desc() first and thus remove the
redundant else case.
- Check for validity of the returned frame descriptor type in
call_get_frame_desc().
- Merge the patches adding v4l2_subdev_get_frame_desc() and changing the
interface to return the frame descriptor.
- Check for descriptor type early in v4l2_subdev_get_frame_desc().
- Return 0 instead of ret in v4l2_subdev_get_frame_desc() when ret is 0.
- Check the number of returned entries in v4l2_subdev_get_frame_desc().
- Fill in the first frame descriptor entry in v4l2_subdev_get_frame_desc()
instead of allocating one in the stack.
- Move the definition of frame descriptors to the
v4l2_subdev_get_frame_desc() call site.
- Rework the code dealing with frame descriptor allocation.
- Move frame descriptor declaration to the location of first use in driver
patches.
- Fix numerous bugs in driver patches.
Frank Li (1):
media: v4l2-common: Add helper function
media_bus_fmt_to_csi2_(bpp|dt)()
Sakari Ailus (28):
media: v4l2-subdev: Align frame descriptor error codes with routing
media: v4l2-subdev: Prepare for changes in getting frame descriptors
media: v4l2-subdev: Allow releasing frame descriptors on return
media: v4l2-subdev: Allow allocating frame descriptors based on the
need
media: v4l2-subdev: Change the maximum number of routes
media: v4l2-subdev: Add frame descriptor passthrough for CSI-2 and DVP
media: ds90ub913: Use v4l2_subdev_get_frame_desc_passthrough_csi2()
media: ds90ub953: Use v4l2_subdev_get_frame_desc_passthrough_csi2()
media: nxp: imx8-isi: Use
v4l2_subdev_get_frame_desc_passthrough_csi2()
media: rzg2l-cru: Use v4l2_subdev_get_frame_desc_passthrough_csi2()
media: dw-mipi-csi2rx: Use
v4l2_subdev_get_frame_desc_passthrough_csi2()
media: cdn-csi2rc: media: Use
v4l2_subdev_get_frame_desc_passthrough_csi2()
media: v4l2-subdev: Make v4l2_subdev_get_frame_desc_passthrough()
static
media: v4l2-subdev: Return dynamically allocated pass-through routes
media: v4l2-subdev: Always return at least one frame descriptor
media: bcm2835-unicam: Use v4l2_subdev_get_frame_desc()
media: bcm2835-unicam: Remove frame descriptor workaround
media: nxp: imx8-isi: Use v4l2_subdev_get_frame_desc()
media: raspberrypi: cfe: Use v4l2_subdev_get_frame_desc()
media: rzg2l-cru: Use v4l2_subdev_get_frame_desc()
media: rkisp1: Use v4l2_subdev_get_frame_desc()
media: exynos4-is: Use v4l2_subdev_get_frame_desc()
media: ti: cal: Use v4l2_subdev_get_frame_desc()
media: ipu6: Use v4l2_subdev_get_frame_desc()
staging: media: ipu7: Use v4l2_subdev_get_frame_desc()
media: cdns-csi2rc: Use v4l2_subdev_get_frame_desc()
media: v4l2-subdev: Use v4l2_subdev_get_frame_desc() for passthrough
media: j721e-csi2rx: Use v4l2_subdev_get_frame_desc()
drivers/media/i2c/ds90ub913.c | 2 +-
drivers/media/i2c/ds90ub953.c | 2 +-
drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 22 +-
.../media/platform/broadcom/bcm2835-unicam.c | 48 ++--
drivers/media/platform/cadence/cdns-csi2rx.c | 26 +-
.../platform/nxp/imx8-isi/imx8-isi-crossbar.c | 21 +-
.../platform/nxp/imx8-isi/imx8-isi-pipe.c | 23 +-
.../media/platform/raspberrypi/rp1-cfe/cfe.c | 51 +---
.../platform/renesas/rzg2l-cru/rzg2l-csi2.c | 21 +-
.../platform/renesas/rzg2l-cru/rzg2l-video.c | 27 +-
.../platform/rockchip/rkisp1/rkisp1-isp.c | 21 +-
.../samsung/exynos4-is/fimc-capture.c | 18 +-
.../media/platform/synopsys/dw-mipi-csi2rx.c | 22 +-
drivers/media/platform/ti/cal/cal-camerarx.c | 26 +-
drivers/media/platform/ti/cal/cal.c | 49 ++--
.../platform/ti/j721e-csi2rx/j721e-csi2rx.c | 32 +--
drivers/media/v4l2-core/v4l2-common.c | 183 +++++++++++++
drivers/media/v4l2-core/v4l2-subdev.c | 250 ++++++++++++++----
.../staging/media/ipu7/ipu7-isys-csi-phy.c | 19 +-
drivers/staging/media/ipu7/ipu7-isys-csi2.c | 26 +-
include/media/mipi-csi2.h | 24 ++
include/media/v4l2-subdev.h | 118 ++++++++-
22 files changed, 686 insertions(+), 345 deletions(-)
base-commit: 56c29fa3ee666197516a231e75aed789ae9c530d
--
2.47.3
next reply other threads:[~2026-08-24 12:14 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-24 12:14 Sakari Ailus [this message]
2026-08-24 12:14 ` [PATCH v3 01/29] media: v4l2-common: Add helper function media_bus_fmt_to_csi2_(bpp|dt)() Sakari Ailus
2026-08-26 13:18 ` Linus Walleij
2026-08-27 7:45 ` Linus Walleij
2026-08-27 8:50 ` Sakari Ailus
2026-08-27 9:34 ` Sakari Ailus
2026-08-27 22:29 ` Linus Walleij
2026-08-24 12:14 ` [PATCH v3 02/29] media: v4l2-subdev: Align frame descriptor error codes with routing Sakari Ailus
2026-08-27 7:46 ` Linus Walleij
2026-08-24 12:14 ` [PATCH v3 03/29] media: v4l2-subdev: Prepare for changes in getting frame descriptors Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 04/29] media: v4l2-subdev: Allow releasing frame descriptors on return Sakari Ailus
2026-08-24 20:34 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 05/29] media: v4l2-subdev: Allow allocating frame descriptors based on the need Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 06/29] media: v4l2-subdev: Change the maximum number of routes Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 07/29] media: v4l2-subdev: Add frame descriptor passthrough for CSI-2 and DVP Sakari Ailus
2026-08-24 20:43 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 08/29] media: ds90ub913: Use v4l2_subdev_get_frame_desc_passthrough_csi2() Sakari Ailus
2026-08-24 20:44 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 09/29] media: ds90ub953: " Sakari Ailus
2026-08-24 20:44 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 10/29] media: nxp: imx8-isi: " Sakari Ailus
2026-08-24 20:44 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 11/29] media: rzg2l-cru: " Sakari Ailus
2026-08-24 20:45 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 12/29] media: dw-mipi-csi2rx: " Sakari Ailus
2026-08-24 20:46 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 13/29] media: cdn-csi2rc: media: " Sakari Ailus
2026-08-24 20:47 ` Frank Li
2026-08-26 6:41 ` Jai Luthra
2026-08-24 12:14 ` [PATCH v3 14/29] media: v4l2-subdev: Make v4l2_subdev_get_frame_desc_passthrough() static Sakari Ailus
2026-08-24 20:48 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 15/29] media: v4l2-subdev: Return dynamically allocated pass-through routes Sakari Ailus
2026-08-24 21:00 ` Frank Li
2026-08-25 7:36 ` Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 16/29] media: v4l2-subdev: Always return at least one frame descriptor Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 17/29] media: bcm2835-unicam: Use v4l2_subdev_get_frame_desc() Sakari Ailus
2026-08-24 21:07 ` Frank Li
2026-08-25 7:40 ` Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 18/29] media: bcm2835-unicam: Remove frame descriptor workaround Sakari Ailus
2026-08-24 21:10 ` Frank Li
2026-08-26 12:09 ` Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 19/29] media: nxp: imx8-isi: Use v4l2_subdev_get_frame_desc() Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 20/29] media: raspberrypi: cfe: " Sakari Ailus
2026-08-24 21:11 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 21/29] media: rzg2l-cru: " Sakari Ailus
2026-08-24 21:13 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 22/29] media: rkisp1: " Sakari Ailus
2026-08-24 21:13 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 23/29] media: exynos4-is: " Sakari Ailus
2026-08-24 21:22 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 24/29] media: ti: cal: " Sakari Ailus
2026-08-24 21:26 ` Frank Li
2026-08-25 8:05 ` Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 25/29] media: ipu6: " Sakari Ailus
2026-08-24 21:26 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 26/29] staging: media: ipu7: " Sakari Ailus
2026-08-24 21:27 ` Frank Li
2026-08-24 12:14 ` [PATCH v3 27/29] media: cdns-csi2rc: " Sakari Ailus
2026-08-24 21:29 ` Frank Li
2026-08-26 6:39 ` Jai Luthra
2026-08-24 12:14 ` [PATCH v3 28/29] media: v4l2-subdev: Use v4l2_subdev_get_frame_desc() for passthrough Sakari Ailus
2026-08-24 21:37 ` Frank Li
2026-08-25 7:34 ` Sakari Ailus
2026-08-24 12:14 ` [PATCH v3 29/29] media: j721e-csi2rx: Use v4l2_subdev_get_frame_desc() Sakari Ailus
2026-08-24 21:38 ` Frank Li
2026-08-26 6:36 ` Jai Luthra
2026-08-26 9:58 ` [PATCH v3 00/29] Rework frame descriptors Mattijs Korpershoek
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=20260824121451.3348583-1-sakari.ailus@linux.intel.com \
--to=sakari.ailus@linux.intel.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=jacopo.mondi@ideasonboard.com \
--cc=jai.luthra@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mehdi.djait@linux.intel.com \
--cc=mkorpershoek@kernel.org \
--cc=tomi.valkeinen@ideasonboard.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