|
@@ -813,22 +813,7 @@ complete:
|
|
|
>> 8) & 0x3F;
|
|
|
}
|
|
|
while (num_bytes--) {
|
|
|
- w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
|
|
|
- if (dev->buf_len) {
|
|
|
- *dev->buf++ = w;
|
|
|
- dev->buf_len--;
|
|
|
- /*
|
|
|
- * Data reg in 2430, omap3 and
|
|
|
- * omap4 is 8 bit wide
|
|
|
- */
|
|
|
- if (dev->flags &
|
|
|
- OMAP_I2C_FLAG_16BIT_DATA_REG) {
|
|
|
- if (dev->buf_len) {
|
|
|
- *dev->buf++ = w >> 8;
|
|
|
- dev->buf_len--;
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
+ if (!dev->buf_len) {
|
|
|
if (stat & OMAP_I2C_STAT_RRDY)
|
|
|
dev_err(dev->dev,
|
|
|
"RRDY IRQ while no data"
|
|
@@ -839,6 +824,21 @@ complete:
|
|
|
" requested\n");
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
|
|
|
+ *dev->buf++ = w;
|
|
|
+ dev->buf_len--;
|
|
|
+ /*
|
|
|
+ * Data reg in 2430, omap3 and
|
|
|
+ * omap4 is 8 bit wide
|
|
|
+ */
|
|
|
+ if (dev->flags &
|
|
|
+ OMAP_I2C_FLAG_16BIT_DATA_REG) {
|
|
|
+ if (dev->buf_len) {
|
|
|
+ *dev->buf++ = w >> 8;
|
|
|
+ dev->buf_len--;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
omap_i2c_ack_stat(dev,
|
|
|
stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR));
|
|
@@ -855,22 +855,7 @@ complete:
|
|
|
& 0x3F;
|
|
|
}
|
|
|
while (num_bytes--) {
|
|
|
- w = 0;
|
|
|
- if (dev->buf_len) {
|
|
|
- w = *dev->buf++;
|
|
|
- dev->buf_len--;
|
|
|
- /*
|
|
|
- * Data reg in 2430, omap3 and
|
|
|
- * omap4 is 8 bit wide
|
|
|
- */
|
|
|
- if (dev->flags &
|
|
|
- OMAP_I2C_FLAG_16BIT_DATA_REG) {
|
|
|
- if (dev->buf_len) {
|
|
|
- w |= *dev->buf++ << 8;
|
|
|
- dev->buf_len--;
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
+ if (!dev->buf_len) {
|
|
|
if (stat & OMAP_I2C_STAT_XRDY)
|
|
|
dev_err(dev->dev,
|
|
|
"XRDY IRQ while no "
|
|
@@ -882,6 +867,20 @@ complete:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ w = *dev->buf++;
|
|
|
+ dev->buf_len--;
|
|
|
+ /*
|
|
|
+ * Data reg in 2430, omap3 and
|
|
|
+ * omap4 is 8 bit wide
|
|
|
+ */
|
|
|
+ if (dev->flags &
|
|
|
+ OMAP_I2C_FLAG_16BIT_DATA_REG) {
|
|
|
+ if (dev->buf_len) {
|
|
|
+ w |= *dev->buf++ << 8;
|
|
|
+ dev->buf_len--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if ((dev->errata & I2C_OMAP_ERRATA_I462) &&
|
|
|
errata_omap3_i462(dev, &stat, &err))
|
|
|
goto complete;
|