Comments
Patch
@@ -231,12 +231,6 @@ static void cpm_i2c_parse_message(struct i2c_adapter *adap,
dev_dbg(&adap->dev, "cpm_i2c_read(abyte=0x%x)\n", addr);
- out_be16(&rbdf->cbd_datlen, 0);
- out_be16(&rbdf->cbd_sc, BD_SC_EMPTY | BD_SC_INTRPT);
-
- if (rx + 1 == CPM_MAXBD)
- setbits16(&rbdf->cbd_sc, BD_SC_WRAP);
-
eieio();
setbits16(&tbdf->cbd_sc, BD_SC_READY);
} else {
@@ -328,6 +322,16 @@ static int cpm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
return -EINVAL;
}
+ /* Initialize rx queue */
+ for (i = 0; i < CPM_MAXBD; i++) {
+ rbdf = cpm->rbase + i;
+ out_be16(&rbdf->cbd_datlen, 0);
+ out_be16(&rbdf->cbd_sc, BD_SC_EMPTY | BD_SC_INTRPT);
+
+ if (i + 1 == CPM_MAXBD)
+ setbits16(&rbdf->cbd_sc, BD_SC_WRAP);
+ }
+
/* Reset to use first buffer */
out_be16(&i2c_ram->rbptr, in_be16(&i2c_ram->rbase));
out_be16(&i2c_ram->tbptr, in_be16(&i2c_ram->tbase));