# Kconfig - Atmel SAM UART configuration options
#
# Copyright (c) 2017 Piotr Mienkowski
# 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
	default n
	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
	default n
	help
	  Configure UART0 at boot depending on the additional options below.

if UART_SAM_PORT_0

config UART_SAM_PORT_0_NAME
	string "UART0 Device Name"
	default "UART_0"
	help
	  Device name allows user to obtain a handle to the device object
	  required by all driver API functions. Device name has to be unique.

config UART_SAM_PORT_0_BAUD_RATE
	int "UART0 Baud Rate"
	default 115200
	help
	  UART0 baud rate to be set at boot.

endif # UART_SAM_PORT_0

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

config UART_SAM_PORT_1
	bool "Enable UART1"
	depends on UART_SAM
	default n
	help
	  Configure UART1 at boot depending on the additional options below.

if UART_SAM_PORT_1

config UART_SAM_PORT_1_NAME
	string "UART1 Device Name"
	default "UART_1"
	help
	  Device name allows user to obtain a handle to the device object
	  required by all driver API functions. Device name has to be unique.

config UART_SAM_PORT_1_BAUD_RATE
	int "UART1 Baud Rate"
	default 115200
	help
	  UART1 baud rate to be set at boot.

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
	default n
	help
	  Configure UART2 at boot depending on the additional options below.

if UART_SAM_PORT_2

config UART_SAM_PORT_2_NAME
	string "UART2 Device Name"
	default "UART_2"
	help
	  Device name allows user to obtain a handle to the device object
	  required by all driver API functions. Device name has to be unique.

config UART_SAM_PORT_2_BAUD_RATE
	int "UART2 Baud Rate"
	default 115200
	help
	  UART2 baud rate to be set at boot.

endif # UART_SAM_PORT_2

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

config UART_SAM_PORT_3
	bool "Enable UART3"
	depends on UART_SAM
	default n
	help
	  Configure UART3 at boot depending on the additional options below.

if UART_SAM_PORT_3

config UART_SAM_PORT_3_NAME
	string "UART3 Device Name"
	default "UART_3"
	help
	  Device name allows user to obtain a handle to the device object
	  required by all driver API functions. Device name has to be unique.

config UART_SAM_PORT_3_BAUD_RATE
	int "UART3 Baud Rate"
	default 115200
	help
	  UART3 baud rate to be set at boot.

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
	default n
	help
	  Configure UART4 at boot depending on the additional options below.

if UART_SAM_PORT_4

config UART_SAM_PORT_4_NAME
	string "UART4 Device Name"
	default "UART_4"
	help
	  Device name allows user to obtain a handle to the device object
	  required by all driver API functions. Device name has to be unique.

config UART_SAM_PORT_4_BAUD_RATE
	int "UART4 Baud Rate"
	default 115200
	help
	  UART4 baud rate to be set at boot.

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
