# Kconfig - SPI driver configuration options

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

config SPI_LEGACY_API
	bool "Use legacy SPI API (default)"
	default y
	help
	  Driver and user API is the legacy SPI API (spi_legacy.h).
	  If unselected, the new API will be used.

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

config SPI_QMSI
	bool "QMSI driver for SPI controller"
	depends on SPI && QMSI
	default n
	help
	  SPI driver implementation using QMSI library. QMSI is the
	  Quark Microcontroller Software Interface, providing a common
	  interface to the Quark family of microcontrollers.

config SPI_QMSI_SS
	bool "QMSI driver for SPI controller on Sensor Subsystem"
	depends on SPI && QMSI
	default n
	help
	  SPI driver implementation using QMSI library. This instance is
	  for the Sensor Subsystem.

config SPI_INTEL
	bool
	prompt "Intel SPI controller driver"
	depends on SPI && 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).

config SPI_STM32
	bool
	prompt "STM32 MCU SPI controller driver"
	depends on SPI && SOC_FAMILY_STM32
	depends on SOC_SERIES_STM32L4X || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F3X
	default n
	help
	  Enable SPI support on the STM32 family of processors.

config SPI_STM32_INTERRUPT
	bool
	prompt "STM32 MCU SPI Interrupt Support"
	depends on SPI_STM32
	default n
	help
	  Enable Interrupt support for the SPI Driver of STM32 family.

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

config SYS_LOG_SPI_LEVEL
	int
	prompt "SPI Driver Log level"
	depends on SYS_LOG && SPI
	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_CS_GPIO
	bool "SPI port CS pin is controlled via a GPIO port"
	depends on GPIO
	default n

config	SPI_0
	bool
	prompt "SPI port 0"
	default n
	help
	  Enable SPI controller port 0.

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

config SPI_0_IRQ_PRI
	int
	prompt "Port 0 interrupt priority"
	depends on SPI_0

config SPI_0_DEFAULT_CFG
	hex "Port 0 default configuration"
	depends on SPI_0
	default 0x80

config SPI_0_DEFAULT_BAUD_RATE
	int "Port 0 default baud rate"
	depends on SPI_0
	default 500000

config SPI_0_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_0 && 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_0 && SPI_CS_GPIO
	default 0

config SPI_1
	bool
	prompt "SPI port 1"
	default n
	help
	  Enable SPI controller port 1.

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

config SPI_1_IRQ_PRI
	int
	prompt "Port 0 interrupt priority"
	depends on SPI_1

config SPI_1_DEFAULT_CFG
	hex "Port 1 default configuration"
	depends on SPI_1
	default 0x80

config SPI_1_DEFAULT_BAUD_RATE
	int "Port 1 default baud rate"
	depends on SPI_1
	default 500000

config SPI_1_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_1 && 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_1 && SPI_CS_GPIO
	default 0

config SPI_2
	bool
	prompt "SPI port 2"
	default n
	help
	  Enable SPI controller port 2.

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

config SPI_2_IRQ_PRI
	int
	prompt "Port 2 interrupt priority"
	depends on SPI_2

config SPI_2_DEFAULT_CFG
	hex "Port 2 default configuration"
	depends on SPI_2
	default 0x80

config SPI_2_DEFAULT_BAUD_RATE
	int "Port 2 default baud rate"
	depends on SPI_2
	default 500000

config SPI_2_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_2 && 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_2 && SPI_CS_GPIO
	default 0

config SPI_3
	bool
	prompt "SPI port 3"
	default n
	help
	  Enable SPI controller port 3.

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

config SPI_3_IRQ_PRI
	int
	prompt "Port 3 interrupt priority"
	depends on SPI_3

config SPI_SS_INIT_PRIORITY
	int "Init priority"
	depends on SPI_QMSI_SS
	default 70
	help
	  Device driver initialization priority.

config SPI_SS_CS_GPIO
	bool "SPI port CS pin is controlled via a GPIO port"
	select GPIO
	depends on SPI_QMSI_SS
	default n

config	SPI_SS_0
	bool
	prompt "SPI SS port 0"
	depends on SPI_QMSI_SS
	default n
	help
	  Enable SPI controller port 0.

config SPI_SS_0_NAME
	string
	prompt "SPI SS port 0 device name"
	depends on SPI_SS_0
	default "SPI_SS_0"

config SPI_SS_0_IRQ_PRI
	int
	prompt "Port 0 interrupt priority"
	depends on SPI_SS_0

config SPI_SS_0_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_SS_0 && SPI_SS_CS_GPIO
	default "GPIO_0"

config SPI_SS_0_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_SS_0 && SPI_SS_CS_GPIO
	default 0

config SPI_SS_1
	bool
	prompt "SPI SS port 1"
	depends on SPI_QMSI_SS
	default n
	help
	  Enable SPI controller port 1.

config SPI_SS_1_NAME
	string
	prompt "SPI port 1 device name"
	depends on SPI_SS_1
	default "SPI_SS_1"

config SPI_SS_1_IRQ_PRI
	int
	prompt "Port 0 interrupt priority"
	depends on SPI_SS_1

config SPI_SS_1_CS_GPIO_PORT
	string
	prompt "The GPIO port which is used to control CS"
	depends on SPI_SS_1 && SPI_SS_CS_GPIO
	default "GPIO_0"

config SPI_SS_1_CS_GPIO_PIN
	int "The GPIO PIN which is used to act as a CS pin"
	depends on SPI_SS_1 && SPI_SS_CS_GPIO
	default 0

source "drivers/spi/Kconfig.dw"

source "drivers/spi/Kconfig.mcux_dspi"

if SPI_LEGACY_API
source "drivers/spi/Kconfig.nrf5_legacy"
endif

endif # SPI
