# Kconfig - I2C configuration options

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

#
# I2C options
#
menuconfig I2C
	bool
	prompt "I2C Drivers"
	default n
	help
	  Enable I2C Driver Configuration

if I2C

config I2C_DW
	bool "Design Ware I2C support"
	default n
	help
	  Enable Design Ware I2C support on the selected board

config I2C_QMSI_SS
	bool "QMSI I2C driver for the Sensor Subsystem"
	depends on QMSI
	default n
	help
	  This option enable the Sensor QMSI I2C driver.

	  This driver is simply a shim driver based on the I2C driver
	  provided by the QMSI BSP.

config I2C_QMSI
	bool "QMSI I2C driver"
	depends on QMSI
	default n
	help
	  This option enable the QMSI I2C driver.

	  This driver is simply a shim driver based on the I2C driver
	  provided by the QMSI BSP.

config I2C_ATMEL_SAM3
	bool "Atmel SAM3X I2C Driver"
	depends on SOC_SERIES_SAM3X
	default n
	help
	  Enable I2C support on the Atmel SAM3 family processor.
	  Says y to enable additional options to enable support
	  for individual controllers.

config TWIHS_SAM
	bool "Atmel SAM I2C driver"
	depends on SOC_FAMILY_SAM
	default n
	help
	  Enable Atmel SAM MCU Family I2C bus driver.

config I2C_MCUX
	bool "MCUX I2C driver"
	depends on HAS_MCUX
	select HAS_DTS_I2C
	default n
	help
	  Enable the mcux I2C driver.

config I2C_NRF5
	bool "NRF5 I2C driver"
	depends on SOC_FAMILY_NRF5
	select GPIO
	default n
	help
	  This option enables the I2C driver for Nordic Semiconductor nRF5
	  family processors.

config I2C_NRF5_GPIO_SCA_PIN
	int "SCA Pin Number"
	range 0 31
	depends on I2C_NRF5
	help
	  The GPIO pin to use for SCA.

config I2C_NRF5_GPIO_SCL_PIN
	int "SCL Pin Number"
	range 0 31
	depends on I2C_NRF5
	help
	  The GPIO pin to use for SCL.

config I2C_STM32_V1
	bool "STM32 V1 Driver (F1/F4X)"
	depends on SOC_FAMILY_STM32
	depends on SOC_SERIES_STM32F1X || SOC_SERIES_STM32F4X
	select HAS_DTS_I2C
	default n
	help
	  Enable I2C support on the STM32 F1 and F4X family of processors. This
	  driver also supports the F2 and L1 series.

config I2C_STM32_V2
	bool "STM32 V2 Driver (F3/L4X)"
	depends on SOC_FAMILY_STM32
	depends on SOC_SERIES_STM32F3X || SOC_SERIES_STM32L4X
	select HAS_DTS_I2C
	default n
	help
	  Enable I2C support on the STM32 F3 and L4X family of processors. This
	  driver also supports the F0, F7 and L0 series.

config I2C_STM32_INTERRUPT
	bool "STM32 MCU I2C Interrupt Support"
	depends on I2C_STM32_V1 || I2C_STM32_V2
	default n
	help
	  Enable Interrupt support for the I2C Driver

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

source "drivers/i2c/Kconfig.sbcon"

source "drivers/i2c/Kconfig.gpio"

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

config I2C_DW_CLOCK_SPEED
	int "Set the clock speed for I2C"
	default 32
	depends on I2C_DW

config SYS_LOG_I2C_LEVEL
	int
	prompt "I2C log level"
	depends on SYS_LOG
	default 0
	help
	  Sets log level for I2C drivers.
	  Levels are:
	  - 0 OFF, do not write
	  - 1 ERROR, only write SYS_LOG_ERR
	  - 2 WARNING, write SYS_LOG_WRN in addition to previous level
	  - 3 INFO, write SYS_LOG_INF in addition to previous levels
	  - 4 DEBUG, write SYS_LOG_DBG in addition to previous levels

config I2C_DW_SHARED_IRQ
	bool
	default n
	depends on I2C_DW

choice
	prompt "I2C_0 Interrupts via"
	default I2C_DW_0_IRQ_DIRECT
	depends on I2C_0 && I2C_DW

config I2C_DW_0_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called
	  directly.

config I2C_DW_0_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select I2C_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified.
	  Then the shared IRQ driver dispatches the interrupt to other drivers.

endchoice

config I2C_DW_0_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on I2C_0 && I2C_DW_0_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used
	  to register this driver with the shared IRQ driver, so interrupts
	  can be dispatched correctly.

config I2C_0
	bool "Enable I2C Port 0"
	default n

config I2C_0_NAME
	string "Port 0 device name"
	depends on I2C_0 && !HAS_DTS_I2C
	default "I2C_0"

config I2C_0_DEFAULT_CFG
	hex "Port 0 default configuration"
	depends on I2C_0
	default 0x0
	help
	  Allows the I2C port to be brought up with a default configuration.
	  This is useful to set if other drivers depend upon using the I2C bus
	  before the application has a chance to custom configure the port.
	  Setting this value does not prohibit the application from customizing
	  the values later.  Refer to include/i2c.h file for proper values.

config I2C_0_IRQ_PRI
	int "Port 0 interrupt priority"
	depends on I2C_0 && !HAS_DTS_I2C
	help
	  IRQ priority.

config I2C_1
	bool "Enable I2C Port 1"
	default n

config I2C_1_NAME
	string "Port 1 device name"
	default "I2C_1"
	depends on I2C_1 && !HAS_DTS_I2C

config I2C_1_DEFAULT_CFG
	hex "Port 1 default configuration"
	depends on I2C_1
	default 0x0
	help
	  Allows the I2C port to be brought up with a default configuration.
	  This is useful to set if other drivers depend upon using the I2C bus
	  before the application has a chance to custom configure the port.
	  Setting this value does not prohibit the application from customizing
	  the values later.  Refer to include/i2c.h file for proper values.

config I2C_1_IRQ_PRI
	int "Port 1 interrupt priority"
	depends on I2C_1 && !HAS_DTS_I2C
	help
	  IRQ priority.

config I2C_2
	bool "Enable I2C Port 2"
	default n

config I2C_2_NAME
	string "Port 2 device name"
	default "I2C_2"
	depends on I2C_2 && !HAS_DTS_I2C

config I2C_2_DEFAULT_CFG
	hex "Port 2 default configuration"
	depends on I2C_2
	default 0x0
	help
	  Allows the I2C port to be brought up with a default configuration.
	  This is useful to set if other drivers depend upon using the I2C bus
	  before the application has a chance to custom configure the port.
	  Setting this value does not prohibit the application from customizing
	  the values later.  Refer to include/i2c.h file for proper values.

config I2C_2_IRQ_PRI
	int "Port 2 interrupt priority"
	depends on I2C_2 && !HAS_DTS_I2C
	help
	  IRQ priority.

config I2C_3
	bool "Enable I2C Port 3"
	default n

config I2C_3_NAME
	string "Port 3 device name"
	depends on I2C_3 && !HAS_DTS_I2C
	default "I2C_3"

config I2C_3_DEFAULT_CFG
	hex "Port 3 default configuration"
	depends on I2C_3
	default 0x0
	help
	  Allows the I2C port to be brought up with a default configuration.
	  This is useful to set if other drivers depend upon using the I2C bus
	  before the application has a chance to custom configure the port.
	  Setting this value does not prohibit the application from customizing
	  the values later.  Refer to include/i2c.h file for proper values.

config I2C_3_IRQ_PRI
	int "Port 3 interrupt priority"
	depends on I2C_3 && !HAS_DTS_I2C
	help
	  IRQ priority.

config I2C_SS_0
	bool "Enable I2C_SS_0"
	depends on I2C_QMSI_SS
	default n

config I2C_SS_0_NAME
	string "Select a name for finding the device"
	depends on I2C_SS_0
	default "I2C_SS_0"

config I2C_SS_0_DEFAULT_CFG
	hex "I2C default configuration"
	depends on I2C_SS_0
	default 0x0
	help
	  Allows the I2C port to be brought up with a default configuration.
	  This is useful to set if other drivers depend upon using the I2C bus
	  before the application has a chance to custom configure the port.
	  Setting this value does not prohibit the application from customizing
	  the values later.  Refer to the I2C datasheet for proper values.

config I2C_SS_1
	bool "Enable I2C SS Port 1"
	depends on I2C_QMSI_SS
	default n

config I2C_SS_1_NAME
	string "Select a name for finding the device"
	default "I2C_SS_1"
	depends on I2C_SS_1

config I2C_SS_1_DEFAULT_CFG
	hex "I2C SS default configuration"
	depends on I2C_SS_1
	default 0x0
	help
	  Allows the I2C port to be brought up with a default configuration.
	  This is useful to set if other drivers depend upon using the I2C bus
	  before the application has a chance to custom configure the port.
	  Setting this value does not prohibit the application from customizing
	  the values later.  Refer to the I2C datasheet for proper values.

config I2C_SS_SDA_HOLD
	int
	depends on I2C_QMSI_SS
	help
	  The hold time on the data signal after a negative edge of i2c clock.
	  The unit is i2c module base clock.

config I2C_SS_SDA_SETUP
	int
	depends on I2C_QMSI_SS
	help
	  The delay time of clock rising edge relative to i2c data signal
	  change. The unit is i2c module base clock.

config I2C_SDA_SETUP
	int
	depends on I2C_QMSI
	help
	  The delay time of clock rising edge relative to i2c data signal
	  change. The unit is i2c module base clock.

config I2C_SDA_TX_HOLD
	int
	depends on I2C_QMSI
	help
	  The hold time on the data signal after a negative edge of i2c clock
	  while i2c acts as transmitter. The unit is i2c module base clock.

config I2C_SDA_RX_HOLD
	int
	depends on I2C_QMSI
	help
	  The hold time on the data signal after a negative edge of i2c clock
	  while i2c acts as receiver. The unit is i2c module base clock.

endif # I2C
