diff mbox series

i2c: busses: i2c-cadence: fix message length when receive block message

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

Commit Message

Adam Wujek May 19, 2022, 12:50 p.m. UTC
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
diff mbox series

Patch

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);