|
@@ -48,12 +48,18 @@ static int i2c_slave_eeprom_slave_cb(struct i2c_client *client,
|
|
|
break;
|
|
|
|
|
|
case I2C_SLAVE_READ_PROCESSED:
|
|
|
+ /* The previous byte made it to the bus, get next one */
|
|
|
eeprom->buffer_idx++;
|
|
|
/* fallthrough */
|
|
|
case I2C_SLAVE_READ_REQUESTED:
|
|
|
spin_lock(&eeprom->buffer_lock);
|
|
|
*val = eeprom->buffer[eeprom->buffer_idx];
|
|
|
spin_unlock(&eeprom->buffer_lock);
|
|
|
+ /*
|
|
|
+ * Do not increment buffer_idx here, because we don't know if
|
|
|
+ * this byte will be actually used. Read Linux I2C slave docs
|
|
|
+ * for details.
|
|
|
+ */
|
|
|
break;
|
|
|
|
|
|
case I2C_SLAVE_STOP:
|