# nrfx UART configuration

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

menuconfig UART_NRFX
	bool "nRF UART nrfx drivers"
	default y
	select SERIAL_HAS_DRIVER
	select SERIAL_SUPPORT_INTERRUPT
	select SERIAL_SUPPORT_ASYNC
	select PINCTRL
	depends on DT_HAS_NORDIC_NRF_UART_ENABLED || DT_HAS_NORDIC_NRF_UARTE_ENABLED
	help
	  Enable support for nrfx UART drivers for nRF MCU series.
	  Peripherals with the same instance ID cannot be used together,
	  e.g. UART_0 and UARTE_0.

if UART_NRFX

config UART_NRFX_UART
	def_bool y
	depends on DT_HAS_NORDIC_NRF_UART_ENABLED

config UART_NRFX_UARTE
	def_bool y
	depends on DT_HAS_NORDIC_NRF_UARTE_ENABLED
	imply NRFX_UARTE_CONFIG_SKIP_PSEL_CONFIG if !UART_NRFX_UARTE_LEGACY_SHIM
	imply NRFX_UARTE_CONFIG_SKIP_GPIO_CONFIG if !UART_NRFX_UARTE_LEGACY_SHIM

config UART_NRFX_UARTE_LEGACY_SHIM
	bool "Legacy UARTE shim"
	depends on UART_NRFX_UARTE
	default y

config UART_NRFX_UARTE_ENHANCED_RX
	bool "Enhanced RX handling"
	depends on UART_ASYNC_API
	depends on UART_NRFX_UARTE_LEGACY_SHIM
	default y if !(UART_0_NRF_HW_ASYNC || UART_1_NRF_HW_ASYNC || UART_2_NRF_HW_ASYNC)
	help
	  Enable RX handling mode which is switching buffers on timeout. This is an
	  enhancement compared to other two modes (default and hardware assisted).
	  Default mode could miscount bytes when interrupt was not handled on time
	  and hardware assisted required TIMER peripheral instance and PPI channel
	  for accurate byte counting.

config UART_ASYNC_TX_CACHE_SIZE
	int "TX cache buffer size"
	depends on UART_ASYNC_API
	depends on UART_NRFX_UARTE_LEGACY_SHIM
	default 8
	help
	  For UARTE, TX cache buffer is used when provided TX buffer is not located
	  in RAM, because EasyDMA in UARTE peripherals can only transfer data
	  from RAM.

if HAS_HW_NRF_UART0 || HAS_HW_NRF_UARTE0
nrfx_uart_num = 0
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE1
nrfx_uart_num = 1
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE2
nrfx_uart_num = 2
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE3
nrfx_uart_num = 3
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE00
nrfx_uart_num = 00
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE20
nrfx_uart_num = 20
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE21
nrfx_uart_num = 21
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE22
nrfx_uart_num = 22
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE30
nrfx_uart_num = 30
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE120
nrfx_uart_num = 120
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE130
nrfx_uart_num = 130
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE131
nrfx_uart_num = 131
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE132
nrfx_uart_num = 132
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE133
nrfx_uart_num = 133
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE134
nrfx_uart_num = 134
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE135
nrfx_uart_num = 135
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE136
nrfx_uart_num = 136
rsource "Kconfig.nrfx_uart_instance"
endif

if HAS_HW_NRF_UARTE137
nrfx_uart_num = 137
rsource "Kconfig.nrfx_uart_instance"
endif

config NRFX_TIMER0
	default y
	depends on UART_0_NRF_HW_ASYNC_TIMER = 0 \
		|| UART_1_NRF_HW_ASYNC_TIMER = 0 \
		|| UART_2_NRF_HW_ASYNC_TIMER = 0 \
		|| UART_3_NRF_HW_ASYNC_TIMER = 0

config NRFX_TIMER1
	default y
	depends on UART_0_NRF_HW_ASYNC_TIMER = 1 \
		|| UART_1_NRF_HW_ASYNC_TIMER = 1 \
		|| UART_2_NRF_HW_ASYNC_TIMER = 1 \
		|| UART_3_NRF_HW_ASYNC_TIMER = 1

config NRFX_TIMER2
	default y
	depends on UART_0_NRF_HW_ASYNC_TIMER = 2 \
		|| UART_1_NRF_HW_ASYNC_TIMER = 2 \
		|| UART_2_NRF_HW_ASYNC_TIMER = 2 \
		|| UART_3_NRF_HW_ASYNC_TIMER = 2

config NRFX_TIMER3
	default y
	depends on UART_0_NRF_HW_ASYNC_TIMER = 3 \
		|| UART_1_NRF_HW_ASYNC_TIMER = 3 \
		|| UART_2_NRF_HW_ASYNC_TIMER = 3 \
		|| UART_3_NRF_HW_ASYNC_TIMER = 3

config NRFX_TIMER4
	default y
	depends on UART_0_NRF_HW_ASYNC_TIMER = 4 \
		|| UART_1_NRF_HW_ASYNC_TIMER = 4 \
		|| UART_2_NRF_HW_ASYNC_TIMER = 4 \
		|| UART_3_NRF_HW_ASYNC_TIMER = 4

endif # UART_NRFX
