|
@@ -692,9 +692,10 @@ omap_i2c_isr(int this_irq, void *dev_id)
|
|
|
if (dev->fifo_size) {
|
|
|
if (stat & OMAP_I2C_STAT_RRDY)
|
|
|
num_bytes = dev->fifo_size;
|
|
|
- else
|
|
|
- num_bytes = omap_i2c_read_reg(dev,
|
|
|
- OMAP_I2C_BUFSTAT_REG);
|
|
|
+ else /* read RXSTAT on RDR interrupt */
|
|
|
+ num_bytes = (omap_i2c_read_reg(dev,
|
|
|
+ OMAP_I2C_BUFSTAT_REG)
|
|
|
+ >> 8) & 0x3F;
|
|
|
}
|
|
|
while (num_bytes) {
|
|
|
num_bytes--;
|
|
@@ -731,9 +732,10 @@ omap_i2c_isr(int this_irq, void *dev_id)
|
|
|
if (dev->fifo_size) {
|
|
|
if (stat & OMAP_I2C_STAT_XRDY)
|
|
|
num_bytes = dev->fifo_size;
|
|
|
- else
|
|
|
+ else /* read TXSTAT on XDR interrupt */
|
|
|
num_bytes = omap_i2c_read_reg(dev,
|
|
|
- OMAP_I2C_BUFSTAT_REG);
|
|
|
+ OMAP_I2C_BUFSTAT_REG)
|
|
|
+ & 0x3F;
|
|
|
}
|
|
|
while (num_bytes) {
|
|
|
num_bytes--;
|