# Kconfig - nrf5 series MDK SPI support
#
# Copyright (c) 2017, Intel Corp.
# Copyright (c) 2016-2017, Linaro Limited.
#
# SPDX-License-Identifier: Apache-2.0
#

# TODO add nrf51 master

menuconfig SPI_NRF5
	bool "nRF5 SPI drivers"
	depends on SPI && SOC_FAMILY_NRF5 && GPIO_NRF5_P0
	default n
	help
	  Enable support for nRF5 MCU series SPI drivers. Peripherals
	  with the same instance id can not be used together, e.g., SPIM0 and I2C_0
	  (TWIM0) and SPIS0. You may need to disable I2C_0 or I2C_1.

if SPI_NRF5

# nordic twiX0, spiX0, spi0 instances can not be used at the same time
if SPI_0 && !I2C_0

choice
	prompt "SPI Port 0 Driver type"
	optional

# TODO: rename to SPIM0_NRF5 when nRF51 SPIM driver is available.
config SPIM0_NRF52
	bool "nRF52 SPIM0"
	depends on SOC_SERIES_NRF52X
	help
	  nRF52 SPI Master with EasyDMA on port 0

# On nRF51, SPI0 is SPIM-only.
config SPIS0_NRF52
	bool "nRF52 SPIS0"
	depends on SOC_SERIES_NRF52X
	help
	  nRF51 and nRF52 SPI Slave with EasyDMA on port 0

endchoice

if SPIM0_NRF52

config SPIM0_NRF52_GPIO_SCK_PIN
	int "SCK pin number"
	range 0 31
	help
	  GPIO pin number for SCK

config SPIM0_NRF52_GPIO_MOSI_PIN
	int "MOSI pin number"
	range 0 31
	help
	  GPIO pin number to use for MOSI

config SPIM0_NRF52_GPIO_MISO_PIN
	int "MISO pin number"
	range 0 31
	help
	  GPIO pin number for MISO

config SPIM0_NRF52_GPIO_SS_PIN_0
	int "CS0 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM0_NRF52_GPIO_SS_PIN_1
	int "CS1 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM0_NRF52_GPIO_SS_PIN_2
	int "CS2 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM0_NRF52_GPIO_SS_PIN_3
	int "CS3 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM0_NRF52_ORC
	hex "Over Read Character"
	default 0x00
	range 0x00 0xff
	help
	  This option configures what value to send when the TX char count is
	  less than the RX count.

endif # SPIM0_NRF52

if SPIS0_NRF52

config SPIS0_NRF52_GPIO_SCK_PIN
	int "SCK pin number"
	range 0 31
	help
	  GPIO pin number for SCK

config SPIS0_NRF52_GPIO_MOSI_PIN
	int "MOSI pin number"
	range 0 31
	help
	  GPIO pin number for MOSI

config SPIS0_NRF52_GPIO_MISO_PIN
	int "MISO pin number"
	range 0 31
	help
	  GPIO pin number for MISO

config SPIS0_NRF52_GPIO_CSN_PIN
	int "CSN pin number"
	range 0 255
	default 255
	help
	  GPIO pin number for slave select (chip select). Not used value
	  is 255 (0xff).

config SPIS0_NRF52_DEF
	hex "Default character"
	default 0
	help
	  Default character. Character clocked out in case of an ignored
	  transaction.

endif # SPIS0_NRF5

endif # SPI_0 && !I2C_0

# nordic twiX1, spiX1, spi1 instances can not be use at the same time
if SPI_1 && !I2C_1

choice
	prompt "SPI Port 1 Driver type"
	optional

config SPIM1_NRF52
	bool "nRF52 SPIM1"
	depends on SOC_SERIES_NRF52X
	help
	  nRF52 SPI Master with EasyDMA on port 0

config SPIS1_NRF5
	bool "nRF5 SPIS1"
	depends on (SOC_SERIES_NRF52X || SOC_SERIES_NRF51X)
	help
	  nRF51 and nRF52 SPI Slave with EasyDMA on port 1

endchoice

if SPIM1_NRF52

config SPIM1_NRF52_GPIO_SCK_PIN
	int "SCK pin number"
	range 0 31
	help
	  GPIO pin number for SCK

config SPIM1_NRF52_GPIO_MOSI_PIN
	int "MOSI pin number"
	range 0 31
	help
	  GPIO pin number to use for MOSI

config SPIM1_NRF52_GPIO_MISO_PIN
	int "MISO pin number"
	range 0 31
	help
	  GPIO pin number for MISO

config SPIM1_NRF52_GPIO_SS_PIN_0
	int "CS0 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM1_NRF52_GPIO_SS_PIN_1
	int "CS1 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM1_NRF52_GPIO_SS_PIN_2
	int "CS2 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM1_NRF52_GPIO_SS_PIN_3
	int "CS3 pin number"
	range 0 255
	default 255
	help
	  Slave Select (Chip Select) gpio pin number for line n. Not used value
	  is 255 (0xff).

config SPIM1_NRF52_ORC
	hex "Over Read Character"
	default 0x00
	range 0x00 0xff
	help
	  This option configures what value to send when the TX char count is
	  less than the RX count.

endif # SPIM1_NRF52

if SPIS1_NRF5

config SPIS1_NRF5_GPIO_SCK_PIN
	int "SCK pin number"
	range 0 31
	help
	  GPIO pin number for SCK

config SPIS1_NRF5_GPIO_MOSI_PIN
	int "MOSI pin number"
	range 0 31
	help
	  GPIO pin number for MOSI

config SPIS1_NRF5_GPIO_MISO_PIN
	int "MISO pin number"
	range 0 31
	help
	  GPIO pin number for MISO

config SPIS1_NRF5_GPIO_CSN_PIN
	int "CSN pin number"
	range 0 255
	default 255
	help
	  GPIO pin number for slave select (chip select). Not used value
	  is 255 (0xff).

config SPIS1_NRF5_DEF
	hex "Default character"
	default 0
	help
	  Default character. Character clocked out in case of an ignored
	  transaction.

endif # SPIS1_NRF5

endif # SPI_1 && !I2C_1

# hidden compile options
config SPIM_NRF52
	bool
	depends on !I2C_0 || !I2C_1
	default y if (SPIM0_NRF52 || SPIM1_NRF52)

config SPIS_NRF5
	bool
	depends on !I2C_0 || !I2C_1
	default y if (SPIS0_NRF52 || SPIS1_NRF5)

endif # SPI_NRF5
