media: ti-vpe: cal: fix disable_irqs to only the intended target
authorBenoit Parrot <bparrot@ti.com>
Mon, 2 Mar 2020 13:56:52 +0000 (14:56 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Apr 2020 06:00:35 +0000 (08:00 +0200)
commit 1db56284b9da9056093681f28db48a09a243274b upstream.

disable_irqs() was mistakenly disabling all interrupts when called.
This cause all port stream to stop even if only stopping one of them.

Cc: stable <stable@vger.kernel.org>
Signed-off-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/platform/ti-vpe/cal.c

index 42e383a48ffe896f4539684a15b7eacd853d4bc5..b6dcae1ecc1be1f60db30af7c7a07dbe6ed4b522 100644 (file)
@@ -544,16 +544,16 @@ static void enable_irqs(struct cal_ctx *ctx)
 
 static void disable_irqs(struct cal_ctx *ctx)
 {
+       u32 val;
+
        /* Disable IRQ_WDMA_END 0/1 */
-       reg_write_field(ctx->dev,
-                       CAL_HL_IRQENABLE_CLR(2),
-                       CAL_HL_IRQ_CLEAR,
-                       CAL_HL_IRQ_MASK(ctx->csi2_port));
+       val = 0;
+       set_field(&val, CAL_HL_IRQ_CLEAR, CAL_HL_IRQ_MASK(ctx->csi2_port));
+       reg_write(ctx->dev, CAL_HL_IRQENABLE_CLR(2), val);
        /* Disable IRQ_WDMA_START 0/1 */
-       reg_write_field(ctx->dev,
-                       CAL_HL_IRQENABLE_CLR(3),
-                       CAL_HL_IRQ_CLEAR,
-                       CAL_HL_IRQ_MASK(ctx->csi2_port));
+       val = 0;
+       set_field(&val, CAL_HL_IRQ_CLEAR, CAL_HL_IRQ_MASK(ctx->csi2_port));
+       reg_write(ctx->dev, CAL_HL_IRQENABLE_CLR(3), val);
        /* Todo: Add VC_IRQ and CSI2_COMPLEXIO_IRQ handling */
        reg_write(ctx->dev, CAL_CSI2_VC_IRQENABLE(1), 0);
 }