On Tue Dec 9 14:34:15 2025 +0200, Sakari Ailus wrote:
> Collect enable stream IDs as streaming is enabled on video nodes. These
> values will be needed once streaming actually starts. This is required for
> multiple streams from a single source.
> 
> 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 | 25 ++++++++++++++++---------
 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h |  1 +
 2 files changed, 17 insertions(+), 9 deletions(-)

---

diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c 
b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
index 347bbeec84c7..eb762dd402c4 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
@@ -518,6 +518,10 @@ static int ipu6_isys_csi2_streaming_change(struct 
ipu6_isys_subdev *asd,
                return 1;
        }
 
+       dev_dbg(asd->sd.dev, "not setting streaming %s %s (%u/%u)\n",
+               str_enabled_disabled(enable), enable ? "yet" : "anymore",
+               nodes_streaming, streams_enabled);
+
        return 0;
 }
 
@@ -548,6 +552,11 @@ static int ipu6_isys_csi2_enable_streams(struct 
v4l2_subdev *sd,
 
        list_add(&av->csi2_entry, &csi2->av_head);
 
+       sink_streams =
+               v4l2_subdev_state_xlate_streams(state, pad, CSI2_PAD_SINK,
+                                               &streams_mask);
+       csi2->stream_ids |= sink_streams;
+
        ret = ipu6_isys_csi2_streaming_change(asd, state, pad, &vc, true);
        if (ret <= 0)
                return ret;
@@ -558,13 +567,6 @@ static int ipu6_isys_csi2_enable_streams(struct 
v4l2_subdev *sd,
                goto err_return_buffers;
        }
 
-       remote_pad = 
media_pad_remote_pad_first(&sd->entity.pads[CSI2_PAD_SINK]);
-       remote_sd = media_entity_to_v4l2_subdev(remote_pad->entity);
-
-       sink_streams =
-               v4l2_subdev_state_xlate_streams(state, pad, CSI2_PAD_SINK,
-                                               &streams_mask);
-
        if (!csi2->streaming_vc) {
                ret = IS_IPU7(isp) ? ipu7_isys_csi2_stream_enable(csi2) :
                                     ipu6_isys_csi2_stream_enable(csi2);
@@ -572,8 +574,11 @@ static int ipu6_isys_csi2_enable_streams(struct 
v4l2_subdev *sd,
                        goto err_stop_stream_firmware;
        }
 
+       remote_pad = 
media_pad_remote_pad_first(&sd->entity.pads[CSI2_PAD_SINK]);
+       remote_sd = media_entity_to_v4l2_subdev(remote_pad->entity);
+
        ret = v4l2_subdev_enable_streams(remote_sd, remote_pad->index,
-                                        sink_streams);
+                                        csi2->stream_ids);
        if (ret)
                goto err_stop_stream_csi2;
 
@@ -592,6 +597,7 @@ err_stop_stream_firmware:
        ipu6_isys_close_streaming_firmware(av);
 
 err_return_buffers:
+       csi2->stream_ids &= ~sink_streams;
        list_del(&av->csi2_entry);
        ipu6_isys_buffer_list_queue(&bl, IPU6_ISYS_BUFFER_LIST_FL_INCOMING, 0);
 
@@ -636,7 +642,8 @@ static int ipu6_isys_csi2_disable_streams(struct 
v4l2_subdev *sd,
        else
                ipu6_isys_csi2_stream_disable(csi2);
 
-       v4l2_subdev_disable_streams(remote_sd, remote_pad->index, sink_streams);
+       v4l2_subdev_disable_streams(remote_sd, remote_pad->index,
+                                   csi2->stream_ids);
 
        ipu6_isys_close_streaming_firmware(av);
 
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h 
b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
index a98a60e443c6..4d84899fde4c 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
@@ -50,6 +50,7 @@ struct ipu6_isys_csi2 {
        u32 legacy_irq_mask;
        unsigned int phy_mode;
        u32 streaming_vc;
+       u64 stream_ids;
 };
 
 struct ipu6_isys_csi2_timing {
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to