mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-21 02:16:07 -04:00
media: sun6i-csi: Add extra checks to the interrupt routine
Check against the enabled bits and make sure capture is running before serving an interrupt, to add extra safety in the process. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
5d34d90fff
commit
4656d8ab4b
@@ -89,13 +89,17 @@ static void sun6i_csi_v4l2_cleanup(struct sun6i_csi_device *csi_dev)
|
||||
static irqreturn_t sun6i_csi_interrupt(int irq, void *private)
|
||||
{
|
||||
struct sun6i_csi_device *csi_dev = private;
|
||||
bool capture_streaming = csi_dev->capture.state.streaming;
|
||||
struct regmap *regmap = csi_dev->regmap;
|
||||
u32 status;
|
||||
u32 status = 0, enable = 0;
|
||||
|
||||
regmap_read(regmap, SUN6I_CSI_CH_INT_STA_REG, &status);
|
||||
regmap_read(regmap, SUN6I_CSI_CH_INT_EN_REG, &enable);
|
||||
|
||||
if (!(status & 0xFF))
|
||||
if (!status)
|
||||
return IRQ_NONE;
|
||||
else if (!(status & enable) || !capture_streaming)
|
||||
goto complete;
|
||||
|
||||
if ((status & SUN6I_CSI_CH_INT_STA_FIFO0_OF) ||
|
||||
(status & SUN6I_CSI_CH_INT_STA_FIFO1_OF) ||
|
||||
@@ -116,6 +120,7 @@ static irqreturn_t sun6i_csi_interrupt(int irq, void *private)
|
||||
if (status & SUN6I_CSI_CH_INT_STA_VS)
|
||||
sun6i_csi_capture_sync(csi_dev);
|
||||
|
||||
complete:
|
||||
regmap_write(regmap, SUN6I_CSI_CH_INT_STA_REG, status);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
||||
Reference in New Issue
Block a user