# Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menuconfig SPI_NRFX
	bool "nRF SPI nrfx drivers"
	default y
	depends on SOC_FAMILY_NRF
	depends on MULTITHREADING
	select PINCTRL
	help
	  Enable support for nrfx SPI drivers for nRF MCU series.

if SPI_NRFX

config SPI_NRFX_SPI
	def_bool y
	depends on DT_HAS_NORDIC_NRF_SPI_ENABLED
	select NRFX_SPI0 if HAS_HW_NRF_SPI0
	select NRFX_SPI1 if HAS_HW_NRF_SPI1
	select NRFX_SPI2 if HAS_HW_NRF_SPI2

config SPI_NRFX_SPIM
	def_bool y
	depends on DT_HAS_NORDIC_NRF_SPIM_ENABLED
	select NRFX_SPIM0 if HAS_HW_NRF_SPIM0
	select NRFX_SPIM1 if HAS_HW_NRF_SPIM1
	select NRFX_SPIM2 if HAS_HW_NRF_SPIM2
	select NRFX_SPIM3 if HAS_HW_NRF_SPIM3
	select NRFX_SPIM4 if HAS_HW_NRF_SPIM4

config SPI_NRFX_SPIS
	def_bool y
	depends on DT_HAS_NORDIC_NRF_SPIS_ENABLED
	select SPI_SLAVE
	select NRFX_SPIS0 if HAS_HW_NRF_SPIS0
	select NRFX_SPIS1 if HAS_HW_NRF_SPIS1
	select NRFX_SPIS2 if HAS_HW_NRF_SPIS2
	select NRFX_SPIS3 if HAS_HW_NRF_SPIS3

config SOC_NRF52832_ALLOW_SPIM_DESPITE_PAN_58
	depends on SOC_NRF52832
	bool "Allow enabling the SPIM driver despite PAN 58"
	help
	  Allow enabling the nRF SPI Master with EasyDMA, despite
	  Product Anomaly Notice 58 (SPIM: An additional byte is
	  clocked out when RXD.MAXCNT == 1 and TXD.MAXCNT <= 1).
	  Without this override, the SPI Master is only available
	  without EasyDMA. Note that the 'SPIM' and 'SPIS' drivers
	  use EasyDMA, while the 'SPI' driver does not.
	  When used in conjunction with nRF SPIM Devicetree property
	  'anomaly-58-workaround' a workaround can be enabled per SPIM
	  instance.  If you are certain that transactions with
	  RXD.MAXCNT == 1 and TXD.MAXCNT <= 1 will NOT be executed
	  then nRF52832 PPI and GPIOTE resources can be saved by not
	  enabling 'anomaly-58-workaround' via the Devicetree.

config SPI_NRFX_RAM_BUFFER_SIZE
	int "Size of RAM buffers for SPIM peripherals"
	default 8
	depends on SPI_NRFX_SPIM
	help
	  SPIM peripherals cannot transmit data directly from flash. Therefore,
	  a buffer in RAM needs to be provided for each instance of SPI driver
	  using SPIM peripheral, so that the driver can copy there a chunk of
	  data from flash and transmit it.
	  The size is specified in bytes. A size of 0 means that this feature
	  should be disabled, and the application must then take care of not
	  supplying buffers located in flash to the driver, otherwise such
	  transfers will fail.

config SPI_NRFX_WAKE_TIMEOUT_US
	int "Maximum time to wait for SPI slave to wake up"
	default 200
	help
	  Maximum amount of time (in microseconds) that SPI master should wait
	  for SPI slave to wake up after the WAKE line is asserted. Used only
	  by instances that have the WAKE line configured (see the wake-gpios
	  devicetree property).

endif # SPI_NRFX
