[PATCH 03/13] media: stm32: dcmipp: bytecap: protect CMIER register access
Alain Volmat
alain.volmat at foss.st.com
Mon Feb 2 05:57:28 PST 2026
CMIER register is common between all pipes and thus needs to be
protected from concurrent access. The struct v4l2_device structure,
unique to the whole driver embeds a spin_lock which can also be used
by the driver itself as explained in its description. Rely on this
spin_lock to protect from concurrent access to the CMIER register.
Signed-off-by: Alain Volmat <alain.volmat at foss.st.com>
---
drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
index 1b7edf0d2938..0b1d1fbda5d6 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
@@ -436,7 +436,9 @@ static int dcmipp_bytecap_start_streaming(struct vb2_queue *vq,
dcmipp_start_capture(vcap, vcap->next);
/* Enable interruptions */
+ spin_lock(&vcap->vdev.v4l2_dev->lock);
reg_set(vcap, DCMIPP_CMIER, DCMIPP_CMIER_P0ALL);
+ spin_unlock(&vcap->vdev.v4l2_dev->lock);
vcap->state = DCMIPP_RUNNING;
@@ -492,7 +494,9 @@ static void dcmipp_bytecap_stop_streaming(struct vb2_queue *vq)
media_pipeline_stop(vcap->vdev.entity.pads);
/* Disable interruptions */
+ spin_lock(&vcap->vdev.v4l2_dev->lock);
reg_clear(vcap, DCMIPP_CMIER, DCMIPP_CMIER_P0ALL);
+ spin_unlock(&vcap->vdev.v4l2_dev->lock);
/* Stop capture */
reg_clear(vcap, DCMIPP_P0FCTCR, DCMIPP_P0FCTCR_CPTREQ);
--
2.34.1
More information about the linux-arm-kernel
mailing list