|
@@ -674,7 +674,14 @@ omap_i2c_isr(int this_irq, void *dev_id)
|
|
|
|
|
|
err = 0;
|
|
|
complete:
|
|
|
- omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
|
|
|
+ /*
|
|
|
+ * Ack the stat in one go, but [R/X]DR and [R/X]RDY should be
|
|
|
+ * acked after the data operation is complete.
|
|
|
+ * Ref: TRM SWPU114Q Figure 18-31
|
|
|
+ */
|
|
|
+ omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat &
|
|
|
+ ~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR |
|
|
|
+ OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
|
|
|
|
|
|
if (stat & OMAP_I2C_STAT_NACK) {
|
|
|
err |= OMAP_I2C_STAT_NACK;
|