media: v4l2-subdev: Introduce [get|set]_mbus_config pad ops
authorJacopo Mondi <jacopo+renesas@jmondi.org>
Tue, 16 Jun 2020 14:12:36 +0000 (16:12 +0200)
committerpopcornmix <popcornmix@gmail.com>
Wed, 1 Jul 2020 15:34:13 +0000 (16:34 +0100)
Upstream https://patchwork.linuxtv.org/patch/64669/

Introduce two new pad operations to allow retrieving and configuring the
media bus parameters on a subdevice pad.

The newly introduced operations aims to replace the s/g_mbus_config video
operations, which have been on their way for deprecation since a long
time.

Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
include/media/v4l2-subdev.h

index 71f1f2f..ab73657 100644 (file)
@@ -670,6 +670,29 @@ struct v4l2_subdev_pad_config {
  *
  * @set_frame_desc: set the low level media bus frame parameters, @fd array
  *                  may be adjusted by the subdev driver to device capabilities.
+ *
+ * @get_mbus_config: get the media bus configuration of a remote sub-device.
+ *                  The media bus configuration is usually retrieved from the
+ *                  firmware interface at sub-device probe time, immediately
+ *                  applied to the hardware and eventually adjusted by the
+ *                  driver. Remote sub-devices (usually video receivers) shall
+ *                  use this operation to query the transmitting end bus
+ *                  configuration in order to adjust their own one accordingly.
+ *                  Callers should make sure they get the most up-to-date as
+ *                  possible configuration from the remote end, likely calling
+ *                  this operation as close as possible to stream on time. The
+ *                  operation shall fail if the pad index it has been called on
+ *                  is not valid.
+ *
+ * @set_mbus_config: set the media bus configuration of a remote sub-device.
+ *                  This operations is intended to allow, in combination with
+ *                  the get_mbus_config operation, the negotiation of media bus
+ *                  configuration parameters between media sub-devices. The
+ *                  operation shall not fail if the requested configuration is
+ *                  not supported, but the driver shall update the content of
+ *                  the %config argument to reflect what has been actually
+ *                  applied to the hardware. The operation shall fail if the
+ *                  pad index it has been called on is not valid.
  */
 struct v4l2_subdev_pad_ops {
        int (*init_cfg)(struct v4l2_subdev *sd,
@@ -710,6 +733,10 @@ struct v4l2_subdev_pad_ops {
                              struct v4l2_mbus_frame_desc *fd);
        int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad,
                              struct v4l2_mbus_frame_desc *fd);
+       int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad,
+                              struct v4l2_mbus_config *config);
+       int (*set_mbus_config)(struct v4l2_subdev *sd, unsigned int pad,
+                              struct v4l2_mbus_config *config);
 };
 
 /**