# 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

config I2C_DW
	bool "Design Ware I2C support"
	depends on I2C
	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 I2C && 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 I2C && 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 SAM3 I2C Driver"
	depends on I2C && SOC_ATMEL_SAM3
	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 I2C_MCUX
	bool "MCUX I2C driver"
	depends on I2C && HAS_MCUX
	default n
	help
	Enable the mcux I2C driver.

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

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_STM32LX
	bool "STM32Lx MCU I2C Driver"
	depends on I2C &&  SOC_FAMILY_STM32 && SOC_SERIES_STM32L4X
	default n
	help
	Enable I2C support on the STM32Lxx family of processors.

config I2C_STM32LX_INTERRUPT
	bool "STM32Lx MCU I2C Interrupt Support"
	depends on I2C_STM32LX
	default n
	help
	Enable Interrupt support for the I2C Driver of STM32Lxx family.

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

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

config SYS_LOG_I2C_LEVEL
	int
	prompt "I2C log level"
	depends on I2C && SYS_LOG
	default 0
	help
	Sets log level for I2C connections

	Levels are:

	- 0 OFF, do not write

	- 1 ERROR, only write SYS_LOG_ERR

	- 2 WARNING, write SYS_LOG_WRN in adition to previous level

	- 3 INFO, write SYS_LOG_INF in adition to previous levels

	- 4 DEBUG, write SYS_LOG_DBG in adition to previous levels

config I2C_SHARED_IRQ
	bool
	default n
	depends on I2C

choice
	prompt "I2C_0 Interrupts via"
	default I2C_0_IRQ_DIRECT
	depends on I2C_0

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

config I2C_0_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select I2C_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_0_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on I2C_0 && I2C_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_0"
	depends on I2C
	default n

config I2C_0_NAME
	string "Select a name for finding the device"
	depends on I2C_0
	default "I2C_0"

config I2C_0_DEFAULT_CFG
	hex "I2C 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 the I2C datasheet for proper values.

config I2C_0_IRQ_PRI
	int "Controller interrupt priority"
	depends on I2C_0 && I2C_0_IRQ_DIRECT
	help
	IRQ priority.

config I2C_1
	bool "Enable I2C Port 1"
	depends on I2C
	default n

config I2C_1_NAME
	string "Select a name for finding the device"
	default "I2C_1"
	depends on I2C_1

config I2C_1_DEFAULT_CFG
	hex "I2C 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 the I2C datasheet for proper values.

config I2C_1_IRQ_PRI
	int "Controller interrupt priority"
	depends on I2C_1 && I2C_0_IRQ_DIRECT
	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.
