media: rkisp1: Fix IRQ handler return values
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Thu, 7 Dec 2023 07:57:46 +0000 (08:57 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 5 Feb 2024 20:14:27 +0000 (20:14 +0000)
[ Upstream commit 3eb7910e1b16a2c136be26a8380f21469225b2f6 ]

The IRQ handler rkisp1_isr() calls sub-handlers, all of which returns an
irqreturn_t value, but rkisp1_isr() ignores those values and always
returns IRQ_HANDLED.

Fix this by collecting the return values, and returning IRQ_HANDLED or
IRQ_NONE as appropriate.

Link: https://lore.kernel.org/r/20231207-rkisp-irq-fix-v3-2-358a2c871a3c@ideasonboard.com
Tested-by: Adam Ford <aford173@gmail.com> #imx8mp-beacon
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c

index b676db9..7b8a361 100644 (file)
@@ -442,17 +442,25 @@ error:
 
 static irqreturn_t rkisp1_isr(int irq, void *ctx)
 {
+       irqreturn_t ret = IRQ_NONE;
+
        /*
         * Call rkisp1_capture_isr() first to handle the frame that
         * potentially completed using the current frame_sequence number before
         * it is potentially incremented by rkisp1_isp_isr() in the vertical
         * sync.
         */
-       rkisp1_capture_isr(irq, ctx);
-       rkisp1_isp_isr(irq, ctx);
-       rkisp1_csi_isr(irq, ctx);
 
-       return IRQ_HANDLED;
+       if (rkisp1_capture_isr(irq, ctx) == IRQ_HANDLED)
+               ret = IRQ_HANDLED;
+
+       if (rkisp1_isp_isr(irq, ctx) == IRQ_HANDLED)
+               ret = IRQ_HANDLED;
+
+       if (rkisp1_csi_isr(irq, ctx) == IRQ_HANDLED)
+               ret = IRQ_HANDLED;
+
+       return ret;
 }
 
 static const char * const px30_isp_clks[] = {