# 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.

if UART_STM32

# --- 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.

# --- 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.

# --- 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.

endif # UART_STM32
