From: Anders Berg <anders.b...@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.b...@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

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to