# I2C configuration options

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

#
# I2C options
#
menuconfig I2C
	bool "I2C 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_CALLBACK
	bool "I2C asynchronous callback API"
	help
	  API and implementations of i2c_transfer_cb.

# 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.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.andes_atciic100"

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_TWIHS
	bool "Atmel SAM (TWIHS) I2C driver"
	default y
	depends on DT_HAS_ATMEL_SAM_I2C_TWIHS_ENABLED
	help
	  Enable Atmel SAM MCU Family (TWIHS) 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
	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
	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
	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
	help
	  Enable the RV32M1 LPI2C driver.

endif # I2C
