# Kconfig.beetle - ARM CMSDK APB SoC UART configuration options
#
#
# Copyright (c) 2016 Linaro Limited
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig UART_CMSDK_APB
	bool "ARM CMSDK APB UART driver"
	default n
	select SERIAL_HAS_DRIVER
	depends on SOC_FAMILY_ARM
	help
	  This option enables the UART driver for ARM CMSDK APB UART.

if UART_CMSDK_APB

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

config UART_CMSDK_APB_PORT0
	bool "Enable driver for UART 0"
	default n
	help
	  Build the driver to utilize UART controller Port 0.

config UART_CMSDK_APB_PORT0_NAME
	string "Device Name for UART 0"
	default "UART_0"
	depends on UART_CMSDK_APB_PORT0
	help
	  This is the device name for UART, and is included in the device
	  struct.

if !HAS_DTS

config UART_CMSDK_APB_PORT0_IRQ_PRI
	int "UART Interrupt Priority (Interrupt support)"
	default 2
	depends on UART_CMSDK_APB_PORT0
	depends on UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for UART port.

config UART_CMSDK_APB_PORT0_BAUD_RATE
	int "Baud Rate"
	range 9600 115200
	default 115200
	depends on UART_CMSDK_APB_PORT0
	help
	  The baud rate for UART port to be set to at boot.

endif # !HAS_DTS
# ---------- Port 1 ----------

config UART_CMSDK_APB_PORT1
	bool "Enable driver for UART 1"
	default n
	help
	  Build the driver to utilize UART controller Port 1.

config UART_CMSDK_APB_PORT1_NAME
	string "Device Name for UART 1"
	default "UART_1"
	depends on UART_CMSDK_APB_PORT1
	help
	  This is the device name for UART, and is included in the device
	  struct.

if !HAS_DTS

config UART_CMSDK_APB_PORT1_IRQ_PRI
	int "UART Interrupt Priority (Interrupt support)"
	default 2
	depends on UART_CMSDK_APB_PORT1
	depends on UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for UART port.

config UART_CMSDK_APB_PORT1_BAUD_RATE
	int "Baud Rate"
	range 9600 115200
	default 115200
	depends on UART_CMSDK_APB_PORT1
	help
	  The baud rate for UART port to be set to at boot.

endif # !HAS_DTS
# ---------- Port 2 ----------

config UART_CMSDK_APB_PORT2
	bool "Enable driver for UART 2"
	default n
	help
	  Build the driver to utilize UART controller Port 2.

config UART_CMSDK_APB_PORT2_NAME
	string "Device Name for UART 2"
	default "UART_2"
	depends on UART_CMSDK_APB_PORT2
	help
	  This is the device name for UART, and is included in the device
	  struct.

if !HAS_DTS

config UART_CMSDK_APB_PORT2_IRQ_PRI
	int "UART Interrupt Priority (Interrupt support)"
	default 2
	depends on UART_CMSDK_APB_PORT2
	depends on UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for UART port.

config UART_CMSDK_APB_PORT2_BAUD_RATE
	int "Baud Rate"
	range 9600 115200
	default 115200
	depends on UART_CMSDK_APB_PORT2
	help
	  The baud rate for UART port to be set to at boot.

endif # !HAS_DTS
# ---------- Port 3 ----------

config UART_CMSDK_APB_PORT3
	bool "Enable driver for UART 3"
	default n
	help
	  Build the driver to utilize UART controller Port 3.

config UART_CMSDK_APB_PORT3_NAME
	string "Device Name for UART 3"
	default "UART_3"
	depends on UART_CMSDK_APB_PORT3
	help
	  This is the device name for UART, and is included in the device
	  struct.

if !HAS_DTS

config UART_CMSDK_APB_PORT3_IRQ_PRI
	int "UART Interrupt Priority (Interrupt support)"
	default 2
	depends on UART_CMSDK_APB_PORT3
	depends on UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for UART port.

config UART_CMSDK_APB_PORT3_BAUD_RATE
	int "Baud Rate"
	range 9600 115200
	default 115200
	depends on UART_CMSDK_APB_PORT3
	help
	  The baud rate for UART port to be set to at boot.

endif # !HAS_DTS
# ---------- Port 4 ----------

config UART_CMSDK_APB_PORT4
	bool "Enable driver for UART 4"
	default n
	help
	  Build the driver to utilize UART controller Port 4.

config UART_CMSDK_APB_PORT4_NAME
	string "Device Name for UART 4"
	default "UART_4"
	depends on UART_CMSDK_APB_PORT4
	help
	  This is the device name for UART, and is included in the device
	  struct.

if !HAS_DTS

config UART_CMSDK_APB_PORT4_IRQ_PRI
	int "UART Interrupt Priority (Interrupt support)"
	default 2
	depends on UART_CMSDK_APB_PORT4
	depends on UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for UART port.

config UART_CMSDK_APB_PORT4_BAUD_RATE
	int "Baud Rate"
	range 9600 115200
	default 115200
	depends on UART_CMSDK_APB_PORT4
	help
	  The baud rate for UART port to be set to at boot.

endif # !HAS_DTS
endif # UART_CMSDK_APB
