i2c: i2c-sh_mobile: fix spurious transfer request timed out
authorShinya Kuribayashi <shinya.kuribayashi.px@renesas.com>
Wed, 24 Oct 2012 10:58:31 +0000 (19:58 +0900)
committerWolfram Sang <w.sang@pengutronix.de>
Fri, 16 Nov 2012 08:09:13 +0000 (09:09 +0100)
Ensure that any of preceding register write operations to the I2C
hardware block reached the module, and the write data is reflected
in the registers, before leaving the interrupt handler.

Otherwise, we'll suffer from spurious WAIT interrupts that lead to
'Transfer request timed out' message, and the transaction failed.

Reported-by: Teppei Kamijou <teppei.kamijou.yb@renesas.com>
Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi.px@renesas.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
drivers/i2c/busses/i2c-sh_mobile.c

index 4c283583bea0cdbcc10ed7e3af9fde5cfeec71d9..9411c1b892c0b9d931f5ec7330e0bdd5baa0eda9 100644 (file)
@@ -469,6 +469,9 @@ static irqreturn_t sh_mobile_i2c_isr(int irq, void *dev_id)
                wake_up(&pd->wait);
        }
 
+       /* defeat write posting to avoid spurious WAIT interrupts */
+       iic_rd(pd, ICSR);
+
        return IRQ_HANDLED;
 }