|
@@ -922,14 +922,12 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
|
|
if (stat & OMAP_I2C_STAT_NACK) {
|
|
if (stat & OMAP_I2C_STAT_NACK) {
|
|
err |= OMAP_I2C_STAT_NACK;
|
|
err |= OMAP_I2C_STAT_NACK;
|
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
|
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
|
|
- break;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (stat & OMAP_I2C_STAT_AL) {
|
|
if (stat & OMAP_I2C_STAT_AL) {
|
|
dev_err(dev->dev, "Arbitration lost\n");
|
|
dev_err(dev->dev, "Arbitration lost\n");
|
|
err |= OMAP_I2C_STAT_AL;
|
|
err |= OMAP_I2C_STAT_AL;
|
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
|
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
|
|
- break;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -954,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;
|
|
}
|
|
}
|