# 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"
	default y
	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_RTIO
	bool "I2C RTIO API"
	help
	  API and implementations of I2C for RTIO

# Include these first so that any properties (e.g. defaults) below can be
# overridden (by defining symbols in multiple locations)
source "drivers/i2c/Kconfig.b91"
source "drivers/i2c/Kconfig.cc13xx_cc26xx"
source "drivers/i2c/Kconfig.dw"
source "drivers/i2c/Kconfig.esp32"
source "drivers/i2c/target/Kconfig"
source "drivers/i2c/Kconfig.gpio"
source "drivers/i2c/Kconfig.xec"
source "drivers/i2c/Kconfig.nrfx"
source "drivers/i2c/Kconfig.i2c_emul"
source "drivers/i2c/Kconfig.it8xxx2"
source "drivers/i2c/Kconfig.sbcon"
source "drivers/i2c/Kconfig.sifive"
source "drivers/i2c/Kconfig.stm32"
source "drivers/i2c/Kconfig.sam0"
source "drivers/i2c/Kconfig.sam_twihs"
source "drivers/i2c/Kconfig.litex"
source "drivers/i2c/Kconfig.lpc11u6x"
source "drivers/i2c/Kconfig.npcx"
source "drivers/i2c/Kconfig.test"
source "drivers/i2c/Kconfig.rcar"
source "drivers/i2c/Kconfig.tca954x"
source "drivers/i2c/Kconfig.gd32"
source "drivers/i2c/Kconfig.ifx_cat1"
source "drivers/i2c/Kconfig.ifx_xmc4"
source "drivers/i2c/Kconfig.andes_atciic100"
source "drivers/i2c/Kconfig.sc18im704"
source "drivers/i2c/Kconfig.smartbond"
source "drivers/i2c/Kconfig.xilinx_axi"
source "drivers/i2c/Kconfig.mchp_mss"
source "drivers/i2c/Kconfig.sedi"
source "drivers/i2c/Kconfig.ambiq"

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
	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
	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
	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_FLEXCOMM
	bool "MCUX FLEXCOMM I2C driver"
	default y
	depends on DT_HAS_NXP_LPC_I2C_ENABLED
	select PINCTRL
	help
	  Enable the mcux flexcomm i2c driver.

config I2C_MCUX_LPI2C
	bool "MCUX LPI2C driver"
	default y
	depends on DT_HAS_NXP_IMX_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
	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.

endif # I2C
