* Jan Weitzel <j.weitzel@xxxxxxxxx> [110614 03:01]: > On OMAP4 OMAP_I2C_STAT_NACK is causing a timeout on the next access. > The isr cleans all flags in OMAP_I2C_CON_REG by setting OMAP_I2C_CON_STP > OMAP_I2C_CON_STP is also set in omap_i2c_xfer_msg on the last message. > > According to the TI TSR the sequence for OMAP_I2C_STAT_NACK and > OMAP_I2C_STAT_AL are nearly the same. > Removing the OMAP_I2C_CON_STP part in the isr fix the problem. > Tested on OMAP4430 and OMAP3530 (here NACK was not a problem) > > Signed-off-by: Jan Weitzel <j.weitzel@xxxxxxxxx> Please resend this to Ben Dooks and linux-i2c list Cc'd and also mention that this fixes booting on 2430sdp that's been failing for a while now. Acked-by: Tony Lindgren <tony@xxxxxxxxxxx> > --- > drivers/i2c/busses/i2c-omap.c | 6 ++---- > 1 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c > index 58a58c7..670f2a2 100644 > --- a/drivers/i2c/busses/i2c-omap.c > +++ b/drivers/i2c/busses/i2c-omap.c > @@ -836,11 +836,9 @@ complete: > ~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | > OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); > > - if (stat & OMAP_I2C_STAT_NACK) { > + if (stat & OMAP_I2C_STAT_NACK) > err |= OMAP_I2C_STAT_NACK; > - omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, > - OMAP_I2C_CON_STP); > - } > + > if (stat & OMAP_I2C_STAT_AL) { > dev_err(dev->dev, "Arbitration lost\n"); > err |= OMAP_I2C_STAT_AL; > -- > 1.7.0.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html