Hi Andrew, On Wed, Sep 22, 2021 at 6:14 PM Andrew Gabbasov <andrew_gabbasov@xxxxxxxxxx> wrote: > The smbus block read is not currently supported for rcar i2c devices. > This patchset adds the support to rcar i2c bus so that blocks of data > can be read using SMbus block reads.(using i2c_smbus_read_block_data() > function from the i2c-core-smbus.c). > > Inspired by commit 8e8782c71595 ("i2c: imx: add SMBus block read support") > > This patch (adapted) was tested with v4.14, but due to lack of real > hardware with SMBus block read operations support, using "simulation", > that is manual analysis of data, read from plain I2C devices with > SMBus block read request. > > Signed-off-by: Bhuvanesh Surachari <bhuvanesh_surachari@xxxxxxxxxx> > Signed-off-by: Andrew Gabbasov <andrew_gabbasov@xxxxxxxxxx> Thanks for your patch! > --- a/drivers/i2c/busses/i2c-rcar.c > +++ b/drivers/i2c/busses/i2c-rcar.c > @@ -429,9 +431,16 @@ static bool rcar_i2c_dma(struct rcar_i2c_priv *priv) > /* > * The last two bytes needs to be fetched using PIO in > * order for the STOP phase to work. > + * > + * For SMBus block read the first byte was received using PIO. So it might be easier to read, and more maintainable, to keep the old assignments: buf = priv->msg->buf; len = priv->msg->len - 2; and adjust them for SMBus afterwards: if (block_data) { /* For SMBus block read the first byte was received using PIO */ buf++; len--; } ? > */ > - buf = priv->msg->buf; > - len = priv->msg->len - 2; > + if (block_data) { > + buf = priv->msg->buf + 1; > + len = priv->msg->len - 3; > + } else { > + buf = priv->msg->buf; > + len = priv->msg->len - 2; > + } > } else { > /* > * First byte in message was sent using PIO. And below we have another case handling buf and len :-( So perhaps: buf = priv->msg->buf; len = priv->msg->len; if (read) { /* * The last two bytes needs to be fetched using PIO in * order for the STOP phase to work. */ len -= 2; } if (!read || block_data) { /* First byte in message was sent using PIO * buf++; len--; } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds