# Kconfig - STM32 UART configuration
#
# Copyright (c) 2016 Open-RnD Sp. z o.o.
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig UART_STM32
	bool "STM32 MCU serial driver"
	default n
	select SERIAL_HAS_DRIVER
	depends on SOC_FAMILY_STM32
	help
	  This option enables the UART driver for STM32F10x family of
	  processors. Say y if you wish to use serial port on STM32F10x
	  MCU.

# --- port 1 ---

config UART_STM32_PORT_1
	bool "Enable STM32 USART1 Port"
	default n
	depends on UART_STM32
	help
	  Enable support for USART1 port in the driver. Say y here
	  if you want to use USART1 device.

config UART_STM32_PORT_1_NAME
	string "Device Name for STM32 USART1 Port"
	default "UART_1"
	depends on UART_STM32_PORT_1
	help
	  This is the device name for USART1 port, and is
	  included in the device struct.

if !HAS_DTS
config UART_STM32_PORT_1_BAUD_RATE
	int "STM32 USART1 Baud Rate"
	default 9600
	depends on UART_STM32_PORT_1
	help
	  The baud rate for USART1 port to be set to at boot.

config UART_STM32_PORT_1_IRQ_PRI
	int "STM32 USART1 Interrupt Priority"
	default 0
	depends on UART_STM32_PORT_1 && UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for USART1 port.

endif # !HAS_DTS
# --- port 2 ---

config UART_STM32_PORT_2
	bool "Enable STM32 USART2 Port"
	default n
	depends on UART_STM32
	help
	  Enable support for USART2 port in the driver. Say y here
	  if you want to use USART2 device.

config UART_STM32_PORT_2_NAME
	string "Device Name for STM32 USART2 Port"
	default "UART_2"
	depends on UART_STM32_PORT_2
	help
	  This is the device name for USART2 port, and is
	  included in the device struct.

if !HAS_DTS
config UART_STM32_PORT_2_BAUD_RATE
	int "STM32 USART2 Baud Rate"
	default 9600
	depends on UART_STM32_PORT_2
	help
	  The baud rate for USART2 port to be set to at boot.

config UART_STM32_PORT_2_IRQ_PRI
	int "STM32 USART2 Interrupt Priority"
	default 0
	depends on UART_STM32_PORT_2 && UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for USART2 port.

endif # !HAS_DTS

# --- port 3 ---

config UART_STM32_PORT_3
	bool "Enable STM32 USART3 Port"
	default n
	depends on UART_STM32
	help
	  Enable support for USART3 port in the driver. Say y here
	  if you want to use USART3 device.

config UART_STM32_PORT_3_NAME
	string "Device Name for STM32 USART3 Port"
	default "UART_3"
	depends on UART_STM32_PORT_3
	help
	  This is the device name for USART3 port, and is
	  included in the device struct.

if !HAS_DTS
config UART_STM32_PORT_3_BAUD_RATE
	int "STM32 USART3 Baud Rate"
	default 9600
	depends on UART_STM32_PORT_3
	help
	  The baud rate for USART3 port to be set to at boot.

config UART_STM32_PORT_3_IRQ_PRI
	int "STM32 USART3 Interrupt Priority"
	default 0
	depends on UART_STM32_PORT_3 && UART_INTERRUPT_DRIVEN
	help
	  The interrupt priority for USART3 port.

endif # !HAS_DTS
