i2c-omap: Fix I2C status ACK

I2C status ack for [RX]RDR and [RX]RDY could
cause race conditions of clearing the event
twice and a violation of the programing
sequence as defined in TRM This patch fixes
the same.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>

authored by Nishanth Menon and committed by Ben Dooks dcc4ec26 64f1607f

+8 -1
+8 -1
drivers/i2c/busses/i2c-omap.c
··· 674 674 675 675 err = 0; 676 676 complete: 677 - omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat); 677 + /* 678 + * Ack the stat in one go, but [R/X]DR and [R/X]RDY should be 679 + * acked after the data operation is complete. 680 + * Ref: TRM SWPU114Q Figure 18-31 681 + */ 682 + omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat & 683 + ~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | 684 + OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); 678 685 679 686 if (stat & OMAP_I2C_STAT_NACK) { 680 687 err |= OMAP_I2C_STAT_NACK;