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

module = SPI
module-str = spi
source "subsys/logging/Kconfig.template.log_config"


config	SPI_0
	bool "SPI port 0"
	help
	  Enable SPI controller port 0.

if 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.

endif # SPI_0

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

if 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.

endif # SPI_1

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

if 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.

endif # SPI_2

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

if 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.

endif # SPI_3

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

if 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_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_6
	bool "SPI port 6"
	help
	  Enable SPI controller port 6.

if SPI_6

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

endif # SPI_6

source "drivers/spi/Kconfig.stm32"

source "drivers/spi/Kconfig.dw"

source "drivers/spi/Kconfig.mcux_dspi"

source "drivers/spi/Kconfig.mcux_lpspi"

source "drivers/spi/Kconfig.sam"

source "drivers/spi/Kconfig.sam0"

source "drivers/spi/Kconfig.sifive"

source "drivers/spi/Kconfig.nrfx"

source "drivers/spi/Kconfig.cc13xx_cc26xx"

endif # SPI
