[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