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 = {		\