drivers/serial: stm32: Enable use of dt pinctrl as serial signals
When available, use dt pinctrl to configure a variable number of
serial signals.
Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c
index f8d4c13..e08e247 100644
--- a/drivers/serial/uart_stm32.c
+++ b/drivers/serial/uart_stm32.c
@@ -20,6 +20,8 @@
#include <soc.h>
#include <init.h>
#include <drivers/uart.h>
+#include <drivers/pinmux.h>
+#include <pinmux/stm32/pinmux_stm32.h>
#include <drivers/clock_control.h>
#include <linker/sections.h>
@@ -676,6 +678,12 @@
return -EIO;
}
+ /* Configure dt provided device signals when available */
+ if (config->pinctrl_list_size != 0) {
+ stm32_dt_pinctrl_configure(config->pinctrl_list,
+ config->pinctrl_list_size);
+ }
+
LL_USART_Disable(UartInstance);
/* TX/RX direction */
@@ -760,6 +768,9 @@
#define STM32_UART_INIT(index) \
STM32_UART_IRQ_HANDLER_DECL(index); \
\
+static const struct soc_gpio_pinctrl uart_pins_##index[] = \
+ ST_STM32_DT_PINCTRL(0, index); \
+ \
static const struct uart_stm32_config uart_stm32_cfg_##index = { \
.uconf = { \
.base = (uint8_t *)DT_INST_REG_ADDR(index), \
@@ -770,6 +781,8 @@
}, \
.hw_flow_control = DT_INST_PROP(index, hw_flow_control), \
.parity = DT_INST_PROP(index, parity), \
+ .pinctrl_list = uart_pins_##index, \
+ .pinctrl_list_size = ARRAY_SIZE(uart_pins_##index), \
}; \
\
static struct uart_stm32_data uart_stm32_data_##index = { \