# 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"
	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_DW_CLOCK_SPEED
	int "Set the clock speed for I2C"
	default 32
	depends on I2C && I2C_DW

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_2
	bool "Enable I2C Port 2"
	depends on I2C
	default n

config I2C_2_NAME
	string "Select a name for finding the device"
	default "I2C_2"
	depends on I2C_2

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

config I2C_2_IRQ_PRI
	int "Controller interrupt priority"
	depends on I2C_2 && 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.

endif
