Hi, This is v16 of the streams series. The v15 can be found from: https://lore.kernel.org/all/20221003121852.616745-1-tomi.valkeinen@xxxxxxxxxxxxxxxx/ My work branch with additional drivers can be found from: git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git streams/work-v16 And there's also the v4l-utils series v2 to add support to v4l2-ctl and media-ctl: https://lore.kernel.org/all/20220714132116.132498-1-tomi.valkeinen@xxxxxxxxxxxxxxxx/ (Note: the v4l-utils above has not been changed to accommodate the drop of V4L2_SUBDEV_ROUTE_FL_SOURCE yet) Changes in v16: - v4l2_subdev_link_validate_get_format: Drop use of for_each_set_bit(), as the sink_streams_mask is not unsigned long. - v4l2_subdev_set_routing: Cast parameters given to check_mul_overflow() to size_t to avoid compiler warnings. - Drop V4L2_SUBDEV_ROUTE_FL_SOURCE - Require a code change and kernel compilation to enable Streams API. A bit more details for the last two changes: V4L2_SUBDEV_ROUTE_FL_SOURCE felt somewhat hacky, and the whole question of how sensors' streams in various cases should be handled was unclear. Thus it was decided (me, Laurent, Sakari) that we should only support the current single-stream sensors and work on multi-streams sensors on top of this series. This should not hinder any use case that was supportable in the v15, as most likely the second stream from a sensor would be an embedded data stream, and embedded data is not (really) supported upstream. The routing and stream support has been worked on for years by multiple persons, and has proven to be very complicated feature, or a set of features. While this series has been used on multiple different platforms for various use cases, we would still like to be on the safe side, especially regarding the userspace APIs. Thus, we decided that it would be good to get this series merged while still making it clear that the uAPI is not quite stable yet, and to achieve that, there's a static variable in v4l2-subdev.c that the user needs to set to enable the API. Tomi Jacopo Mondi (2): media: Documentation: Add GS_ROUTING documentation media: subdev: Add for_each_active_route() macro Laurent Pinchart (5): media: subdev: Add [GS]_ROUTING subdev ioctls and operations media: subdev: add v4l2_subdev_routing_validate() helper media: v4l2-subdev: Add v4l2_subdev_state_xlate_streams() helper media: v4l2-subdev: Add subdev .(enable|disable)_streams() operations media: v4l2-subdev: Add v4l2_subdev_s_stream_helper() function Sakari Ailus (1): media: Add stream to frame descriptor Tomi Valkeinen (12): media: v4l2-subdev: Sort includes media: add V4L2_SUBDEV_FL_STREAMS media: add V4L2_SUBDEV_CAP_STREAMS media: subdev: Require code change to enable [GS]_ROUTING media: subdev: add v4l2_subdev_has_pad_interdep() media: subdev: add v4l2_subdev_set_routing helper() media: Documentation: add multiplexed streams documentation media: subdev: add stream based configuration media: subdev: use streams in v4l2_subdev_link_validate() media: subdev: add "opposite" stream helper funcs media: subdev: add streams to v4l2_subdev_get_fmt() helper function media: subdev: add v4l2_subdev_set_routing_with_fmt() helper .clang-format | 1 + .../driver-api/media/v4l2-subdev.rst | 8 + .../userspace-api/media/v4l/dev-subdev.rst | 140 +++ .../userspace-api/media/v4l/user-func.rst | 1 + .../v4l/vidioc-subdev-enum-frame-interval.rst | 5 +- .../v4l/vidioc-subdev-enum-frame-size.rst | 5 +- .../v4l/vidioc-subdev-enum-mbus-code.rst | 5 +- .../media/v4l/vidioc-subdev-g-crop.rst | 5 +- .../media/v4l/vidioc-subdev-g-fmt.rst | 5 +- .../v4l/vidioc-subdev-g-frame-interval.rst | 5 +- .../media/v4l/vidioc-subdev-g-routing.rst | 147 +++ .../media/v4l/vidioc-subdev-g-selection.rst | 5 +- drivers/media/v4l2-core/v4l2-ioctl.c | 25 +- drivers/media/v4l2-core/v4l2-subdev.c | 1000 ++++++++++++++++- include/media/v4l2-subdev.h | 377 +++++++ include/uapi/linux/v4l2-subdev.h | 74 +- 16 files changed, 1758 insertions(+), 50 deletions(-) create mode 100644 Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst -- 2.34.1