Thread (9 messages) 9 messages, 3 authors, 2012-11-17
STALE4963d

[PATCH 5/5] i2c: i2c-sh_mobile: fix spurious transfer request timed out

From: Shinya Kuribayashi <hidden>
Date: 2012-10-24 10:58:31
Also in: linux-i2c, linux-sh
Subsystem: i2c subsystem, i2c subsystem host drivers, renesas r-car i2c drivers, the rest · Maintainers: Andi Shyti, Wolfram Sang, Linus Torvalds

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.

Tracked-down-by: Teppei Kamijou [off-list ref]
Signed-off-by: Shinya Kuribayashi <redacted>
---
 drivers/i2c/busses/i2c-sh_mobile.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index 4c28358..9411c1b 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -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;
 }
 
-- 
1.7.12.4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help