i2c: omap: fix i207 errata handling
commit6d9939f651
(i2c: omap: split out [XR]DR and [XR]RDY) changed the way how errata i207 (I2C: RDR Flag May Be Incorrectly Set) get handled.6d9939f651
code doesn't correspond to workaround provided by errata. According to errata ISR must filter out spurious RDR before data read not after. ISR must read RXSTAT to get number of bytes available to read. Because RDR could be set while there could no data in the receive FIFO. Restored pre6d9939f651
way of handling errata. Found by code review. Real impact haven't seen. Tested on Beagleboard XM C. Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com> Fixes:6d9939f651
i2c: omap: split out [XR]DR and [XR]RDY Tested-by: Felipe Balbi <balbi@ti.com> Reviewed-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
d39f77b06a
commit
ccfc866356
|
@ -952,11 +952,13 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
|
||||||
if (dev->fifo_size)
|
if (dev->fifo_size)
|
||||||
num_bytes = dev->buf_len;
|
num_bytes = dev->buf_len;
|
||||||
|
|
||||||
omap_i2c_receive_data(dev, num_bytes, true);
|
if (dev->errata & I2C_OMAP_ERRATA_I207) {
|
||||||
|
|
||||||
if (dev->errata & I2C_OMAP_ERRATA_I207)
|
|
||||||
i2c_omap_errata_i207(dev, stat);
|
i2c_omap_errata_i207(dev, stat);
|
||||||
|
num_bytes = (omap_i2c_read_reg(dev,
|
||||||
|
OMAP_I2C_BUFSTAT_REG) >> 8) & 0x3F;
|
||||||
|
}
|
||||||
|
|
||||||
|
omap_i2c_receive_data(dev, num_bytes, true);
|
||||||
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue