linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] OMAP3: I2C: Errata i207: Clear wrong RDR interrupt
@ 2010-04-01 12:20 Manjunatha GK
       [not found] ` <1270124427-11208-1-git-send-email-manjugk-l0cyMroinI0@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Manjunatha GK @ 2010-04-01 12:20 UTC (permalink / raw)
  To: ben-linux-elnMNo+KYs3YtjvyW6yDsg
  Cc: Manjunatha GK, linux-omap-u79uwXL29TY76Z2rM5mHXA,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA, Kalliguddi, Hema

Under certain rare conditions, I2C_STAT[13].RDR bit may be set
and the corresponding interrupt fire, even there is no data in
the receive FIFO, or the I2C data transfer is still ongoing.
These spurious RDR events must be ignored by the software.

This patch handles and ignores RDR spurious interrupts.

Reviewed-by: Kalliguddi, Hema <hemahk-l0cyMroinI0@public.gmane.org>
Signed-off-by: Manjunatha GK <manjugk-l0cyMroinI0@public.gmane.org>
Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org
Cc: Kalliguddi, Hema <hemahk-l0cyMroinI0@public.gmane.org>
---
 drivers/i2c/busses/i2c-omap.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index f2019d2..acf4076 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -796,6 +796,19 @@ complete:
 		}
 		if (stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR)) {
 			u8 num_bytes = 1;
+
+			/*
+			 * OMAP3 I2C Errata ID: i207
+			 * Under certain rare conditions, RDR could be set again
+			 * when the bus is busy, then clear and ignore the interrupt
+			 */
+			if (!(stat & OMAP_I2C_STAT_RRDY) && (stat &
+						OMAP_I2C_STAT_BB)) {
+				/* clear RDR */
+				omap_i2c_ack_stat(dev, stat & OMAP_I2C_STAT_RDR);
+				dev_err(dev->dev, "I2C: RDR when bus is busy.\n");
+				return IRQ_HANDLED;
+			}
 			if (dev->fifo_size) {
 				if (stat & OMAP_I2C_STAT_RRDY)
 					num_bytes = dev->fifo_size;
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-04-21 10:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-01 12:20 [PATCH] OMAP3: I2C: Errata i207: Clear wrong RDR interrupt Manjunatha GK
     [not found] ` <1270124427-11208-1-git-send-email-manjugk-l0cyMroinI0@public.gmane.org>
2010-04-01 13:53   ` Nishanth Menon
     [not found]     ` <4BB4A540.9080000-l0cyMroinI0@public.gmane.org>
2010-04-05 22:45       ` Ben Dooks
2010-04-21 10:39       ` G, Manjunath Kondaiah

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).