# SPDX-License-Identifier: GPL-2.0-only
#
# SPI driver configuration
#
menuconfig SPI
	bool "SPI support"
	depends on HAS_IOMEM
	help
	  The "Serial Peripheral Interface" is a low level synchronous
	  protocol.  Chips that support SPI can have data transfer rates
	  up to several tens of Mbit/sec.  Chips are addressed with a
	  controller and a chipselect.  Most SPI slaves don't support
	  dynamic device discovery; some are even write-only or read-only.

	  SPI is widely used by microcontrollers to talk with sensors,
	  eeprom and flash memory, codecs and various other controller
	  chips, analog to digital (and d-to-a) converters, and more.
	  MMC and SD cards can be accessed using SPI protocol; and for
	  DataFlash cards used in MMC sockets, SPI must always be used.

	  SPI is one of a family of similar protocols using a four wire
	  interface (select, clock, data in, data out) including Microwire
	  (half duplex), SSP, SSI, and PSP.  This driver framework should
	  work with most such devices and controllers.

if SPI

config SPI_DEBUG
	bool "Debug support for SPI drivers"
	depends on DEBUG_KERNEL
	help
	  Say "yes" to enable debug messaging (like dev_dbg and pr_debug),
	  sysfs, and debugfs support in SPI controller and protocol drivers.

#
# MASTER side ... talking to discrete SPI slave chips including microcontrollers
#

config SPI_MASTER
#	bool "SPI Master Support"
	bool
	default SPI
	help
	  If your system has an master-capable SPI controller (which
	  provides the clock and chipselect), you can enable that
	  controller and the protocol drivers for the SPI slave chips
	  that are connected.

if SPI_MASTER

config SPI_MEM
	bool "SPI memory extension"
	help
	  Enable this option if you want to enable the SPI memory extension.
	  This extension is meant to simplify interaction with SPI memories
	  by providing a high-level interface to send memory-like commands.

config SPI_OFFLOAD
	bool

comment "SPI Master Controller Drivers"

config SPI_AIROHA_SNFI
	tristate "Airoha SPI NAND Flash Interface"
	depends on ARCH_AIROHA || COMPILE_TEST
	depends on SPI_MASTER
	select REGMAP_MMIO
	help
	  This enables support for SPI-NAND mode on the Airoha NAND
	  Flash Interface found on Airoha ARM SoCs. This controller
	  is implemented as a SPI-MEM controller.

config SPI_ALTERA
	tristate "Altera SPI Controller platform driver"
	select SPI_ALTERA_CORE
	select REGMAP_MMIO
	help
	  This is the driver for the Altera SPI Controller.

config SPI_ALTERA_CORE
	tristate "Altera SPI Controller core code" if COMPILE_TEST
	select REGMAP
	help
	  "The core code for the Altera SPI Controller"

config SPI_ALTERA_DFL
	tristate "DFL bus driver for Altera SPI Controller"
	depends on FPGA_DFL
	select SPI_ALTERA_CORE
	help
	  This is a Device Feature List (DFL) bus driver for the
	  Altera SPI master controller.  The SPI master is connected
	  to a SPI slave to Avalon bridge in a Intel MAX BMC.

config SPI_AMLOGIC_SPIFC_A1
	tristate "Amlogic A1 SPIFC controller"
	depends on ARCH_MESON || COMPILE_TEST
	help
	  This enables master mode support for the SPIFC (SPI flash
	  controller) available in Amlogic A1 (A113L SoC).

config SPI_AMLOGIC_SPIFC_A4
	tristate "Amlogic A4 SPI Flash controller"
	depends on ARCH_MESON || COMPILE_TEST
	select REGMAP_MMIO
	help
	  This enables SPI mode on the NAND Flash Controller of Amlogic
	  ARM SoCs. It supports SPI Nor Flash and SPI NAND Flash (Could
	  enable Host ECC HW engine). The controller implements the
	  SPI-MEM interface, it doesn't support generic SPI.

config SPI_AMLOGIC_SPISG
	tristate "Amlogic SPISG controller"
	depends on COMMON_CLK
	depends on ARCH_MESON || COMPILE_TEST
	help
	  This enables master mode support for the SPISG (SPI scatter-gather
	  communication controller), which is available on platforms such as
	  Amlogic A4 SoCs.

config SPI_APPLE
	tristate "Apple SoC SPI Controller platform driver"
	depends on ARCH_APPLE || COMPILE_TEST
	help
	  This enables support for the SPI controller present on
	  many Apple SoCs, including the t8103 (M1), t8112 (M2)
	  and t600x (M1 Pro/Max/Ultra). Multiple SPI controller
	  instances are present on the SoC and each connects usually
	  to a single device like spi-nor (nvram), input device controller
	  or fingerprint sensor.

config SPI_AR934X
	tristate "Qualcomm Atheros AR934X/QCA95XX SPI controller driver"
	depends on ATH79 || COMPILE_TEST
	help
	  This enables support for the SPI controller present on the
	  Qualcomm Atheros AR934X/QCA95XX SoCs.

config SPI_ATCSPI200
	tristate "Andes ATCSPI200 SPI controller"
	depends on ARCH_ANDES || COMPILE_TEST
	help
	  SPI driver for Andes ATCSPI200 SPI controller.
	  ATCSPI200 controller supports DMA and PIO modes. When DMA
	  is not available, the driver automatically falls back to
	  PIO mode.

config SPI_ATH79
	tristate "Atheros AR71XX/AR724X/AR913X SPI controller driver"
	depends on ATH79 || COMPILE_TEST
	select SPI_BITBANG
	help
	  This enables support for the SPI controller present on the
	  Atheros AR71XX/AR724X/AR913X SoCs.

config SPI_ARMADA_3700
	tristate "Marvell Armada 3700 SPI Controller"
	depends on (ARCH_MVEBU && OF) || COMPILE_TEST
	help
	  This enables support for the SPI controller present on the
	  Marvell Armada 3700 SoCs.

config SPI_ASPEED_SMC
	tristate "Aspeed flash controllers in SPI mode"
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on OF
	help
	  This enables support for the Firmware Memory controller (FMC)
	  in the Aspeed AST2600, AST2500 and AST2400 SoCs when attached
	  to SPI NOR chips, and support for the SPI flash memory
	  controller (SPI) for the host firmware. The implementation
	  only supports SPI NOR.

config SPI_ATMEL
	tristate "Atmel SPI Controller"
	depends on ARCH_MICROCHIP || COMPILE_TEST
	depends on OF
	help
	  This selects a driver for the Atmel SPI Controller, present on
	  many AT91 ARM chips.

config SPI_AT91_USART
	tristate "Atmel USART Controller SPI driver"
	depends on (ARCH_AT91 || COMPILE_TEST)
	depends on MFD_AT91_USART
	help
	  This selects a driver for the AT91 USART Controller as SPI Master,
	  present on AT91 and SAMA5 SoC series.

config SPI_ATMEL_QUADSPI
	tristate "Atmel Quad SPI Controller"
	depends on ARCH_AT91 || COMPILE_TEST
	depends on OF && HAS_IOMEM
	help
	  This enables support for the Quad SPI controller in master mode.
	  This driver does not support generic SPI. The implementation only
	  supports spi-mem interface.

config SPI_AU1550
	tristate "Au1550/Au1200/Au1300 SPI Controller"
	depends on MIPS_ALCHEMY
	select SPI_BITBANG
	help
	  If you say yes to this option, support will be included for the
	  PSC SPI controller found on Au1550, Au1200 and Au1300 series.

config SPI_AXI_SPI_ENGINE
	tristate "Analog Devices AXI SPI Engine controller"
	depends on HAS_IOMEM
	select SPI_OFFLOAD
	help
	  This enables support for the Analog Devices AXI SPI Engine SPI controller.
	  It is part of the SPI Engine framework that is used in some Analog Devices
	  reference designs for FPGAs.

config SPI_AXIADO
	tristate "Axiado DB-H SPI controller"
	depends on SPI_MEM
	depends on ARCH_AXIADO || COMPILE_TEST
	help
	  Enable support for the SPI controller present on Axiado AX3000 SoCs.

	  The implementation supports host-only mode and does not provide target
	  functionality. It is intended for use cases where the SoC acts as the SPI
	  host, communicating with peripheral devices such as flash memory.

config SPI_BCM2835
	tristate "BCM2835 SPI controller"
	depends on GPIOLIB
	depends on ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST
	help
	  This selects a driver for the Broadcom BCM2835 SPI master.

	  The BCM2835 contains two types of SPI master controller; the
	  "universal SPI master", and the regular SPI controller. This driver
	  is for the regular SPI controller. Slave mode operation is not also
	  not supported.

config SPI_BCM2835AUX
	tristate "BCM2835 SPI auxiliary controller"
	depends on ((ARCH_BCM2835 || ARCH_BRCMSTB) && GPIOLIB) || COMPILE_TEST
	help
	  This selects a driver for the Broadcom BCM2835 SPI aux master.

	  The BCM2835 contains two types of SPI master controller; the
	  "universal SPI master", and the regular SPI controller.
	  This driver is for the universal/auxiliary SPI controller.

config SPI_BCM63XX
	tristate "Broadcom BCM63xx SPI controller"
	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
	help
	  Enable support for the SPI controller on the Broadcom BCM63xx SoCs.

config SPI_BCM63XX_HSSPI
	tristate "Broadcom BCM63XX HS SPI controller driver"
	depends on BCM63XX || BMIPS_GENERIC || ARCH_BCMBCA || COMPILE_TEST
	help
	  This enables support for the High Speed SPI controller present on
	  newer Broadcom BCM63XX SoCs.

config SPI_BCM_QSPI
	tristate "Broadcom BSPI and MSPI controller support"
	depends on ARCH_BRCMSTB || ARCH_BCM || ARCH_BCM_IPROC || \
			BMIPS_GENERIC || COMPILE_TEST
	default ARCH_BCM_IPROC
	help
	  Enables support for the Broadcom SPI flash and MSPI controller.
	  Select this option for any one of BRCMSTB, iProc NSP and NS2 SoCs
	  based platforms. This driver works for both SPI master for SPI NOR
	  flash device as well as MSPI device.

config SPI_BCMBCA_HSSPI
	tristate "Broadcom BCMBCA HS SPI controller driver"
	depends on ARCH_BCMBCA || COMPILE_TEST
	help
	  This enables support for the High Speed SPI controller present on
	  newer Broadcom BCMBCA SoCs. These SoCs include an updated SPI controller
	  that adds the capability to allow the driver to control chip select
	  explicitly.

config SPI_BITBANG
	tristate "Utilities for Bitbanging SPI host controllers"
	help
	  With a few GPIO pins, your system can bitbang the SPI protocol.
	  Select this to get SPI support through I/O pins (GPIO, parallel
	  port, etc).  Or, some systems' SPI host controller drivers use
	  this code to manage the per-word or per-transfer accesses to the
	  hardware shift registers.

	  This is library code, and is automatically selected by drivers that
	  need it.  You only need to select this explicitly to support driver
	  modules that aren't part of this kernel tree.

config SPI_BUTTERFLY
	tristate "Parallel port adapter for AVR Butterfly (DEVELOPMENT)"
	depends on PARPORT
	select SPI_BITBANG
	help
	  This uses a custom parallel port cable to connect to an AVR
	  Butterfly <http://www.atmel.com/products/avr/butterfly>, an
	  inexpensive battery powered microcontroller evaluation board.
	  This same cable can be used to flash new firmware.

config SPI_CADENCE
	tristate "Cadence SPI controller"
	help
	  This selects the Cadence SPI controller master driver
	  used by Xilinx Zynq and ZynqMP.

config SPI_CADENCE_QUADSPI
	tristate "Cadence Quad SPI controller"
	depends on OF && (ARM || ARM64 || X86 || RISCV || MIPS || COMPILE_TEST)
	help
	  Enable support for the Cadence Quad SPI Flash controller.

	  Cadence QSPI is a specialized controller for connecting an SPI
	  Flash over 1/2/4-bit wide bus. Enable this option if you have a
	  device with a Cadence QSPI controller and want to access the
	  Flash as an MTD device.

config SPI_CADENCE_XSPI
	tristate "Cadence XSPI controller"
	depends on OF && HAS_IOMEM && 64BIT
	depends on SPI_MEM
	help
	  Enable support for the Cadence XSPI Flash controller.

	  Cadence XSPI is a specialized controller for connecting an SPI
	  Flash over up to 8-bit wide bus. Enable this option if you have a
	  device with a Cadence XSPI controller and want to access the
	  Flash as an MTD device.

config SPI_CH341
	tristate "CH341 USB2SPI adapter"
	depends on SPI_MASTER && USB
	help
	  Enables the SPI controller on the CH341a USB to serial chip

config SPI_CLPS711X
	tristate "CLPS711X host SPI controller"
	depends on ARCH_CLPS711X || COMPILE_TEST
	help
	  This enables dedicated general purpose SPI/Microwire1-compatible
	  master mode interface (SSI1) for CLPS711X-based CPUs.

config SPI_COLDFIRE_QSPI
	tristate "Freescale Coldfire QSPI controller"
	depends on (M520x || M523x || M5249 || M525x || M527x || M528x || M532x)
	help
	  This enables support for the Coldfire QSPI controller in master
	  mode.

config SPI_CS42L43
	tristate "Cirrus Logic CS42L43 SPI controller"
	depends on MFD_CS42L43 && PINCTRL_CS42L43
	select GPIO_SWNODE_UNDEFINED
	help
	  This enables support for the SPI controller inside the Cirrus Logic
	  CS42L43 audio codec.

config SPI_DAVINCI
	tristate "Texas Instruments DaVinci/DA8x/OMAP-L/AM1x SoC SPI controller"
	depends on ARCH_DAVINCI || ARCH_KEYSTONE || COMPILE_TEST
	select SPI_BITBANG
	help
	  SPI master controller for DaVinci/DA8x/OMAP-L/AM1x SPI modules.

config SPI_DESIGNWARE
	tristate "DesignWare SPI controller core support"
	imply SPI_MEM
	help
	  general driver for SPI controller core from DesignWare

if SPI_DESIGNWARE

config SPI_DW_DMA
	bool "DMA support for DW SPI controller"

config SPI_DW_PCI
	tristate "PCI interface driver for DW SPI core"
	depends on PCI

config SPI_DW_MMIO
	tristate "Memory-mapped io interface driver for DW SPI core"
	depends on HAS_IOMEM

endif

config SPI_DLN2
       tristate "Diolan DLN-2 USB SPI adapter"
       depends on MFD_DLN2
       help
	 If you say yes to this option, support will be included for Diolan
	 DLN2, a USB to SPI interface.

	 This driver can also be built as a module.  If so, the module
	 will be called spi-dln2.

config SPI_EP93XX
	tristate "Cirrus Logic EP93xx SPI controller"
	depends on ARCH_EP93XX || COMPILE_TEST
	help
	  This enables using the Cirrus EP93xx SPI controller in master
	  mode.

config SPI_FALCON
	bool "Falcon SPI controller support"
	depends on SOC_FALCON
	help
	  The external bus unit (EBU) found on the FALC-ON SoC has SPI
	  emulation that is designed for serial flash access. This driver
	  has only been tested with m25p80 type chips. The hardware has no
	  support for other types of SPI peripherals.

config SPI_FSI
	tristate "FSI SPI driver"
	depends on FSI
	help
	  This enables support for the driver for FSI bus attached SPI
	  controllers.

config SPI_FSL_LPSPI
	tristate "Freescale i.MX LPSPI controller"
	depends on ARCH_MXC || COMPILE_TEST
	help
	  This enables Freescale i.MX LPSPI controllers in master mode.

config SPI_FSL_QUADSPI
	tristate "Freescale QSPI controller"
	depends on ARCH_MXC || SOC_LS1021A || ARCH_LAYERSCAPE || \
		   ARCH_SPACEMIT || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  This enables support for the Quad SPI controller in master mode.
	  Up to four flash chips can be connected on two buses with two
	  chipselects each.
	  This controller does not support generic SPI messages. It only
	  supports the high-level SPI memory interface.

config SPI_GXP
	tristate "GXP SPI driver"
	depends on ARCH_HPE || COMPILE_TEST
	help
	  This enables support for the driver for GXP bus attached SPI
	  controllers.

config SPI_HISI_KUNPENG
	tristate "HiSilicon SPI Controller for Kunpeng SoCs"
	depends on (ARM64 && ACPI) || COMPILE_TEST
	help
	  This enables support for HiSilicon SPI controller found on
	  Kunpeng SoCs.

	  This driver can also be built as a module. If so, the module
	  will be called hisi-kunpeng-spi.

config SPI_HISI_SFC_V3XX
	tristate "HiSilicon SPI NOR Flash Controller for Hi16XX chipsets"
	depends on (ARM64 && ACPI) || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  This enables support for HiSilicon v3xx SPI NOR flash controller
	  found in hi16xx chipsets.

config SPI_NXP_FLEXSPI
	tristate "NXP Flex SPI controller"
	depends on ARCH_LAYERSCAPE || ARCH_MXC || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  This enables support for the Flex SPI controller in master mode.
	  Up to four slave devices can be connected on two buses with two
	  chipselects each.
	  This controller does not support generic SPI messages and only
	  supports the high-level SPI memory interface.

config SPI_NXP_XSPI
        tristate "NXP xSPI controller"
	depends on ARCH_MXC || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  This enables support for the xSPI controller. Up to two devices
	  can be connected to one host.
	  This controller does not support generic SPI messages and only
	  supports the high-level SPI memory interface.

config SPI_GPIO
	tristate "GPIO-based bitbanging SPI Master"
	depends on GPIOLIB || COMPILE_TEST
	select SPI_BITBANG
	help
	  This simple GPIO bitbanging SPI master uses the arch-neutral GPIO
	  interface to manage MOSI, MISO, SCK, and chipselect signals.  SPI
	  slaves connected to a bus using this driver are configured as usual,
	  except that the spi_board_info.controller_data holds the GPIO number
	  for the chipselect used by this controller driver.

	  Note that this driver often won't achieve even 1 Mbit/sec speeds,
	  making it unusually slow for SPI.  If your platform can inline
	  GPIO operations, you should be able to leverage that for better
	  speed with a custom version of this driver; see the source code.

config SPI_IMG_SPFI
	tristate "IMG SPFI controller"
	depends on MIPS || COMPILE_TEST
	help
	  This enables support for the SPFI master controller found on
	  IMG SoCs.

config SPI_IMX
	tristate "Freescale i.MX SPI controllers"
	depends on ARCH_MXC || COMPILE_TEST
	help
	  This enables support for the Freescale i.MX SPI controllers.

config SPI_INGENIC
	tristate "Ingenic SoCs SPI controller"
	depends on MACH_INGENIC || COMPILE_TEST
	help
	  This enables support for the Ingenic SoCs SPI controller.

	  To compile this driver as a module, choose M here: the module
	  will be called spi-ingenic.

config SPI_INTEL
	tristate

config SPI_INTEL_PCI
	tristate "Intel PCH/PCU SPI flash PCI driver"
	depends on PCI
	depends on X86 || COMPILE_TEST
	depends on SPI_MEM
	select SPI_INTEL
	help
	  This enables PCI support for the Intel PCH/PCU SPI controller in
	  master mode. This controller is used to hold BIOS and other
	  persistent settings. Controllers present in modern Intel hardware
	  only work in hardware sequencing mode, this means that the
	  controller exposes a subset of operations that makes it safer to
	  use. Using this driver it is possible to upgrade BIOS directly
	  from Linux.

	  To compile this driver as a module, choose M here: the module
	  will be called spi-intel-pci.

config SPI_INTEL_PLATFORM
	tristate "Intel PCH/PCU SPI flash platform driver (DANGEROUS)"
	depends on X86 || COMPILE_TEST
	depends on SPI_MEM
	select SPI_INTEL
	help
	  This enables platform support for the Intel PCH/PCU SPI
	  controller in master mode that is used to hold BIOS and other
	  persistent settings. Most of these controllers work in
	  software sequencing mode, which means that the controller
	  exposes the low level SPI-NOR opcodes to the software. Using
	  this driver it is possible to upgrade BIOS directly from Linux.

	  Say N here unless you know what you are doing. Overwriting the
	  SPI flash may render the system unbootable.

	  To compile this driver as a module, choose M here: the module
	  will be called spi-intel-platform.

config SPI_JCORE
	tristate "J-Core SPI Master"
	depends on OF && (SUPERH || COMPILE_TEST)
	help
	  This enables support for the SPI master controller in the J-Core
	  synthesizable, open source SoC.

config SPI_KSPI2
	tristate "Support for KEBA SPI master type 2 hardware"
	depends on HAS_IOMEM
	depends on KEBA_CP500 || COMPILE_TEST
	select AUXILIARY_BUS
	help
	  This driver supports KEBA SPI master type 2 FPGA implementation,
	  as found on CP500 devices for example.

	  This driver can also be built as a module. If so, the module
	  will be called spi-kspi2.

config SPI_LM70_LLP
	tristate "Parallel port adapter for LM70 eval board (DEVELOPMENT)"
	depends on PARPORT
	select SPI_BITBANG
	help
	  This driver supports the NS LM70 LLP Evaluation Board,
	  which interfaces to an LM70 temperature sensor using
	  a parallel port.

config SPI_LOONGSON_CORE
	tristate
	depends on LOONGARCH || COMPILE_TEST

config SPI_LOONGSON_PCI
	tristate "Loongson SPI Controller PCI Driver Support"
	select SPI_LOONGSON_CORE
	depends on PCI && (LOONGARCH || COMPILE_TEST)
	help
	  This bus driver supports the Loongson SPI hardware controller in
	  the Loongson platforms and supports to use PCI framework to
	  register SPI device resources.
	  Say Y or M here if you want to use the SPI controller on
	  Loongson platform.

config SPI_LOONGSON_PLATFORM
	tristate "Loongson SPI Controller Platform Driver Support"
	select SPI_LOONGSON_CORE
	depends on OF && (LOONGARCH || COMPILE_TEST)
	help
	  This bus driver supports the Loongson SPI hardware controller in
	  the Loongson platforms and supports to use DTS framework to
	  register SPI device resources.
	  Say Y or M here if you want to use the SPI controller on
	  Loongson platform.

config SPI_LP8841_RTC
	tristate "ICP DAS LP-8841 SPI Controller for RTC"
	depends on MACH_PXA27X_DT || COMPILE_TEST
	help
	  This driver provides an SPI master device to drive Maxim
	  DS-1302 real time clock.

	  Say N here unless you plan to run the kernel on an ICP DAS
	  LP-8x4x industrial computer.

config SPI_MPC52xx
	tristate "Freescale MPC52xx SPI (non-PSC) controller support"
	depends on PPC_MPC52xx
	help
	  This drivers supports the MPC52xx SPI controller in master SPI
	  mode.

config SPI_MPC52xx_PSC
	tristate "Freescale MPC52xx PSC SPI controller"
	depends on PPC_MPC52xx
	help
	  This enables using the Freescale MPC52xx Programmable Serial
	  Controller in master SPI mode.

config SPI_MPC512x_PSC
	tristate "Freescale MPC512x PSC SPI controller"
	depends on PPC_MPC512x
	help
	  This enables using the Freescale MPC5121 Programmable Serial
	  Controller in SPI master mode.

config SPI_FSL_LIB
	tristate
	depends on OF

config SPI_FSL_CPM
	tristate
	depends on FSL_SOC

config SPI_FSL_SPI
	tristate "Freescale SPI controller and Aeroflex Gaisler GRLIB SPI controller"
	depends on OF
	select SPI_FSL_LIB
	select SPI_FSL_CPM if FSL_SOC
	help
	  This enables using the Freescale SPI controllers in master mode.
	  MPC83xx platform uses the controller in cpu mode or CPM/QE mode.
	  MPC8569 uses the controller in QE mode, MPC8610 in cpu mode.
	  This also enables using the Aeroflex Gaisler GRLIB SPI controller in
	  master mode.

config SPI_FSL_DSPI
	tristate "Freescale DSPI controller"
	select REGMAP_MMIO
	depends on ARCH_MXC || ARCH_NXP || M5441x || COMPILE_TEST
	help
	  This enables support for the Freescale DSPI controller in master
	  mode. S32, VF610, LS1021A and ColdFire platforms uses the controller.

config SPI_FSL_ESPI
	tristate "Freescale eSPI controller"
	depends on FSL_SOC
	help
	  This enables using the Freescale eSPI controllers in master mode.
	  From MPC8536, 85xx platform uses the controller, and all P10xx,
	  P20xx, P30xx,P40xx, P50xx uses this controller.

config SPI_LJCA
	tristate "Intel La Jolla Cove Adapter SPI support"
	depends on USB_LJCA
	default USB_LJCA
	help
	  Select this option to enable SPI driver for the Intel
	  La Jolla Cove Adapter (LJCA) board.

	  This driver can also be built as a module. If so, the module
	  will be called spi-ljca.

config SPI_MESON_SPICC
	tristate "Amlogic Meson SPICC controller"
	depends on COMMON_CLK
	depends on ARCH_MESON || COMPILE_TEST
	help
	  This enables master mode support for the SPICC (SPI communication
	  controller) available in Amlogic Meson SoCs.

config SPI_MESON_SPIFC
	tristate "Amlogic Meson SPIFC controller"
	depends on ARCH_MESON || COMPILE_TEST
	select REGMAP_MMIO
	help
	  This enables master mode support for the SPIFC (SPI flash
	  controller) available in Amlogic Meson SoCs.

config SPI_MICROCHIP_CORE_QSPI
	tristate "Microchip FPGA QSPI controllers"
	depends on SPI_MASTER
	help
	  This enables the QSPI driver for Microchip FPGA QSPI controllers.
	  Say Y or M here if you want to use the QSPI controllers on
	  PolarFire SoC.
	  If built as a module, it will be called spi-microchip-core-qspi.

config SPI_MICROCHIP_CORE_SPI
	tristate "Microchip FPGA CoreSPI controller"
	depends on SPI_MASTER
	help
	  This enables the SPI driver for Microchip FPGA CoreSPI controller.
	  Say Y or M here if you want to use the "soft" controllers on
	  PolarFire SoC.
	  If built as a module, it will be called spi-microchip-core-spi.

config SPI_MT65XX
	tristate "MediaTek SPI controller"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  This selects the MediaTek(R) SPI bus driver.
	  If you want to use MediaTek(R) SPI interface,
	  say Y or M here.If you are not sure, say N.
	  SPI drivers for Mediatek MT65XX and MT81XX series ARM SoCs.

config SPI_MT7621
	tristate "MediaTek MT7621 SPI Controller"
	depends on RALINK || COMPILE_TEST
	help
	  This selects a driver for the MediaTek MT7621 SPI Controller.

config SPI_MTK_NOR
	tristate "MediaTek SPI NOR controller"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  This enables support for SPI NOR controller found on MediaTek
	  ARM SoCs. This is a controller specifically for SPI NOR flash.
	  It can perform generic SPI transfers up to 6 bytes via generic
	  SPI interface as well as several SPI NOR specific instructions
	  via SPI MEM interface.

config SPI_MTK_SNFI
	tristate "MediaTek SPI NAND Flash Interface"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on MTD_NAND_ECC_MEDIATEK
	help
	  This enables support for SPI-NAND mode on the MediaTek NAND
	  Flash Interface found on MediaTek ARM SoCs. This controller
	  is implemented as a SPI-MEM controller with pipelined ECC
	  capability.

config SPI_WPCM_FIU
	tristate "Nuvoton WPCM450 Flash Interface Unit"
	depends on ARCH_NPCM || COMPILE_TEST
	select REGMAP
	help
	  This enables support got the Flash Interface Unit SPI controller
	  present in the Nuvoton WPCM450 SoC.

	  This driver does not support generic SPI. The implementation only
	  supports the spi-mem interface.

config SPI_NPCM_FIU
	tristate "Nuvoton NPCM FLASH Interface Unit"
	depends on ARCH_NPCM || COMPILE_TEST
	depends on OF && HAS_IOMEM
	help
	  This enables support for the Flash Interface Unit SPI controller
	  in master mode.
	  This driver does not support generic SPI. The implementation only
	  supports spi-mem interface.

config SPI_NPCM_PSPI
	tristate "Nuvoton NPCM PSPI Controller"
	depends on ARCH_NPCM || COMPILE_TEST
	help
	  This driver provides support for Nuvoton NPCM BMC
	  Peripheral SPI controller in master mode.

config SPI_LANTIQ_SSC
	tristate "Lantiq SSC SPI controller"
	depends on LANTIQ || X86 || COMPILE_TEST
	help
	  This driver supports the Lantiq SSC SPI controller in master
	  mode. This controller is found on Intel (former Lantiq) SoCs like
	  the Danube, Falcon, xRX200, xRX300, Lightning Mountain.

config SPI_OC_TINY
	tristate "OpenCores tiny SPI"
	depends on GPIOLIB || COMPILE_TEST
	select SPI_BITBANG
	help
	  This is the driver for OpenCores tiny SPI master controller.

config SPI_OCTEON
	tristate "Cavium OCTEON SPI controller"
	depends on CAVIUM_OCTEON_SOC
	help
	  SPI host driver for the hardware found on some Cavium OCTEON
	  SOCs.

config SPI_OMAP_UWIRE
	tristate "OMAP1 MicroWire"
	depends on ARCH_OMAP1 || (ARM && COMPILE_TEST)
	select SPI_BITBANG
	help
	  This hooks up to the MicroWire controller on OMAP1 chips.

config SPI_OMAP24XX
	tristate "McSPI driver for OMAP"
	depends on ARCH_OMAP2PLUS || ARCH_K3 || COMPILE_TEST
	select SG_SPLIT
	help
	  SPI master controller for OMAP24XX and later Multichannel SPI
	  (McSPI) modules.

config SPI_TI_QSPI
	tristate "DRA7xxx QSPI controller support"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	help
	  QSPI master controller for DRA7xxx used for flash devices.
	  This device supports single, dual and quad read support, while
	  it only supports single write mode.

config SPI_ORION
	tristate "Orion SPI master"
	depends on PLAT_ORION || ARCH_MVEBU || COMPILE_TEST
	help
	  This enables using the SPI master controller on the Orion
	  and MVEBU chips.

config SPI_PCI1XXXX
	tristate "PCI1XXXX SPI Bus support"
	depends on PCI
	help
	  Say "yes" to Enable the SPI Bus support for the PCI1xxxx card
	  This is a PCI to SPI Bus driver
	  This driver can be built as module. If so, the module will be
	  called as spi-pci1xxxx.

config SPI_PIC32
	tristate "Microchip PIC32 series SPI"
	depends on MACH_PIC32 || COMPILE_TEST
	help
	  SPI driver for Microchip PIC32 SPI master controller.

config SPI_PIC32_SQI
	tristate "Microchip PIC32 Quad SPI driver"
	depends on MACH_PIC32 || COMPILE_TEST
	help
	  SPI driver for PIC32 Quad SPI controller.

config SPI_PL022
	tristate "ARM AMBA PL022 SSP controller"
	depends on ARM_AMBA || COMPILE_TEST
	default y if ARCH_REALVIEW
	default y if INTEGRATOR_IMPD1
	default y if ARCH_VERSATILE
	help
	  This selects the ARM(R) AMBA(R) PrimeCell PL022 SSP
	  controller. If you have an embedded system with an AMBA(R)
	  bus and a PL022 controller, say Y or M here.

config SPI_POLARFIRE_SOC
	tristate "Microchip FPGA SPI controllers"
	depends on SPI_MASTER
	depends on ARCH_MICROCHIP || COMPILE_TEST
	help
	  This enables the SPI driver for Microchip FPGA SPI controllers.
	  Say Y or M here if you want to use the "hard" controllers on
	  PolarFire SoC.
	  If built as a module, it will be called spi-mpfs.

config SPI_PPC4xx
	tristate "PPC4xx SPI Controller"
	depends on PPC32 && 4xx
	select SPI_BITBANG
	help
	  This selects a driver for the PPC4xx SPI Controller.

config SPI_PXA2XX
	tristate "PXA2xx SSP SPI master"
	depends on ARCH_PXA || ARCH_MMP || (X86 && (PCI || ACPI)) || COMPILE_TEST
	select PXA_SSP if ARCH_PXA || ARCH_MMP
	help
	  This enables using a PXA2xx or Sodaville SSP port as a SPI master
	  controller. The driver can be configured to use any SSP port.

config SPI_PXA2XX_PCI
	def_tristate SPI_PXA2XX && PCI && COMMON_CLK

config SPI_REALTEK_SNAND
	tristate "Realtek SPI-NAND Flash Controller"
	depends on MACH_REALTEK_RTL || COMPILE_TEST
	select REGMAP
	help
	  This enables support for the SPI-NAND Flash controller on
	  Realtek SoCs.

	  This driver does not support generic SPI. The implementation
	  only supports the spi-mem interface.

config SPI_ROCKCHIP
	tristate "Rockchip SPI controller driver"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	help
	  This selects a driver for Rockchip SPI controller.

	  If you say yes to this option, support will be included for
	  RK3066, RK3188 and RK3288 families of SPI controller.
	  Rockchip SPI controller support DMA transport and PIO mode.
	  The main usecase of this controller is to use spi flash as boot
	  device.

config SPI_ROCKCHIP_SFC
	tristate "Rockchip Serial Flash Controller (SFC)"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on HAS_IOMEM && HAS_DMA
	help
	  This enables support for Rockchip serial flash controller. This
	  is a specialized controller used to access SPI flash on some
	  Rockchip SOCs.

	  ROCKCHIP SFC supports DMA and PIO modes. When DMA is not available,
	  the driver automatically falls back to PIO mode.

config SPI_RB4XX
	tristate "Mikrotik RB4XX SPI master"
	depends on SPI_MASTER && (ATH79 || COMPILE_TEST)
	depends on OF
	help
	  SPI controller driver for the Mikrotik RB4xx series boards.

config SPI_RPCIF
	tristate "Renesas RPC-IF SPI driver"
	depends on RENESAS_RPCIF
	help
	  SPI driver for Renesas R-Car Gen3 or RZ/G2 RPC-IF.

config SPI_RSPI
	tristate "Renesas RSPI/QSPI controller"
	depends on SUPERH || ARCH_RENESAS || COMPILE_TEST
	help
	  SPI driver for Renesas RSPI and QSPI blocks.

config SPI_RZV2H_RSPI
	tristate "Renesas RZ/V2H RSPI controller"
	depends on ARCH_RENESAS || COMPILE_TEST
	help
	  RSPI driver for the Renesas RZ/V2H Serial Peripheral Interface (RSPI).
	  RSPI supports both SPI host and SPI target roles. This option only
	  enables the SPI host role.

config SPI_RZV2M_CSI
	tristate "Renesas RZ/V2M CSI controller"
	depends on ARCH_RENESAS || COMPILE_TEST
	help
	  SPI driver for Renesas RZ/V2M Clocked Serial Interface (CSI).
	  CSI supports both SPI host and SPI target roles.

config SPI_QCOM_QSPI
	tristate "QTI QSPI controller"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  QSPI(Quad SPI) driver for Qualcomm QSPI controller.

config SPI_QPIC_SNAND
	tristate "QPIC SNAND controller"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on MTD
	help
	  QPIC_SNAND (QPIC SPI NAND) driver for Qualcomm QPIC controller.
	  QPIC controller supports both parallel nand and serial nand.
	  This config will enable serial nand driver for QPIC controller.

config SPI_QUP
	tristate "Qualcomm SPI controller with QUP interface"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  Qualcomm Universal Peripheral (QUP) core is an AHB slave that
	  provides a common data path (an output FIFO and an input FIFO)
	  for serial peripheral interface (SPI) mini-core. SPI in master
	  mode supports up to 50MHz, up to four chip selects, programmable
	  data path from 4 bits to 32 bits and numerous protocol variants.

	  This driver can also be built as a module.  If so, the module
	  will be called spi_qup.

config SPI_QCOM_GENI
	tristate "Qualcomm GENI based SPI controller"
	depends on QCOM_GENI_SE
	help
	  This driver supports GENI serial engine based SPI controller in
	  master mode on the Qualcomm Technologies Inc.'s SoCs. If you say
	  yes to this option, support will be included for the built-in SPI
	  interface on the Qualcomm Technologies Inc.'s SoCs.

	  This driver can also be built as a module.  If so, the module
	  will be called spi-geni-qcom.

config SPI_S3C64XX
	tristate "Samsung S3C64XX/Exynos SoC series type SPI"
	depends on (PLAT_SAMSUNG || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST)
	help
	  SPI driver for Samsung S3C64XX, S5Pv210 and Exynos SoCs.
	  Choose Y/M here only if you build for such Samsung SoC.

config SPI_SC18IS602
	tristate "NXP SC18IS602/602B/603 I2C to SPI bridge"
	depends on I2C
	help
	  SPI driver for NXP SC18IS602/602B/603 I2C to SPI bridge.

config SPI_SH_MSIOF
	tristate "SuperH MSIOF SPI controller"
	depends on HAVE_CLK
	depends on ARCH_SHMOBILE || ARCH_RENESAS || COMPILE_TEST
	help
	  SPI driver for SuperH and SH Mobile MSIOF blocks.

config SPI_SH
	tristate "SuperH SPI controller"
	depends on SUPERH || COMPILE_TEST
	help
	  SPI driver for SuperH SPI blocks.

config SPI_SH_SCI
	tristate "SuperH SCI SPI controller"
	depends on SUPERH
	select SPI_BITBANG
	help
	  SPI driver for SuperH SCI blocks.

config SPI_SH_HSPI
	tristate "SuperH HSPI controller"
	depends on ARCH_RENESAS || COMPILE_TEST
	help
	  SPI driver for SuperH HSPI blocks.

config SPI_SIFIVE
	tristate "SiFive SPI controller"
	depends on HAS_IOMEM
	help
	  This exposes the SPI controller IP from SiFive.

config SPI_SLAVE_MT27XX
	tristate "MediaTek SPI slave device"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on SPI_SLAVE
	help
	  This selects the MediaTek(R) SPI slave device driver.
	  If you want to use MediaTek(R) SPI slave interface,
	  say Y or M here.If you are not sure, say N.
	  SPI slave drivers for Mediatek MT27XX series ARM SoCs.

config SPI_SN_F_OSPI
	tristate "Socionext F_OSPI SPI flash controller"
	depends on OF && HAS_IOMEM
	depends on SPI_MEM
	help
	  This enables support for the Socionext F_OSPI controller
	  for connecting an SPI Flash memory over up to 8-bit wide bus.
	  It supports indirect access mode only.

config SPI_SG2044_NOR
	tristate "SG2044 SPI NOR Controller"
	depends on ARCH_SOPHGO || COMPILE_TEST
	help
	  This enables support for the SG2044 SPI NOR controller,
	  which supports Dual/Quad read and write operations while
	  also supporting 3Byte address devices and 4Byte address
	  devices.

config SPI_SPRD
	tristate "Spreadtrum SPI controller"
	depends on ARCH_SPRD || COMPILE_TEST
	help
	  SPI driver for Spreadtrum SoCs.

config SPI_SPRD_ADI
	tristate "Spreadtrum ADI controller"
	depends on ARCH_SPRD || COMPILE_TEST
	depends on HWSPINLOCK || (COMPILE_TEST && !HWSPINLOCK)
	help
	  ADI driver based on SPI for Spreadtrum SoCs.

config SPI_STM32
	tristate "STMicroelectronics STM32 SPI controller"
	depends on ARCH_STM32 || COMPILE_TEST
	select SPI_SLAVE
	help
	  SPI driver for STMicroelectronics STM32 SoCs.

	  STM32 SPI controller supports DMA and PIO modes. When DMA
	  is not available, the driver automatically falls back to
	  PIO mode.

config SPI_STM32_OSPI
	tristate "STMicroelectronics STM32 OCTO SPI controller"
	depends on ARCH_STM32 || COMPILE_TEST
	depends on OF
	depends on SPI_MEM
	help
	  This enables support for the Octo SPI controller in master mode.
	  This driver does not support generic SPI. The implementation only
	  supports spi-mem interface.

config SPI_STM32_QSPI
	tristate "STMicroelectronics STM32 QUAD SPI controller"
	depends on ARCH_STM32 || COMPILE_TEST
	depends on OF
	depends on SPI_MEM
	help
	  This enables support for the Quad SPI controller in master mode.
	  This driver does not support generic SPI. The implementation only
	  supports spi-mem interface.

config SPI_ST_SSC4
	tristate "STMicroelectronics SPI SSC-based driver"
	depends on ARCH_STI || COMPILE_TEST
	help
	  STMicroelectronics SoCs support for SPI. If you say yes to
	  this option, support will be included for the SSC driven SPI.

config SPI_SUN4I
	tristate "Allwinner A10 SoCs SPI controller"
	depends on ARCH_SUNXI || COMPILE_TEST
	help
	  SPI driver for Allwinner sun4i, sun5i and sun7i SoCs

config SPI_SUN6I
	tristate "Allwinner A31 SPI controller"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on RESET_CONTROLLER
	help
	  This enables using the SPI controller on the Allwinner A31 SoCs.

config SPI_SUNPLUS_SP7021
	tristate "Sunplus SP7021 SPI controller"
	depends on SOC_SP7021 || COMPILE_TEST
	help
	  This enables Sunplus SP7021 SPI controller driver on the SP7021 SoCs.
	  This driver can also be built as a module. If so, the module will be
	  called as spi-sunplus-sp7021.

	  If you have a  Sunplus SP7021 platform say Y here.
	  If unsure, say N.

config SPI_SYNQUACER
	tristate "Socionext's SynQuacer HighSpeed SPI controller"
	depends on ARCH_SYNQUACER || COMPILE_TEST
	help
	  SPI driver for Socionext's High speed SPI controller which provides
	  various operating modes for interfacing to serial peripheral devices
	  that use the de-facto standard SPI protocol.

	  It also supports the new dual-bit and quad-bit SPI protocol.

config SPI_MXIC
	tristate "Macronix MX25F0A SPI controller"
	depends on SPI_MASTER
	imply MTD_NAND_ECC_MXIC
	help
	  This selects the Macronix MX25F0A SPI controller driver.

config SPI_MXS
	tristate "Freescale MXS SPI controller"
	depends on ARCH_MXS
	select STMP_DEVICE
	help
	  SPI driver for Freescale MXS devices.

config SPI_TEGRA210_QUAD
	tristate "NVIDIA Tegra QSPI Controller"
	depends on ARCH_TEGRA || COMPILE_TEST
	depends on RESET_CONTROLLER
	help
	  QSPI driver for NVIDIA Tegra QSPI Controller interface. This
	  controller is different from the SPI controller and is available
	  on Tegra SoCs starting from Tegra210.

config SPI_TEGRA114
	tristate "NVIDIA Tegra114 SPI Controller"
	depends on ARCH_TEGRA || COMPILE_TEST
	depends on RESET_CONTROLLER
	help
	  SPI controller driver for NVIDIA Tegra114 and later SoCs. This controller
	  is different than the older SoCs SPI controller and also register interface
	  get changed with this controller.

config SPI_TEGRA20_SFLASH
	tristate "Nvidia Tegra20 Serial flash Controller"
	depends on ARCH_TEGRA || COMPILE_TEST
	depends on RESET_CONTROLLER
	help
	  SPI driver for Nvidia Tegra20 Serial flash Controller interface.
	  The main usecase of this controller is to use spi flash as boot
	  device.

config SPI_TEGRA20_SLINK
	tristate "Nvidia Tegra20/Tegra30 SLINK Controller"
	depends on (ARCH_TEGRA && TEGRA20_APB_DMA) || COMPILE_TEST
	depends on RESET_CONTROLLER
	help
	  SPI driver for Nvidia Tegra20/Tegra30 SLINK Controller interface.

config SPI_THUNDERX
	tristate "Cavium ThunderX SPI controller"
	depends on PCI && 64BIT && (ARM64 || COMPILE_TEST)
	help
	  SPI host driver for the hardware found on Cavium ThunderX
	  SOCs.

config SPI_TOPCLIFF_PCH
	tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) SPI"
	depends on PCI && (X86_32 || MIPS || COMPILE_TEST)
	help
	  SPI driver for the Topcliff PCH (Platform Controller Hub) SPI bus
	  used in some x86 embedded processors.

	  This driver also supports the ML7213/ML7223/ML7831, a companion chip
	  for the Atom E6xx series and compatible with the Intel EG20T PCH.

config SPI_UNIPHIER
	tristate "Socionext UniPhier SPI Controller"
	depends on (ARCH_UNIPHIER || COMPILE_TEST) && OF
	depends on HAS_IOMEM
	help
	  This enables a driver for the Socionext UniPhier SoC SCSSI SPI controller.

	  UniPhier SoCs have SCSSI and MCSSI SPI controllers.
	  Every UniPhier SoC has SCSSI which supports single channel.
	  Older UniPhier Pro4/Pro5 also has MCSSI which support multiple channels.
	  This driver supports SCSSI only.

	  If your SoC supports SCSSI, say Y here.

config SPI_VIRTIO
	tristate "Virtio SPI Controller"
	depends on SPI_MASTER && VIRTIO
	help
	  If you say yes to this option, support will be included for the virtio
	  SPI controller driver. The hardware can be emulated by any device model
	  software according to the virtio protocol.

	  This driver can also be built as a module. If so, the module
	  will be called spi-virtio.

config SPI_XCOMM
	tristate "Analog Devices AD-FMCOMMS1-EBZ SPI-I2C-bridge driver"
	depends on I2C
	help
	  Support for the SPI-I2C bridge found on the Analog Devices
	  AD-FMCOMMS1-EBZ board.

config SPI_XILINX
	tristate "Xilinx SPI controller common module"
	depends on HAS_IOMEM
	select SPI_BITBANG
	help
	  This exposes the SPI controller IP from the Xilinx EDK.

	  See the "OPB Serial Peripheral Interface (SPI) (v1.00e)"
	  Product Specification document (DS464) for hardware details.

	  Or for the DS570, see "XPS Serial Peripheral Interface (SPI) (v2.00b)"

config SPI_XLP
	tristate "Cavium ThunderX2 SPI controller driver"
	depends on ARCH_THUNDER2 || COMPILE_TEST
	help
	  Enable support for the SPI controller on the Cavium ThunderX2.
	  (Originally on Netlogic XLP SoCs.)

	  If you have a Cavium ThunderX2 platform say Y here.
	  If unsure, say N.

config SPI_XTENSA_XTFPGA
	tristate "Xtensa SPI controller for xtfpga"
	depends on (XTENSA && XTENSA_PLATFORM_XTFPGA) || COMPILE_TEST
	select SPI_BITBANG
	help
	  SPI driver for xtfpga SPI master controller.

	  This simple SPI master controller is built into xtfpga bitstreams
	  and is used to control daughterboard audio codec. It always transfers
	  16 bit words in SPI mode 0, automatically asserting CS on transfer
	  start and deasserting on end.

config SPI_ZYNQ_QSPI
	tristate "Xilinx Zynq QSPI controller"
	depends on ARCH_ZYNQ || COMPILE_TEST
	depends on SPI_MEM
	help
	  This enables support for the Zynq Quad SPI controller
	  in master mode.
	  This controller only supports SPI memory interface.

config SPI_ZYNQMP_GQSPI
	tristate "Xilinx ZynqMP GQSPI controller"
	depends on (SPI_MEM && HAS_DMA) || COMPILE_TEST
	help
	  Enables Xilinx GQSPI controller driver for Zynq UltraScale+ MPSoC.
	  This controller only supports SPI memory interface.

config SPI_AMD
	tristate "AMD SPI controller"
	depends on PCI
	depends on SPI_MASTER || X86 || COMPILE_TEST
	depends on SPI_MEM
	help
	  Enables SPI controller driver for AMD SoC.

#
# Add new SPI master controllers in alphabetical order above this line
#

comment "SPI Multiplexer support"

config SPI_MUX
	tristate "SPI multiplexer support"
	select MULTIPLEXER
	help
	  This adds support for SPI multiplexers. Each SPI mux will be
	  accessible as a SPI controller, the devices behind the mux will appear
	  to be chip selects on this controller. It is still necessary to
	  select one or more specific mux-controller drivers.

#
# There are lots of SPI device types, with sensors and memory
# being probably the most widely used ones.
#
comment "SPI Protocol Masters"

config SPI_SPIDEV
	tristate "User mode SPI device driver support"
	help
	  This supports user mode SPI protocol drivers.

config SPI_LOOPBACK_TEST
	tristate "spi loopback test framework support"
	depends on m
	help
	  This enables the SPI loopback testing framework driver

	  primarily used for development of spi_master drivers
	  and to detect regressions

config SPI_TLE62X0
	tristate "Infineon TLE62X0 (for power switching)"
	depends on SYSFS
	help
	  SPI driver for Infineon TLE62X0 series line driver chips,
	  such as the TLE6220, TLE6230 and TLE6240.  This provides a
	  sysfs interface, with each line presented as a kind of GPIO
	  exposing both switch control and diagnostic feedback.

#
# Add new SPI protocol masters in alphabetical order above this line
#

endif # SPI_MASTER

#
# SLAVE side ... listening to other SPI masters
#

config SPI_SLAVE
	bool "SPI slave protocol handlers"
	help
	  If your system has a slave-capable SPI controller, you can enable
	  slave protocol handlers.

if SPI_SLAVE

config SPI_SLAVE_TIME
	tristate "SPI slave handler reporting boot up time"
	help
	  SPI slave handler responding with the time of reception of the last
	  SPI message.

config SPI_SLAVE_SYSTEM_CONTROL
	tristate "SPI slave handler controlling system state"
	help
	  SPI slave handler to allow remote control of system reboot, power
	  off, halt, and suspend.

endif # SPI_SLAVE

config SPI_DYNAMIC
	def_bool ACPI || OF_DYNAMIC || SPI_SLAVE

if SPI_OFFLOAD

comment "SPI Offload triggers"

config SPI_OFFLOAD_TRIGGER_ADI_UTIL_SD
	tristate "SPI offload trigger using ADI sigma-delta utility"
	help
	  SPI offload trigger from ADI sigma-delta utility FPGA IP block.

config SPI_OFFLOAD_TRIGGER_PWM
	tristate "SPI offload trigger using PWM"
	depends on PWM
	help
	  Generic SPI offload trigger implemented using PWM output.

endif # SPI_OFFLOAD

endif # SPI
