[linux-yocto] [PATCH 138/161] i2c: axxia: Report spurious IRQ
Cristian Bercaru
cristian.bercaru at windriver.com
Thu May 21 12:22:00 PDT 2015
From: Anders Berg <anders.berg at avagotech.com>
Fixed ISR to return IRQ_NONE if no interrupt was pending (or no transfer
was in progress).
Signed-off-by: Anders Berg <anders.berg at avagotech.com>
---
drivers/i2c/busses/i2c-axxia.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/i2c/busses/i2c-axxia.c b/drivers/i2c/busses/i2c-axxia.c
index 7355975..e965793 100644
--- a/drivers/i2c/busses/i2c-axxia.c
+++ b/drivers/i2c/busses/i2c-axxia.c
@@ -223,6 +223,9 @@ axxia_i2c_init(struct axxia_i2c_dev *idev)
/* Timeout in divided clocks */
writel((1<<15) | tmo_clk, &idev->regs->wait_timer_control);
+ /* Mask all master interrupt bits */
+ i2c_int_disable(idev, ~0);
+
/* Interrupt enable */
writel(0x01, &idev->regs->interrupt_enable);
@@ -332,6 +335,12 @@ axxia_i2c_isr(int irq, void *_dev)
struct axxia_i2c_dev *idev = _dev;
u32 status = readl(&idev->regs->mst_int_status);
+ if ((readl(&idev->regs->interrupt_status) & 0x1) == 0)
+ return IRQ_NONE;
+
+ if (!idev->msg)
+ return IRQ_NONE;
+
/* Clear interrupt */
writel(0x01, &idev->regs->interrupt_status);
--
1.7.9.5
More information about the linux-yocto
mailing list