55
66#define DT_DRV_COMPAT gd_gd32_usart
77
8+ #include <drivers/pinctrl.h>
89#include <drivers/uart.h>
910
1011struct gd32_usart_config {
1112 uint32_t reg ;
1213 uint32_t rcu_periph_clock ;
14+ const struct pinctrl_dev_config * pcfg ;
1315};
1416
1517struct gd32_usart_data {
@@ -20,8 +22,12 @@ static int usart_gd32_init(const struct device *dev)
2022{
2123 const struct gd32_usart_config * const cfg = dev -> config ;
2224 struct gd32_usart_data * const data = dev -> data ;
25+ int ret ;
2326
24- /* NOTE: pins are configured at board_init till pinctrl be available */
27+ ret = pinctrl_apply_state (cfg -> pcfg , PINCTRL_STATE_DEFAULT );
28+ if (ret < 0 ) {
29+ return ret ;
30+ }
2531
2632 rcu_periph_clock_enable (cfg -> rcu_periph_clock );
2733 usart_deinit (cfg -> reg );
@@ -100,12 +106,14 @@ static const struct uart_driver_api usart_gd32_driver_api = {
100106};
101107
102108#define GD32_USART_INIT (n ) \
109+ PINCTRL_DT_INST_DEFINE(n) \
103110 static struct gd32_usart_data usart##n##_gd32_data = { \
104111 .baud_rate = DT_INST_PROP(n, current_speed), \
105112 }; \
106113 static const struct gd32_usart_config usart##n##_gd32_config = { \
107114 .reg = DT_INST_REG_ADDR(n), \
108115 .rcu_periph_clock = DT_INST_PROP(n, rcu_periph_clock), \
116+ .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \
109117 }; \
110118 DEVICE_DT_INST_DEFINE(n, &usart_gd32_init, \
111119 NULL, \
0 commit comments