[PATCH 00/19] media: renesas: rcar-csi2: Support multiple streams

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello this series implements multi-stream support for R-Car CSI-2 and the
two CSI-2 devices that are available on Renesas dev-boards which are mainline
supported (the ADV748x HDMI decoder and the MAX9286 GMSL deserializer).

The net gain in feature is:
- ADV748x: Select on which MIPI CSI-2 VC to send the stream on
- MAX9286: Paves the way for run-time selection of active links

Both features are realized by controlling the devices routing tables.
The max9286 routing support is not implemented, but these patches are needed
in order to maintain the current version compatible with R-Car CSI-2.

The R-Car CSI-2 driver needs to be updated in order to support multiplexed
transmitters, in particular:

- Use LINK_FREQ to compute the lane bandwidth
- Support subdev_active state
- Configure DT and VC handling by using the remote's frame_desc

A separate fix for VIN sits at the top of the series to re-enable YUYV capture
operations.

The series needs to activate streams in v4l2-subdev to work correctly:

--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -32,7 +32,7 @@
  * 'v4l2_subdev_enable_streams_api' to 1 below.
  */

-static bool v4l2_subdev_enable_streams_api;
+static bool v4l2_subdev_enable_streams_api = 1;
 #endif


Test scripts, based on vin-tests are available at:
https://git.uk.ideasonboard.com/jmondi/vin-tests

A note for Sakari: patch
"media: max9286: Implement support for LINK_FREQ"

Could actually use your new
"media: v4l: Support passing sub-device argument to v4l2_get_link_freq()"

I kept it as it is for this version waiting for your patch to get in.

A note for Niklas:
I think this series paves the way to actually moving the control of which
VC goes to which VIN using a routing table instead of using link enablement.

Currently the setup is as it follows: routing within R-Car CSI-2 is fixed, sink
stream 0/X goes to source stream X+1/0 and each source pad represents a VC.
Which VC gets sent to which VIN is controlled by link enablement.

A more natural way of handling this would be to make the routing table
within CSI-2 configurable and have media-links immutable between the CSI-2
source pad. A CSI-2 source pad would then represent a 'channel' between
CSI-2 and VIN and not the VC which is sent on it.

This setup would better represent the current implementation, with VIN's VCSEL
fixed channel routing and with the CSI-2 routing table controlling which VC gets
sent on which channel. What do you think ?

Jacopo Mondi (19):
  media: adv748x: Add support for active state
  media: adv748x: Add flags to adv748x_subdev_init()
  media: adv748x: Use V4L2 streams
  media: adv748x: Propagate format to opposite stream
  media: adv748x: Implement set_routing()
  media: adv748x: Use routes to configure VC
  media: adv748x: Implement .get_frame_desc()
  media: max9286: Add support for subdev active state
  media: max9286: Fix enum_mbus_code
  media: max9286: Use frame interval from subdev state
  media: max9286: Use V4L2 Streams
  media: max9286: Implement .get_frame_desc()
  media: max9286: Implement support for LINK_FREQ
  media: max9286: Implement .get_mbus_config()
  media: rcar-csi2: Add support for multiplexed streams
  media: rcar-csi2: Support multiplexed transmitters
  media: rcar-csi2: Store format in the subdev state
  media: rcar-csi2: Implement set_routing
  media: rcar-vin: Fix YUYV8_1X16 handling for CSI-2

 drivers/media/i2c/adv748x/adv748x-afe.c       |   2 +-
 drivers/media/i2c/adv748x/adv748x-core.c      |  12 +-
 drivers/media/i2c/adv748x/adv748x-csi2.c      | 251 +++++++---
 drivers/media/i2c/adv748x/adv748x-hdmi.c      |   2 +-
 drivers/media/i2c/adv748x/adv748x.h           |   4 +-
 drivers/media/i2c/max9286.c                   | 457 ++++++++++++------
 drivers/media/platform/renesas/rcar-csi2.c    | 442 ++++++++++++-----
 .../platform/renesas/rcar-vin/rcar-dma.c      |  16 +-
 8 files changed, 834 insertions(+), 352 deletions(-)

--
2.44.0





[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux