OSDN Git Service

media: rcar-vin: Add check for completed capture before completing buffer
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Tue, 23 Nov 2021 15:54:43 +0000 (16:54 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 7 Dec 2021 10:29:54 +0000 (11:29 +0100)
Before reading which slot was captured to by examining the module status
(VnMS) register, make sure something was captured at all by examining
the interrupt status register (VnINTS).

Failing this a buffer maybe completed before it was captured too.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/rcar-vin/rcar-dma.c

index 79bb908..8136bc7 100644 (file)
 #define VNIE_FIE               (1 << 4)
 #define VNIE_EFE               (1 << 1)
 
+/* Video n Interrupt Status Register bits */
+#define VNINTS_FIS             (1 << 4)
+
 /* Video n Data Mode Register bits */
 #define VNDMR_A8BIT(n)         (((n) & 0xff) << 24)
 #define VNDMR_A8BIT_MASK       (0xff << 24)
@@ -1005,6 +1008,10 @@ static irqreturn_t rvin_irq(int irq, void *data)
        rvin_ack_interrupt(vin);
        handled = 1;
 
+       /* Nothing to do if nothing was captured. */
+       if (!(int_status & VNINTS_FIS))
+               goto done;
+
        /* Nothing to do if capture status is 'STOPPED' */
        if (vin->state == STOPPED) {
                vin_dbg(vin, "IRQ while state stopped\n");