# 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"
	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"
	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.

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"
	default n
	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
	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
