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


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"
	select 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_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_QMS_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"

source "drivers/spi/Kconfig.nrf5"

endif # SPI
