Message ID | 20220519124946.387373-1-dev_public@wujek.eu |
---|---|
State | New |
Headers | show |
Series | i2c: busses: i2c-cadence: fix message length when receive block message | expand |
diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c index 20ac432a37ea..65f1979d4e6f 100644 --- a/drivers/i2c/busses/i2c-cadence.c +++ b/drivers/i2c/busses/i2c-cadence.c @@ -830,6 +830,11 @@ static int cdns_i2c_process_msg(struct cdns_i2c *id, struct i2c_msg *msg, return -ETIMEDOUT; } + /* Update message len, as i2c/smbus driver (function + * i2c_smbus_xfer_emulated) relies on i2c device drivers to do this */ + if ((msg->flags & I2C_M_RECV_LEN) && (msg->flags & I2C_M_RD)) + msg->len = msg->buf[0] + 2; /* add len byte + PEC byte */ + cdns_i2c_writereg(CDNS_I2C_IXR_ALL_INTR_MASK, CDNS_I2C_IDR_OFFSET);
Needed by hwmon/pmbus_core driver to correctly calculate PEC. The hwmon/pmbus_core driver relies on bus drivers to update the message length of received block transfers. Only in this type of smbus transfer, in which the length is not known before the transfer is started. Signed-off-by: Adam Wujek <dev_public@wujek.eu> --- drivers/i2c/busses/i2c-cadence.c | 5 +++++ 1 file changed, 5 insertions(+) -- 2.17.1