[PATCH v3 00/29] Rework frame descriptors

Sakari Ailus <[email protected]>
Newsgroups org.kernel.vger.linux-media
Organization Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.