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]