# Kconfig - Atmel SAM UART configuration options
#
# Copyright (c) 2017 Piotr Mienkowski
# Copyright (c) 2018 Justin Watson
# SPDX-License-Identifier: Apache-2.0
#

menuconfig UART_SAM
	bool "Atmel SAM MCU family UART driver"
	depends on SOC_FAMILY_SAM
	select SERIAL_HAS_DRIVER
	select SERIAL_SUPPORT_INTERRUPT
	help
	  This option enables the UARTx driver for Atmel SAM MCUs.

# ---------- Port 0 ----------

config UART_SAM_PORT_0
	bool "Enable UART0"
	depends on UART_SAM
	help
	  Enable UART0 at boot.

# ---------- Port 1 ----------

config UART_SAM_PORT_1
	bool "Enable UART1"
	depends on UART_SAM
	help
	  Enable UART1 at boot.

if UART_SAM_PORT_1

choice UART_SAME70_PORT_1_PIN_TX
	prompt "TX pin"
	depends on SOC_SERIES_SAME70

	config UART_SAM_PORT_1_PIN_TX_PA4
		bool "PA4"

	config UART_SAM_PORT_1_PIN_TX_PA6
		bool "PA6"

	config UART_SAM_PORT_1_PIN_TX_PD26
		bool "PD26"
endchoice

endif # UART_SAM_PORT_1

# ---------- Port 2 ----------

config UART_SAM_PORT_2
	bool "Enable UART2"
	depends on UART_SAM
	help
	  Enable UART2 at boot

# ---------- Port 3 ----------

config UART_SAM_PORT_3
	bool "Enable UART3"
	depends on UART_SAM
	help
	  Enable UART3 at boot

if UART_SAM_PORT_3

choice UART_SAME70_PORT_3_PIN_TX
	prompt "TX pin"
	depends on SOC_SERIES_SAME70

	config UART_SAM_PORT_3_PIN_TX_PD30
		bool "PD30"

	config UART_SAM_PORT_3_PIN_TX_PD31
		bool "PD31"
endchoice

endif # UART_SAM_PORT_3

# ---------- Port 4 ----------

config UART_SAM_PORT_4
	bool "Enable UART4"
	depends on UART_SAM
	help
	  Enable UART4 at boot

if UART_SAM_PORT_4

choice UART_SAME70_PORT_4_PIN_TX
	prompt "TX pin"
	depends on SOC_SERIES_SAME70

	config UART_SAM_PORT_4_PIN_TX_PD3
		bool "PD3"

	config UART_SAM_PORT_4_PIN_TX_PD19
		bool "PD19"
endchoice

endif # UART_SAM_PORT_4
