On Thu Nov 27 09:11:57 2025 +0200, Sakari Ailus wrote:
> Collect the IPU streams to the CSI-2 receiver sub-device's context.
>
> The background is that an IPU stream is bound to a CSI-2 virtual channel
> but in a V4L2 pipeline there's no such assumption. Therefore a pipeline
> may contain multiple virtual channels and so multiple IPU streams, too.
>
> 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 | 6 ++++++
drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h | 1 +
drivers/media/pci/intel/ipu6/ipu6-isys-video.h | 1 +
3 files changed, 8 insertions(+)
---
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
index 0fd4171b50ac..f92577054d89 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
@@ -457,6 +457,8 @@ static int ipu6_isys_csi2_enable_streams(struct v4l2_subdev
*sd,
return ret;
}
+ list_add(&av->csi2_entry, &csi2->av_head);
+
ret = ipu6_isys_start_stream_firmware(av, &bl);
if (ret) {
dev_err(sd->dev, "start stream of firmware failed\n");
@@ -493,6 +495,7 @@ err_stop_stream_firmware:
ipu6_isys_close_streaming_firmware(av);
err_return_buffers:
+ list_del(&av->csi2_entry);
ipu6_isys_buffer_list_queue(&bl, IPU6_ISYS_BUFFER_LIST_FL_INCOMING, 0);
return ret;
@@ -530,6 +533,8 @@ static int ipu6_isys_csi2_disable_streams(struct
v4l2_subdev *sd,
ipu6_isys_close_streaming_firmware(av);
+ list_del(&av->csi2_entry);
+
return 0;
}
@@ -675,6 +680,7 @@ int ipu6_isys_csi2_init(struct ipu6_isys_csi2 *csi2,
if (ret)
goto fail;
+ INIT_LIST_HEAD(&csi2->av_head);
csi2->asd.source = IPU6_FW_ISYS_STREAM_SRC_CSI2_PORT0 + index;
csi2->asd.supported_codes = csi2_supported_codes;
snprintf(csi2->asd.sd.name, sizeof(csi2->asd.sd.name),
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
index dbaaf00af623..7c936154691e 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
@@ -41,6 +41,7 @@ struct ipu6_isys_csi2 {
struct ipu6_isys_subdev asd;
struct ipu6_isys *isys;
struct ipu6_isys_video av[NR_OF_CSI2_SRC_PADS];
+ struct list_head av_head;
void __iomem *base;
u32 receiver_errors;
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h
b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h
index 4c890c6af8f5..cb4b45f0dae2 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h
@@ -78,6 +78,7 @@ struct video_stream_watermark {
struct ipu6_isys_video {
struct ipu6_isys_queue aq;
+ struct list_head csi2_entry;
/* Serialise access to other fields in the struct. */
struct mutex mutex;
struct media_pad pad;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]