zephyr/drivers/i2c
Etienne Carriere 5740dfe77b drivers: i2c: stm32: fix write burst in RTIO drivers
Correct management of I2C write transfers that are driven from 2
I2C messages, one for the transfer of the address to write
to and a following message for the transfer of the data to be written.
In this case, no START and STOP bit should be triggered between the 2
I2C transfers.

In STM32 I2C v1 driver, this simply means not emitting a START
condition when the input sequence does not set the RESTART flag.

In STM32 I2C v2 driver, this can only be achieved using the SoC I2C
controller Reload Mode feature, hence update Reload Mode implementation
to use reload mode for both transfers over 255 bytes (splitted in
chunks) and for cases where no STOP and START bits are emitted between
2 transfer in the same transaction.

Regarding STM32 I2C v2 driver, the reload mode must be enable before the
first transaction, known that it's needed due to the following
transaction. Therefore we need to parse the messages grouped in the same
transaction to detect such sequences (a message without STOP flag
followed by a message without RESTART flag) and when so, pass the
information to the I2C driver through RTIO framework. To achieve that,
let's use a free bit from I2C message flags (bit 7) in the message
for which we need to enable SoC ReloadMode from the first transfer.
We check that this bit flag is not used by the I2C framework prior
using it.

Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
2025-06-23 12:47:00 -07:00
..
target drivers: i2c: Add zephyr-keep-sorted defines 2025-01-08 01:30:34 +01:00
CMakeLists.txt drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
gpio_i2c_switch.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_ambiq.c drivers: i2c: ambiq: buffer overflow issue fixed 2025-06-19 22:31:06 -07:00
i2c_andes_atciic100.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_andes_atciic100.h
i2c_b91.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_bcm_iproc.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_bitbang.c drivers: i2c: Add support for clock stretching in the i2c-gpio module. 2025-05-31 06:55:10 -04:00
i2c_bitbang.h drivers: i2c: Add support for clock stretching in the i2c-gpio module. 2025-05-31 06:55:10 -04:00
i2c_cc13xx_cc26xx.c drivers: i2c: cc13xx_cc26xx: Add support for I2C_MSG_RESTART 2025-01-14 17:57:40 +01:00
i2c_cc32xx.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_cdns.c drivers: i2c: Add Cadence I2C support 2025-03-12 19:02:04 +01:00
i2c_common.c
i2c_dw_registers.h drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
i2c_dw.c drivers: i2c: i2c_dw: only includ cmsis_core on ARM platforms 2025-06-11 08:20:40 +02:00
i2c_dw.h drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
i2c_emul.c drivers,test: use the new DT_FOREACH_PROP_ELEM_SEP 2025-02-04 09:18:55 +01:00
i2c_ene_kb1200.c driver: i2c: ene_kb1200 i2c slave address 2025-04-22 09:58:32 +02:00
i2c_esp32.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_gd32.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_gecko.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_gpio.c drivers: i2c: Add support for clock stretching in the i2c-gpio module. 2025-05-31 06:55:10 -04:00
i2c_handlers.c build: namespace the generated headers with zephyr/ 2024-05-28 22:03:55 +02:00
i2c_ifx_cat1.c drivers: ifx_cat1: Updates to support latest version of HAL/PDL 2025-01-14 20:49:14 +01:00
i2c_ifx_xmc4.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_imx.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_ite_enhance.c drivers/i2c: ite: Add handling for read operation with 0-byte length 2025-05-29 10:46:47 +02:00
i2c_ite_it8xxx2.c drivers/i2c: ite: Use i2c_bitbang API for bus recovery 2025-04-17 09:06:29 +02:00
i2c_ite_it51xxx.c drivers/i2c: Add I2C driver of it51xxx 2025-04-29 16:48:06 +02:00
i2c_litex_litei2c.c drivers: i2c: litex: add mutex in litei2c 2025-03-27 14:01:11 +01:00
i2c_litex.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_ll_stm32_common.c drivers: i2c: move functions to a common file 2025-05-22 20:56:28 +02:00
i2c_ll_stm32_rtio.c drivers: i2c: stm32: fix write burst in RTIO drivers 2025-06-23 12:47:00 -07:00
i2c_ll_stm32_v1_rtio.c drivers: i2c: stm32: fix write burst in RTIO drivers 2025-06-23 12:47:00 -07:00
i2c_ll_stm32_v1.c drivers: i2c: move functions to a common file 2025-05-22 20:56:28 +02:00
i2c_ll_stm32_v2_rtio.c drivers: i2c: stm32: fix write burst in RTIO drivers 2025-06-23 12:47:00 -07:00
i2c_ll_stm32_v2.c drivers: i2c: stm32: fix some macro name 2025-06-12 11:33:48 +02:00
i2c_ll_stm32.c drivers: i2c: stm32: Fix size calculation of n_timings 2025-05-27 17:55:36 +02:00
i2c_ll_stm32.h drivers: i2c: stm32: fix write burst in RTIO drivers 2025-06-23 12:47:00 -07:00
i2c_lpc11u6x.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_lpc11u6x.h
i2c_max32_rtio.c drivers: i2c_rtio: max32: Inform the rtio executor on errors 2025-04-22 12:10:12 +02:00
i2c_max32.c drivers: i2c: Update driver to enable I2C for MAX32650 SoC 2025-05-14 11:03:22 +01:00
i2c_mchp_mss.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_mchp_xec_v2.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_mchp_xec.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_mcux_flexcomm.c pm: policy: remove redundant ifdef exclusion of device_power_lock 2025-06-05 09:34:31 +02:00
i2c_mcux_lpi2c_rtio.c drivers: i2c_rtio: MCUX LPflexcomm determine by inst 2025-04-14 23:06:53 +02:00
i2c_mcux_lpi2c.c i2c_mcux_lpspi: LPflexcomm determine by inst 2025-01-21 19:28:01 +01:00
i2c_mcux.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_nios2.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_npcx_controller.c drivers: i2c: npcx: prevent unexpected target address match ISR 2025-06-17 08:20:39 +02:00
i2c_npcx_controller.h drivers: i2c: npcx: add support to wake up from sleep mode 2025-01-20 07:05:48 +01:00
i2c_npcx_port.c drivers: i2c: npcx: add support for multi-address in target mode 2025-03-25 08:43:52 +01:00
i2c_nrfx_twi_common.c
i2c_nrfx_twi_common.h drivers: i2c: nrfx_twi[m]: default to I2C_BITRATE_STANDARD 2024-10-29 09:27:05 -07:00
i2c_nrfx_twi_rtio.c drivers: i2c: nrfx_twi_rtio: support RTIO_OP_AWAIT 2025-04-29 16:47:26 +02:00
i2c_nrfx_twi.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_nrfx_twim_common.c i2c: i2c_nrfx_twim: update callback context to dev 2024-10-21 15:53:05 +02:00
i2c_nrfx_twim_common.h drivers: i2c: nrfx_twi[m]: default to I2C_BITRATE_STANDARD 2024-10-29 09:27:05 -07:00
i2c_nrfx_twim_rtio.c drivers: i2c: nrfx_twim_rtio: support RTIO_OP_AWAIT 2025-04-29 16:47:26 +02:00
i2c_nrfx_twim.c drivers: i2c_nrfx_twim: add exclusive access API 2025-03-27 17:17:32 +01:00
i2c_nrfx_twis.c drivers: i2c: i2c_nrfx_twis: patch dma buf mem section 2025-02-10 14:32:52 +01:00
i2c_numaker.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_nxp_ii2c.c drivers: i2c: add NXP i2c driver used on imx8m platforms 2025-01-24 19:15:57 +01:00
i2c_omap.c drivers: i2c: omap: Make reg pointers volatile 2025-06-02 17:37:43 +02:00
i2c_rcar.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_realtek_rts5912.c drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
i2c_realtek_rts5912.h drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
i2c_renesas_ra_iic.c drivers: Correct value of event macro for all Renesas SoC 2025-02-28 18:29:17 +01:00
i2c_renesas_ra_sci_b.c drivers: Update dtc transfer info alignment 2025-05-30 10:26:34 +02:00
i2c_renesas_rz_riic.c drivers: i2c: Initial support for RZ/G3S 2025-03-07 19:45:11 +01:00
i2c_rtio_default.c i2c: Fix default RTIO handler transactions 2024-10-22 18:29:34 -04:00
i2c_rtio.c drivers: i2c: rtio 2025-03-07 19:43:22 +01:00
i2c_rv32m1_lpi2c.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_sam0.c clocks: atmel: sam0: Fix gclk and mclk clock bindings 2025-01-14 20:49:03 +01:00
i2c_sam4l_twim.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_sam_twi.c drivers: i2c: sam: update i2c_clock_set() for sama7g5 FLEXCOM TWI 2025-06-22 18:44:04 -07:00
i2c_sam_twihs_rtio.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_sam_twihs.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_sbcon.c drivers: i2c: add pinctrl support to Arm sbcon driver 2025-04-07 15:18:10 +02:00
i2c_sc18im704.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_sc18im704.h
i2c_sedi.c drivers: sedi: Update device definition macros to use DT_INST variants 2025-01-08 19:10:52 +01:00
i2c_shell.c i2c: Add target related commands to the shell module 2025-06-16 14:13:13 +02:00
i2c_sifive.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_smartbond.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_sy1xx.c drivers: i2c: sy1xx add support for i2c 2025-03-14 14:39:55 +01:00
i2c_tca954x.c drivers: i2c: tca954x: add support for idle disconnect 2025-04-04 18:17:07 +02:00
i2c_test.c drivers: i2c: Place API into iterable section 2024-12-16 18:25:36 +01:00
i2c_wch.c drivers: wch: fix the ch32vfun.h path after the recent HAL update 2025-05-28 05:54:28 +02:00
i2c_xilinx_axi.c drivers: i2c: xilinx_axi: Remove nested spinlock 2025-03-17 02:20:20 +01:00
i2c_xilinx_axi.h
i2c-priv.h
Kconfig drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
Kconfig.ambiq drivers: iom: define ambiq spi/i2c dma mode as a binding property 2025-05-13 16:23:26 +02:00
Kconfig.andes_atciic100
Kconfig.b91 drivers: all: telink-b91: select PINCTRL 2024-12-05 15:17:47 +01:00
Kconfig.bcm_iproc drivers: i2c: add Broadcom iProc I2C driver 2024-05-28 09:57:40 +02:00
Kconfig.cc13xx_cc26xx drivers: all: cc12xx_cc26xx: select PINCTRL 2024-12-05 15:18:01 +01:00
Kconfig.cdns drivers: i2c: Add Cadence I2C support 2025-03-12 19:02:04 +01:00
Kconfig.dw drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
Kconfig.ene
Kconfig.esp32
Kconfig.gd32 soc: gd32: Drop PINCTRL from Kconfig.defconfig 2024-11-04 13:40:42 -06:00
Kconfig.gpio drivers: i2c: Add support for clock stretching in the i2c-gpio module. 2025-05-31 06:55:10 -04:00
Kconfig.i2c_emul
Kconfig.ifx_cat1 drivers: Remove CONFIG_PINCTRL in defconfig files 2024-09-23 18:08:14 -04:00
Kconfig.ifx_xmc4 drivers: Remove CONFIG_PINCTRL in defconfig files 2024-09-23 18:08:14 -04:00
Kconfig.it8xxx2 drivers/i2c: ite: Use i2c_bitbang API for bus recovery 2025-04-17 09:06:29 +02:00
Kconfig.it51xxx drivers/i2c: Add I2C driver of it51xxx 2025-04-29 16:48:06 +02:00
Kconfig.litex drivers: i2c: litex: add driver for litei2c 2025-03-27 14:01:11 +01:00
Kconfig.lpc11u6x boards: nxp: Removing CONFIG_PINCTRL from the boards defconfig 2024-10-15 19:09:45 -04:00
Kconfig.max32 drivers: i2c: Select PINCTRL for MAX32 MCUs 2024-08-16 16:29:55 +01:00
Kconfig.mchp_mss
Kconfig.mcux drivers: i2c_mcux_flexcomm: add support for bus recovery. 2025-01-08 09:33:16 +01:00
Kconfig.npcx board: npcx: remove CONFIG_PINCTRL from defconfig of npcx boards 2024-11-07 08:59:14 -08:00
Kconfig.nrfx drivers: i2c: add nrf twis suppport 2024-12-20 16:14:05 +01:00
Kconfig.numaker boards: nuvoton: numaker: Drop PINCTRL from board defconfig 2024-11-20 08:23:58 -05:00
Kconfig.omap drivers: i2c: i2c_omap: Add pinctrl 2025-02-14 13:36:26 +01:00
Kconfig.rcar
Kconfig.renesas_ra drivers: i2c: initial support for i2c sci-b driver on Renesas RA family 2025-03-24 19:22:18 +01:00
Kconfig.renesas_rz drivers: i2c: Initial support for RZ/G3S 2025-03-07 19:45:11 +01:00
Kconfig.rts5912 drivers: i2c: rts5912 i2c dirver 2025-05-29 20:17:05 +02:00
Kconfig.sam0 drivers: i2c: I2C_SAM0_TRANSFER_TIMEOUT depends on I2C_SAM0 2025-02-19 14:51:04 +00:00
Kconfig.sam_twihs soc: atmel: Drop PINCTRL from Kconfig.defconfig 2024-11-04 13:43:26 -06:00
Kconfig.sbcon drivers: i2c: add pinctrl support to Arm sbcon driver 2025-04-07 15:18:10 +02:00
Kconfig.sc18im704
Kconfig.sedi
Kconfig.sifive
Kconfig.smartbond da1469x: Remove CONFIG_PINCTRL from all defconfig files 2024-10-08 16:57:41 +02:00
Kconfig.stm32 i2c: stm32: Add config option to enable DMA support 2025-03-20 12:17:50 +01:00
Kconfig.sy1xx drivers: i2c: sy1xx add support for i2c 2025-03-14 14:39:55 +01:00
Kconfig.tca954x drivers: i2c: tca9544a 2024-11-22 22:47:17 +00:00
Kconfig.test
Kconfig.wch drivers: i2c: added wch i2c driver 2025-04-17 21:17:06 +02:00
Kconfig.xec drivers: microchip xec: select PINCTRL 2024-11-29 05:41:53 +01:00
Kconfig.xilinx_axi