[PATCH v5 03/14] media: stm32: dcmipp: bytecap: protect CMIER register access
Alain Volmat <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-media |
|---|---|
| Message-ID | <20260821-stm32-dcmipp-pixel-pipes-support-v5-3-d140efb61d72@foss.st.com> |
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 <[email protected]> --- 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 0e789bbd1198b..f6011b42203c7 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c @@ -438,7 +438,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; @@ -494,7 +496,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