# I2C configuration options

# Copyright (c) 2015 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

#
# I2C options
#
menuconfig I2C
	bool "Inter-Integrated Circuit (I2C) bus drivers"
	help
	  Enable I2C Driver Configuration

if I2C

config I2C_SHELL
	bool "I2C Shell"
	depends on SHELL
	help
	  Enable I2C Shell.

	  The I2C shell supports scanning, bus recovery, I2C read and write
	  operations.

config I2C_STATS
	bool "I2C device Stats"
	depends on STATS
	help
	  Enable I2C Stats.

config I2C_DUMP_MESSAGES
	bool "Log I2C transactions"
	depends on LOG
	depends on I2C_LOG_LEVEL_DBG
	help
	  Dump every I2C transaction to the system log as debug level log messages.

config I2C_DUMP_MESSAGES_ALLOWLIST
	bool "Use allowlist for logging of I2C transactions"
	depends on I2C_DUMP_MESSAGES
	depends on DT_HAS_ZEPHYR_I2C_DUMP_ALLOWLIST_ENABLED
	help
	  Use allowlist to specify which devices transactions should be logged.
	  The allowlist is defined in the devicetree using the compatible string of
	  "zephyr,i2c-dump-allowlist" and phandles to the devices that need to be traced.
	  Example of devicetree node:
	  i2c-dump-allowlist {
	    compatible = "zephyr,i2c-dump-allowlist";
	    devices = < &display0 >, < &sensor3 >;
	  };

config I2C_CALLBACK
	bool "I2C asynchronous callback API"
	help
	  API and implementations of i2c_transfer_cb.

config I2C_ALLOW_NO_STOP_TRANSACTIONS
	bool "Allows I2C transfers with no STOP on the last transaction [DEPRECATED]"
	depends on !I2C_NRFX_TWI
	depends on !I2C_NRFX_TWIM
	depends on !I2C_STM32
	depends on !I2C_GD32
	depends on !I2C_ESP32
	depends on (!I2C_DW || I2C_RTS5912)
	select DEPRECATED
	help
	  Allow I2C transactions with no STOP on the last message. This is
	  unsupported and can leave the bus in an unexpected state. The option
	  will be removed in Zephyr 4.1.

config I2C_RTIO
	bool "I2C RTIO API"
	select EXPERIMENTAL
	select RTIO
	select RTIO_WORKQ
	help
	  API and implementations of I2C for RTIO

if I2C_RTIO
config I2C_RTIO_SQ_SIZE
	int "Submission queue size for blocking calls"
	default 4
	help
	  Blocking i2c calls when I2C_RTIO is enabled are copied into a per driver
	  submission queue. The queue depth determines the number of possible i2c_msg
	  structs that may be in the array given to i2c_transfer. A sensible default
	  is going to be 4 given the device address, register address, and a value
	  to be read or written.

config I2C_RTIO_CQ_SIZE
	int "Completion queue size for blocking calls"
	default 4
	help
	  Blocking i2c calls when I2C_RTIO is enabled are copied into a per driver
	  submission queue. The queue depth determines the number of possible i2c_msg
	  structs that may be in the array given to i2c_transfer. A sensible default
	  is going to be 4 given the device address, register address, and a value
	  to be read or written.

config I2C_RTIO_FALLBACK_MSGS
	int "Number of available i2c_msg structs for the default handler to use"
	default 4
	help
		When RTIO is used with a driver that does not yet implement the submit API
		natively the submissions are converted back to struct i2c_msg values that
		are given to i2c_transfer. This requires some number of msgs be available to convert
		the submissions into on the stack. MISRA rules dictate we must know this in
		advance.

		In all likelihood 4 is going to work for everyone, but in case you do end up with
		an issue where you are using RTIO, your driver does not implement submit natively,
		and get an error relating to not enough i2c msgs this is the Kconfig to manipulate.

endif # I2C_RTIO


# Include these first so that any properties (e.g. defaults) below can be
# overridden (by defining symbols in multiple locations)
source "drivers/i2c/target/Kconfig"
# zephyr-keep-sorted-start
source "drivers/i2c/Kconfig.ambiq"
source "drivers/i2c/Kconfig.andes_atciic100"
source "drivers/i2c/Kconfig.b91"
source "drivers/i2c/Kconfig.bcm_iproc"
source "drivers/i2c/Kconfig.cc13xx_cc26xx"
source "drivers/i2c/Kconfig.cc23x0"
source "drivers/i2c/Kconfig.cdns"
source "drivers/i2c/Kconfig.dw"
source "drivers/i2c/Kconfig.ene"
source "drivers/i2c/Kconfig.esp32"
source "drivers/i2c/Kconfig.gd32"
source "drivers/i2c/Kconfig.gpio"
source "drivers/i2c/Kconfig.i2c_emul"
source "drivers/i2c/Kconfig.ifx_cat1"
source "drivers/i2c/Kconfig.ifx_xmc4"
source "drivers/i2c/Kconfig.it51xxx"
source "drivers/i2c/Kconfig.it8xxx2"
source "drivers/i2c/Kconfig.litex"
source "drivers/i2c/Kconfig.lpc11u6x"
source "drivers/i2c/Kconfig.max32"
source "drivers/i2c/Kconfig.mchp_mss"
source "drivers/i2c/Kconfig.mcux"
source "drivers/i2c/Kconfig.npcx"
source "drivers/i2c/Kconfig.nrfx"
source "drivers/i2c/Kconfig.numaker"
source "drivers/i2c/Kconfig.omap"
source "drivers/i2c/Kconfig.rcar"
source "drivers/i2c/Kconfig.renesas_ra"
source "drivers/i2c/Kconfig.renesas_rx"
source "drivers/i2c/Kconfig.renesas_rz"
source "drivers/i2c/Kconfig.rts5912"
source "drivers/i2c/Kconfig.sam0"
source "drivers/i2c/Kconfig.sam_twihs"
source "drivers/i2c/Kconfig.sbcon"
source "drivers/i2c/Kconfig.sc18im704"
source "drivers/i2c/Kconfig.sedi"
source "drivers/i2c/Kconfig.sifive"
source "drivers/i2c/Kconfig.silabs"
source "drivers/i2c/Kconfig.smartbond"
source "drivers/i2c/Kconfig.stm32"
source "drivers/i2c/Kconfig.sy1xx"
source "drivers/i2c/Kconfig.tca954x"
source "drivers/i2c/Kconfig.test"
source "drivers/i2c/Kconfig.wch"
source "drivers/i2c/Kconfig.xec"
source "drivers/i2c/Kconfig.xilinx_axi"
# zephyr-keep-sorted-stop

config I2C_INIT_PRIORITY
	int "Init priority"
	default KERNEL_INIT_PRIORITY_DEVICE
	help
	  I2C device driver initialization priority.


module = I2C
module-str = i2c
source "subsys/logging/Kconfig.template.log_config"

config I2C_GECKO
	bool "Gecko I2C driver"
	default y
	depends on DT_HAS_SILABS_GECKO_I2C_ENABLED
	select SOC_GECKO_I2C
	select PINCTRL if SOC_FAMILY_SILABS_S2
	help
	  Enable the SiLabs Gecko I2C bus driver.

config I2C_SAM_TWIM
	bool "Atmel SAM (TWIM) I2C driver"
	default y
	depends on DT_HAS_ATMEL_SAM_I2C_TWIM_ENABLED
	select PINCTRL
	help
	  Enable Atmel SAM MCU Family (TWIM) I2C bus driver.

config I2C_SAM_TWI
	bool "Atmel SAM (TWI) I2C driver"
	default y
	depends on DT_HAS_ATMEL_SAM_I2C_TWI_ENABLED
	select PINCTRL
	help
	  Enable Atmel SAM MCU Family (TWI) I2C bus driver.

config I2C_MCUX
	bool "MCUX I2C driver"
	default y
	depends on DT_HAS_NXP_KINETIS_I2C_ENABLED
	select PINCTRL
	help
	  Enable the mcux I2C driver.

config I2C_MCUX_LPI2C
	bool "MCUX LPI2C driver"
	default y
	depends on DT_HAS_NXP_LPI2C_ENABLED
	depends on CLOCK_CONTROL
	select PINCTRL
	help
	  Enable the mcux LPI2C driver.

config I2C_MCUX_LPI2C_BUS_RECOVERY
	bool "Bus recovery support"
	depends on I2C_MCUX_LPI2C && PINCTRL
	select I2C_BITBANG
	help
	  Enable LPI2C driver bus recovery support via GPIO bitbanging.

config I2C_IMX
	bool "i.MX I2C driver"
	default y
	depends on DT_HAS_FSL_IMX21_I2C_ENABLED
	select PINCTRL
	help
	  Enable the i.MX I2C driver.

config I2C_CC32XX
	bool "CC32XX I2C driver"
	default y
	depends on DT_HAS_TI_CC32XX_I2C_ENABLED
	select PINCTRL
	help
	  Enable the CC32XX I2C driver.

config I2C_BITBANG
	bool
	help
	  Enable library used for software driven (bit banging) I2C support

config I2C_NIOS2
	bool "Nios-II I2C driver"
	default y
	depends on DT_HAS_ALTR_NIOS2_I2C_ENABLED
	help
	  Enable the Nios-II I2C driver.

config I2C_RV32M1_LPI2C
	bool "RV32M1 LPI2C driver"
	default y
	depends on DT_HAS_OPENISA_RV32M1_LPI2C_ENABLED
	depends on CLOCK_CONTROL
	select PINCTRL
	help
	  Enable the RV32M1 LPI2C driver.

config GPIO_I2C_SWITCH
	bool "GPIO controlled I2C bus switch"
	default y
	depends on DT_HAS_GPIO_I2C_SWITCH_ENABLED
	help
	  Enable GPIO controlled I2C bus switch driver.

config I2C_NXP_II2C
	bool "NXP i.MX8M serial I2C driver"
	default y
	depends on DT_HAS_NXP_II2C_ENABLED
	help
	  Enable the NXP II2C driver.

endif # I2C
