On Fri Jun 26 13:35:40 2026 +0300, Sakari Ailus wrote:
> Provide compatibility support for upstream sub-device drivers that do not
> implement get_frame_desc() pad op.
>
> Signed-off-by: Sakari Ailus <[email protected]>
> Reviewed-by: Antti Laakso <[email protected]>
Patch committed.
Thanks,
Sakari Ailus
drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 30 +++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
---
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
index 4a6c649489a6..0db6971d8d3e 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
@@ -16,6 +16,7 @@
#include <linux/string_choices.h>
#include <media/media-entity.h>
+#include <media/mipi-csi2.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-event.h>
@@ -591,6 +592,29 @@ static int ipu6_isys_csi2_streaming_change(struct
ipu6_isys_subdev *asd,
return 0;
}
+static int ipu6_isys_get_frame_desc(struct v4l2_subdev *remote_sd,
+ unsigned int pad,
+ struct v4l2_mbus_frame_desc *desc)
+{
+ struct v4l2_subdev_format fmt = { .which = V4L2_SUBDEV_FORMAT_ACTIVE };
+ int ret;
+
+ ret = v4l2_subdev_call(remote_sd, pad, get_frame_desc, pad, desc);
+ if (!ret || ret != -ENOIOCTLCMD)
+ return ret;
+
+ ret = v4l2_subdev_call_state_active(remote_sd, pad, get_fmt, &fmt);
+ if (ret)
+ return ret;
+
+ desc->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
+ desc->num_entries = 1;
+ desc->entry[0].pixelcode = fmt.format.code;
+ desc->entry[0].bus.csi2.dt =
ipu6_isys_mbus_code_to_mipi(fmt.format.code);
+
+ return 0;
+}
+
static int ipu6_isys_csi2_enable_streams(struct v4l2_subdev *sd,
struct v4l2_subdev_state *state,
u32 pad, u64 streams_mask)
@@ -614,8 +638,7 @@ static int ipu6_isys_csi2_enable_streams(struct v4l2_subdev
*sd,
lockdep_assert_held(&csi2->isys->stream_mutex);
- ret = v4l2_subdev_call(remote_sd, pad, get_frame_desc,
- remote_pad->index, &desc);
+ ret = ipu6_isys_get_frame_desc(remote_sd, remote_pad->index, &desc);
if (ret)
return ret;
@@ -722,8 +745,7 @@ static int ipu6_isys_csi2_disable_streams(struct
v4l2_subdev *sd,
lockdep_assert_held(&csi2->isys->stream_mutex);
- ret = v4l2_subdev_call(remote_sd, pad, get_frame_desc,
- remote_pad->index, &desc);
+ ret = ipu6_isys_get_frame_desc(remote_sd, remote_pad->index, &desc);
if (ret)
return ret;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]