# 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"
	default n
	help
	  Enable support for the SPI hardware bus.

if SPI

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

config SPI_SLAVE
	bool "Enable Slave support [EXPERIMENTAL]"
	default n
	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"
	default n
	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"

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"
	default n
	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"
	default n
	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"
	default n
	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"
	default n
	help
	  Enable SPI controller port 4.

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

config SPI_4_OP_MODES
	int "Port 4 supported operation modes (master/slave/both)"
	depends on SPI_4
	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.

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

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

config SPI_5_OP_MODES
	int "Port 5 supported operation modes (master/slave/both)"
	depends on SPI_5
	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.

config SPI_INTEL
	bool "Intel SPI controller driver"
	depends on CPU_MINUTEIA
	default n
	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
