]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: rzg2l-cru: Modernize locking usage with guards
authorJacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
Wed, 11 Feb 2026 08:24:06 +0000 (09:24 +0100)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Tue, 19 May 2026 07:01:49 +0000 (09:01 +0200)
Use more modern lock guard constructs to express the locking sequences
in the rzg2l driver. Also include spinlock.h and mutex.h that were
previously missing.

Signed-off-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Tested-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Reviewed-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c

index 3a200db1573088777aa16d6bba6cce4c3b8cc067..be4a9a4953d10876375dc8b5dab34e97332fcdb6 100644 (file)
@@ -9,7 +9,9 @@
 #define __RZG2L_CRU__
 
 #include <linux/irqreturn.h>
+#include <linux/mutex.h>
 #include <linux/reset.h>
+#include <linux/spinlock.h>
 
 #include <media/v4l2-async.h>
 #include <media/v4l2-dev.h>
index 98b6afbc708dc29540b96d5687ebd76dc78fe062..0739169f4439be4879d0683bb411d29621b90e58 100644 (file)
@@ -110,10 +110,10 @@ static void return_unused_buffers(struct rzg2l_cru_dev *cru,
                                  enum vb2_buffer_state state)
 {
        struct rzg2l_cru_buffer *buf, *node;
-       unsigned long flags;
        unsigned int i;
 
-       spin_lock_irqsave(&cru->qlock, flags);
+       guard(spinlock_irqsave)(&cru->qlock);
+
        for (i = 0; i < cru->num_buf; i++) {
                if (cru->queue_buf[i]) {
                        vb2_buffer_done(&cru->queue_buf[i]->vb2_buf,
@@ -126,7 +126,6 @@ static void return_unused_buffers(struct rzg2l_cru_dev *cru,
                vb2_buffer_done(&buf->vb.vb2_buf, state);
                list_del(&buf->list);
        }
-       spin_unlock_irqrestore(&cru->qlock, flags);
 }
 
 static int rzg2l_cru_queue_setup(struct vb2_queue *vq, unsigned int *nbuffers,
@@ -165,13 +164,9 @@ static void rzg2l_cru_buffer_queue(struct vb2_buffer *vb)
 {
        struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct rzg2l_cru_dev *cru = vb2_get_drv_priv(vb->vb2_queue);
-       unsigned long flags;
-
-       spin_lock_irqsave(&cru->qlock, flags);
 
+       guard(spinlock_irqsave)(&cru->qlock);
        list_add_tail(to_buf_list(vbuf), &cru->buf_list);
-
-       spin_unlock_irqrestore(&cru->qlock, flags);
 }
 
 static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_dev *cru,
@@ -465,7 +460,6 @@ void rzg2l_cru_disable_interrupts(struct rzg2l_cru_dev *cru)
 int rzg2l_cru_start_image_processing(struct rzg2l_cru_dev *cru)
 {
        struct v4l2_mbus_framefmt *fmt = rzg2l_cru_ip_get_src_fmt(cru);
-       unsigned long flags;
        u8 csi_vc;
        int ret;
 
@@ -475,7 +469,7 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_dev *cru)
        csi_vc = ret;
        cru->svc_channel = csi_vc;
 
-       spin_lock_irqsave(&cru->qlock, flags);
+       guard(spinlock_irqsave)(&cru->qlock);
 
        /* Select a video input */
        rzg2l_cru_write(cru, CRUnCTRL, CRUnCTRL_VINSEL(0));
@@ -492,7 +486,6 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_dev *cru)
        /* Initialize image convert */
        ret = rzg2l_cru_initialize_image_conv(cru, fmt, csi_vc);
        if (ret) {
-               spin_unlock_irqrestore(&cru->qlock, flags);
                return ret;
        }
 
@@ -502,8 +495,6 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_dev *cru)
        /* Enable image processing reception */
        rzg2l_cru_write(cru, ICnEN, ICnEN_ICEN);
 
-       spin_unlock_irqrestore(&cru->qlock, flags);
-
        return 0;
 }
 
@@ -573,16 +564,15 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
 {
        struct rzg2l_cru_dev *cru = data;
        unsigned int handled = 0;
-       unsigned long flags;
        u32 irq_status;
        u32 amnmbs;
        int slot;
 
-       spin_lock_irqsave(&cru->qlock, flags);
+       guard(spinlock_irqsave)(&cru->qlock);
 
        irq_status = rzg2l_cru_read(cru, CRUnINTS);
        if (!irq_status)
-               goto done;
+               return IRQ_RETVAL(handled);
 
        handled = 1;
 
@@ -591,14 +581,14 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
        /* Nothing to do if capture status is 'RZG2L_CRU_DMA_STOPPED' */
        if (cru->state == RZG2L_CRU_DMA_STOPPED) {
                dev_dbg(cru->dev, "IRQ while state stopped\n");
-               goto done;
+               return IRQ_RETVAL(handled);
        }
 
        /* Increase stop retries if capture status is 'RZG2L_CRU_DMA_STOPPING' */
        if (cru->state == RZG2L_CRU_DMA_STOPPING) {
                if (irq_status & CRUnINTS_SFS)
                        dev_dbg(cru->dev, "IRQ while state stopping\n");
-               goto done;
+               return IRQ_RETVAL(handled);
        }
 
        /* Prepare for capture and update state */
@@ -621,7 +611,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
        if (cru->state == RZG2L_CRU_DMA_STARTING) {
                if (slot != 0) {
                        dev_dbg(cru->dev, "Starting sync slot: %d\n", slot);
-                       goto done;
+                       return IRQ_RETVAL(handled);
                }
 
                dev_dbg(cru->dev, "Capture start synced!\n");
@@ -646,9 +636,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
        /* Prepare for next frame */
        rzg2l_cru_fill_hw_slot(cru, slot);
 
-done:
-       spin_unlock_irqrestore(&cru->qlock, flags);
-
        return IRQ_RETVAL(handled);
 }