Messages in this thread Patch in this message | | | Date | Thu, 27 Jul 2023 22:30:45 +0200 | From | Andi Shyti <> | Subject | Re: [PATCH] i2c: imx: add support for I2C_M_STOP flag |
| |
Hi Mans,
on top of Oleksij's comments...
[...]
> --- a/drivers/i2c/busses/i2c-imx.c > +++ b/drivers/i2c/busses/i2c-imx.c > @@ -1262,10 +1262,17 @@ static int i2c_imx_xfer_common(struct i2c_adapter *adapter, > > /* read/write data */ > for (i = 0; i < num; i++) { > - if (i == num - 1) > - is_lastmsg = true; > + if (is_lastmsg) { > + /* previous message had I2C_M_STOP flag set */ > + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); > + temp |= I2CR_MSTA; > + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); > + result = i2c_imx_bus_busy(i2c_imx, 1, atomic); > + if (result) > + goto fail0; > + } > > - if (i) { > + if (i && !is_lastmsg) {
} else if (i) {
looks a bit simplier to me.
> dev_dbg(&i2c_imx->adapter.dev, > "<%s> repeated start\n", __func__); > temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); > @@ -1275,6 +1282,10 @@ static int i2c_imx_xfer_common(struct i2c_adapter *adapter, > if (result) > goto fail0; > } > + > + if (i == num - 1 || (msgs[i].flags & I2C_M_STOP)) > + is_lastmsg = true;
you don't need this "i == num - 1" here.
Andi
> dev_dbg(&i2c_imx->adapter.dev, > "<%s> transfer message: %d\n", __func__, i); > /* write/read data */
| |