# nRF52840 PCA10090 board configuration

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

if BOARD_NRF52840_PCA10090

config BOARD_ENABLE_DCDC
	bool "Enable DCDC mode"
	select SOC_DCDC_NRF52X
	default y

choice
	prompt "nRF9160 UART0 routing"
	default BOARD_PCA10090_UART0_VCOM

config BOARD_PCA10090_UART0_VCOM
	bool "Route to VCOM0"

config BOARD_PCA10090_UART0_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "nRF9160 UART1 routing"
	default BOARD_PCA10090_UART1_VCOM

config BOARD_PCA10090_UART1_VCOM
	bool "Route to VCOM2"

config BOARD_PCA10090_UART1_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "LED 1 routing"
	default BOARD_PCA10090_LED0_PHY

config BOARD_PCA10090_LED0_PHY
	bool "Route to LED on the kit"

config BOARD_PCA10090_LED0_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "LED 2 routing"
	default BOARD_PCA10090_LED1_PHY

config BOARD_PCA10090_LED1_PHY
	bool "Route to LED on the kit"

config BOARD_PCA10090_LED1_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "LED 3 routing"
	default BOARD_PCA10090_LED2_PHY

config BOARD_PCA10090_LED2_PHY
	bool "Route to LED on the kit"

config BOARD_PCA10090_LED2_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "LED 4 routing"
	default BOARD_PCA10090_LED3_PHY

config BOARD_PCA10090_LED3_PHY
	bool "Route to LED on the kit"

config BOARD_PCA10090_LED3_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "Button 1 routing"
	default BOARD_PCA10090_BUTTON0_PHY

config BOARD_PCA10090_BUTTON0_PHY
	bool "Route to buttons on the kit"

config BOARD_PCA10090_BUTTON0_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "Button 2 routing"
	default BOARD_PCA10090_BUTTON1_PHY

config BOARD_PCA10090_BUTTON1_PHY
	bool "Route to buttons on the kit"

config BOARD_PCA10090_BUTTON1_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "Switch 1 routing"
	default BOARD_PCA10090_SWITCH0_PHY

config BOARD_PCA10090_SWITCH0_PHY
	bool "Route to switches on the kit"

config BOARD_PCA10090_SWITCH0_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "Switch 2 routing"
	default BOARD_PCA10090_SWITCH1_PHY

config BOARD_PCA10090_SWITCH1_PHY
	bool "Route to switches on the kit"

config BOARD_PCA10090_SWITCH1_ARDUINO
	bool "Route to Arduino pins"

endchoice

choice
	prompt "Interface pins 0-2"
	default BOARD_PCA10090_INTERFACE0_ARDUINO

config BOARD_PCA10090_INTERFACE0_ARDUINO
	bool "Route to Arduino pins"
	help
	  Pin 0: nRF9160 P0.17 connects to A3
	  Pin 1: nRF9160 P0.18 connects to A4
	  Pin 2: nRF9160 P0.19 connects to A5

config BOARD_PCA10090_INTERFACE0_MCU
	bool "Route to nRF52840"
	help
	  This connects the following pins on the nRF9160 to pins on the nRF52840:
	  Pin 0: nRF9160 P0.17 connects to nRF52840 P0.17
	  Pin 1: nRF9160 P0.18 connects to nRF52840 P0.20
	  Pin 2: nRF9160 P0.19 connects to nRF52840 P0.15

endchoice

choice
	prompt "Interface pins 3-5"
	default BOARD_PCA10090_INTERFACE1_TRACE

config BOARD_PCA10090_INTERFACE1_TRACE
	bool "Route to TRACE interface"
	help
	  Pin 3: nRF9160 P0.21 connects to TRACECLK
	  Pin 4: nRF9160 P0.22 connects to TRACEDATA0
	  Pin 5: nRF9160 P0.23 connects to TRACEDATA1

config BOARD_PCA10090_INTERFACE1_MCU
	bool "Route to nRF52840"
	help
	  Pin 3: nRF9160 P0.21 connects to nRF52840 P0.22
	  Pin 4: nRF9160 P0.22 connects to nRF52840 P1.04
	  Pin 5: nRF9160 P0.23 connects to nRF52840 P1.02

endchoice

choice
	prompt "Interface pins 6-8"
	default BOARD_PCA10090_INTERFACE2_COEX

config BOARD_PCA10090_INTERFACE2_COEX
	bool "Route to COEX interface"
	help
	  Pin 6: nRF9160 COEX0 connects to COEX0_PH
	  Pin 7: nRF9160 COEX1 connects to COEX1_PH
	  Pin 8: nRF9160 COEX2 connects to COEX2_PH

config BOARD_PCA10090_INTERFACE2_MCU
	bool "Route to nRF52840"
	help
	  Pin 6: nRF9160 COEX0 connects to nRF52840 P1.13
	  Pin 7: nRF9160 COEX1 connects to nRF52840 P1.11
	  Pin 8: nRF9160 COEX2 connects to nRF52840 P1.15

endchoice

config BOARD_PCA10090_NRF52840_RESET
	bool "Enable GPIO reset line"
	help
	  Let the nRF52840 be reset from the nRF9160 via a GPIO line.
	  The GPIO line may only be one of the first 6 MCU interface pins.
	  The line is active high.

if BOARD_PCA10090_NRF52840_RESET

choice
	prompt "Pin used for reset"

comment "nRF52840 pins"

config BOARD_PCA10090_NRF52840_RESET_P0_17
	bool "P0.17"
	depends on BOARD_PCA10090_INTERFACE0_MCU
	help
	  Pin P0.17 on nRF52840,
	  connected to P0.17 on the nRF9160.

config BOARD_PCA10090_NRF52840_RESET_P0_20
	bool "P0.20"
	depends on BOARD_PCA10090_INTERFACE0_MCU
	help
	  Pin P0.20 on nRF52840,
	  connected to P0.18 on the nRF9160.

config BOARD_PCA10090_NRF52840_RESET_P0_15
	bool "P0.15"
	depends on BOARD_PCA10090_INTERFACE0_MCU
	help
	  Pin P0.15 on nRF52840,
	  connected to P0.19 on the nRF9160.

config BOARD_PCA10090_NRF52840_RESET_P0_22
	bool "P0.22"
	depends on BOARD_PCA10090_INTERFACE1_MCU
	help
	  Pin P0.22 on nRF52840,
	  connected to P0.21 on the nRF9160.

config BOARD_PCA10090_NRF52840_RESET_P1_04
	bool "P1.04"
	depends on BOARD_PCA10090_INTERFACE1_MCU
	help
	  Pin P1.04 on nRF52840,
	  connected to P0.22 on the nRF9160.

config BOARD_PCA10090_NRF52840_RESET_P1_02
	bool "P1.02"
	depends on BOARD_PCA10090_INTERFACE1_MCU
	help
	  Pin P1.02 on nRF52840,
	  connected to P0.23 on the nRF9160.

endchoice

endif # BOARD_PCA10090_NRF52840_RESET

module = BOARD_PCA10090
module-str = Board Control
source "subsys/logging/Kconfig.template.log_config"

endif # BOARD_NRF52840_PCA10090
