# 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
	prompt "TX pin"

	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
	prompt "TX pin"

	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
	prompt "TX pin"

	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
