# Kconfig - SPI driver configuration options

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

#
# SPI Drivers
#
menuconfig SPI
	bool "SPI hardware bus support"
	help
	  Enable support for the SPI hardware bus.

if SPI

config SPI_ASYNC
	bool "Enable Asynchronous call support"
	select POLL
	help
	  This option enables the asynchronous API calls.

config SPI_SLAVE
	bool "Enable Slave support [EXPERIMENTAL]"
	help
	  Enables Driver SPI slave operations. Slave support depends
	  on the driver and the hardware it runs on.

config SPI_INIT_PRIORITY
	int "Init priority"
	default 70
	help
	  Device driver initialization priority.

config SYS_LOG_SPI_LEVEL
	int "SPI Driver Log level"
	depends on SYS_LOG
	default 0
	range 0 4
	help
	  Sets log level for SPI 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	SPI_0
	bool "SPI port 0"
	help
	  Enable SPI controller port 0.

if SPI_0

config SPI_0_NAME
	string "SPI port 0 device name"
	depends on !HAS_DTS_SPI
	default "SPI_0"

config SPI_0_OP_MODES
	int "Port 0 supported operation modes (master/slave/both)"
	default 1
	range 1 3
	help
	  This sets the supported operation modes at runtime, by the SPI
	  port 0, where:
	  1 is MASTER mode only (default)
	  2 is SLAVE mode only
	  3 is both modes are available.

config SPI_0_IRQ_PRI
	int "Port 0 interrupt priority"
	depends on !HAS_DTS_SPI

config SPI_0_CS_GPIO_PORT
	string "The GPIO port which is used to control CS"
	depends on SPI_CS_GPIO
	default "GPIO_0"

config SPI_0_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_CS_GPIO
	default 0

endif # SPI_0

config SPI_1
	bool "SPI port 1"
	help
	  Enable SPI controller port 1.

if SPI_1

config SPI_1_NAME
	string "SPI port 1 device name"
	depends on !HAS_DTS_SPI
	default "SPI_1"

config SPI_1_OP_MODES
	int "Port 1 supported operation modes (master/slave/both)"
	default 1
	range 1 3
	help
	  This sets the supported operation modes at runtime, by the SPI
	  port 1, where:
	  1 is MASTER mode only (default)
	  2 is SLAVE mode only
	  3 is both modes are available.

config SPI_1_IRQ_PRI
	int "Port 1 interrupt priority"
	depends on !HAS_DTS_SPI

config SPI_1_CS_GPIO_PORT
	string "The GPIO port which is used to control CS"
	depends on SPI_CS_GPIO
	default "GPIO_0"

config SPI_1_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_CS_GPIO
	default 0

endif # SPI_1

config SPI_2
	bool "SPI port 2"
	help
	  Enable SPI controller port 2.

if SPI_2

config SPI_2_NAME
	string "SPI port 2 device name"
	depends on !HAS_DTS_SPI
	default "SPI_2"

config SPI_2_OP_MODES
	int "Port 2 supported operation modes (master/slave/both)"
	default 1
	range 1 3
	help
	  This sets the supported operation modes at runtime, by the SPI
	  port 2, where:
	  1 is MASTER mode only (default)
	  2 is SLAVE mode only
	  3 is both modes are available.

config SPI_2_IRQ_PRI
	int "Port 2 interrupt priority"
	depends on !HAS_DTS_SPI

config SPI_2_CS_GPIO_PORT
	string "The GPIO port which is used to control CS"
	depends on SPI_CS_GPIO
	default "GPIO_0"

config SPI_2_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_CS_GPIO
	default 0

endif # SPI_2

config SPI_3
	bool "SPI port 3"
	help
	  Enable SPI controller port 3.

if SPI_3

config SPI_3_NAME
	string "SPI port 3 device name"
	depends on !HAS_DTS_SPI
	default "SPI_3"

config SPI_3_OP_MODES
	int "Port 3 supported operation modes (master/slave/both)"
	default 1
	range 1 3
	help
	  This sets the supported operation modes at runtime, by the SPI
	  port 3, where:
	  1 is MASTER mode only (default)
	  2 is SLAVE mode only
	  3 is both modes are available.

config SPI_3_IRQ_PRI
	int "Port 3 interrupt priority"
	depends on !HAS_DTS_SPI

endif # SPI_3

config SPI_4
	bool "SPI port 4"
	help
	  Enable SPI controller port 4.

if SPI_4

config SPI_4_NAME
	string "SPI port 4 device name"
	depends on !HAS_DTS_SPI
	default "SPI_4"

config SPI_4_OP_MODES
	int "Port 4 supported operation modes (master/slave/both)"
	default 1
	range 1 3
	help
	  This sets the supported operation modes at runtime, by the SPI
	  port 4, where:
	  1 is MASTER mode only (default)
	  2 is SLAVE mode only
	  3 is both modes are available.

endif # SPI_4

config SPI_5
	bool "SPI port 5"
	help
	  Enable SPI controller port 5.

if SPI_5

config SPI_5_NAME
	string "SPI port 5 device name"
	depends on !HAS_DTS_SPI
	default "SPI_5"

config SPI_5_OP_MODES
	int "Port 5 supported operation modes (master/slave/both)"
	default 1
	range 1 3
	help
	  This sets the supported operation modes at runtime, by the SPI
	  port 5, where:
	  1 is MASTER mode only (default)
	  2 is SLAVE mode only
	  3 is both modes are available.

endif # SPI_5

config SPI_INTEL
	bool "Intel SPI controller driver"
	depends on CPU_MINUTEIA
	help
	  Enable support for Intel's SPI controllers. Such controller
	  was formerly found on XScale chips. It can be found nowadays
	  on CEXXXX Intel media controller and Quark CPU (2 of them).

source "drivers/spi/Kconfig.stm32"

source "drivers/spi/Kconfig.dw"

source "drivers/spi/Kconfig.mcux_dspi"

source "drivers/spi/Kconfig.sam0"

source "drivers/spi/Kconfig.nrfx"

endif # SPI
