[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