# nRF5340 PDK board configuration

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

if BOARD_NRF5340PDK_NRF5340_CPUAPP || BOARD_NRF5340PDK_NRF5340_CPUAPPNS

config BOARD_ENABLE_DCDC_APP
	bool "Enable Application MCU DCDC converter"
	select SOC_DCDC_NRF53X_APP
	default y

config BOARD_ENABLE_DCDC_NET
	bool "Enable Network MCU DCDC converter"
	select SOC_DCDC_NRF53X_NET
	default y

config BOARD_ENABLE_DCDC_HV
	bool "Enable High Voltage DCDC converter"
	select SOC_DCDC_NRF53X_HV
	default y

choice BT_HCI_BUS_TYPE
	default BT_RPMSG if BT
endchoice

config HEAP_MEM_POOL_SIZE
	default 4096 if BT_RPMSG

config BT_HAS_HCI_VS
	default y if BT

config BOARD_ENABLE_CPUNET
	bool "Enable nRF53 Network MCU"
	help
	  This option enables releasing the Network 'force off' signal, which
	  as a consequence will power up the Network MCU during system boot.
	  Additionally, the option allocates GPIO pins that will be used by UARTE
	  of the Network MCU.
	  Note: The non-secure image can only be started by the secure firmware,
	  so when this option is used with the non-secure version of the board,
	  the application needs to take into consideration, that the secure firmware
	  may already have started the Network MCU.
	default y if (BT || NET_L2_IEEE802154)

endif # BOARD_NRF5340PDK_NRF5340_CPUAPP || BOARD_NRF5340PDK_NRF5340_CPUAPPNS

if BOARD_NRF5340PDK_NRF5340_CPUNET

# BT_CTLR depends on BT. When BT is enabled we should default to also
# enabling the controller.
config BT_CTLR
	default y if BT

config BT_ECC
	default y if BT

endif # BOARD_NRF5340PDK_NRF5340_CPUNET
