[PATCH 0/3] i2c: designware: Improve support of multi-messages transfer

Benoît Monin
2025-10-17T15:01:57Z

Extend what can be done when transferring multiple messages in a single
call to .xfer().

Allow changing the target address by waiting for a STOP then looping
in i2c_dw_xfer() instead of erroring out when a change of address is
detected. The loop then re-run i2c_dw_xfer_init() which changes the
target address and restart the transfer for the rest of the messages.

Handle controllers that lack the ability to emit a RESTART when two
consecutive messages have the same address and direction, by waiting
for a STOP and restarting the rest of the transfer.

The i2c controllers found in the EyeQ6Lplus and EyeQ7H SoC from
Mobileye lack such capability, so compatible strings are added because
this cannot be detected at runtime.

Signed-off-by: Benoît Monin <benoit.monin@bootlin.com>
---
Benoît Monin (3):
dt-bindings: i2c: dw: Add Mobileye I2C controllers
i2c: designware: Enable transfer with different target addresses
i2c: designware: Support of controller with IC_EMPTYFIFO_HOLD_MASTER disabled

.../bindings/i2c/snps,designware-i2c.yaml | 2 +
drivers/i2c/busses/i2c-designware-core.h | 1 +
drivers/i2c/busses/i2c-designware-master.c | 97 ++++++++++++++--------
drivers/i2c/busses/i2c-designware-platdrv.c | 6 +-
4 files changed, 68 insertions(+), 38 deletions(-)
---
base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
change-id: 20251014-i2c-dw-da315f758296

Best regards,
--
Benoît Monin, Bootlin
Embedded Linux and Kernel engineering