On Thu, Apr 01, 2010 at 08:53:04AM -0500, Nishanth Menon wrote: > G, Manjunath Kondaiah had written, on 04/01/2010 07:20 AM, the following: > >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@xxxxxx> > >Signed-off-by: Manjunatha GK <manjugk@xxxxxx> > >Cc: linux-omap@xxxxxxxxxxxxxxx > >Cc: linux-i2c@xxxxxxxxxxxxxxx > >Cc: ben-linux@xxxxxxxxx > >Cc: Kalliguddi, Hema <hemahk@xxxxxx> > >--- > > 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; > >+ } > couple of comments after reading thru the errata: > a) the sequence in the errata doc is: > if (stat & OMAP_I2C_STAT_RDR) { /* This is cleaner that using an > obtuse check using !(stat & OMAP_I2C_STAT_RRDY) */ > omap_i2c_ack_stat(dev, stat & OMAP_I2C_STAT_RDR); /* dummy read - i > think this needs clarification as to why */ > if (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) & OMAP_I2C_STAT_BB) > /* reason for the i2c_read_reg is because errata mentions a dummy > stat read which might mean something for BB -> I am not sure may > need to be checked with H/w team. */ > continue; /* recheck - faster response compared to return and re > generate interrupt */ > } > > > b) does this apply to OMAP2 and OMAP4? Ok, should this be held for further discussion? -- Ben (ben@xxxxxxxxx, http://www.fluff.org/) 'a smiley only costs 4 bytes' -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html