drivers: serial: gd32: use pinctrl

Use the pinctrl API to configure peripheral pins.

Signed-off-by: Gerard Marull-Paretas <gerard@teslabs.com>
This commit is contained in:
Gerard Marull-Paretas 2021-11-01 22:22:04 +01:00 committed by Anas Nashif
commit 285f55899b
2 changed files with 10 additions and 2 deletions

View file

@ -5,11 +5,13 @@
#define DT_DRV_COMPAT gd_gd32_usart #define DT_DRV_COMPAT gd_gd32_usart
#include <drivers/pinctrl.h>
#include <drivers/uart.h> #include <drivers/uart.h>
struct gd32_usart_config { struct gd32_usart_config {
uint32_t reg; uint32_t reg;
uint32_t rcu_periph_clock; uint32_t rcu_periph_clock;
const struct pinctrl_dev_config *pcfg;
}; };
struct gd32_usart_data { struct gd32_usart_data {
@ -20,8 +22,12 @@ static int usart_gd32_init(const struct device *dev)
{ {
const struct gd32_usart_config *const cfg = dev->config; const struct gd32_usart_config *const cfg = dev->config;
struct gd32_usart_data *const data = dev->data; struct gd32_usart_data *const data = dev->data;
int ret;
/* NOTE: pins are configured at board_init till pinctrl be available */ ret = pinctrl_apply_state(cfg->pcfg, PINCTRL_STATE_DEFAULT);
if (ret < 0) {
return ret;
}
rcu_periph_clock_enable(cfg->rcu_periph_clock); rcu_periph_clock_enable(cfg->rcu_periph_clock);
usart_deinit(cfg->reg); usart_deinit(cfg->reg);
@ -100,12 +106,14 @@ static const struct uart_driver_api usart_gd32_driver_api = {
}; };
#define GD32_USART_INIT(n) \ #define GD32_USART_INIT(n) \
PINCTRL_DT_INST_DEFINE(n) \
static struct gd32_usart_data usart##n##_gd32_data = { \ static struct gd32_usart_data usart##n##_gd32_data = { \
.baud_rate = DT_INST_PROP(n, current_speed), \ .baud_rate = DT_INST_PROP(n, current_speed), \
}; \ }; \
static const struct gd32_usart_config usart##n##_gd32_config = { \ static const struct gd32_usart_config usart##n##_gd32_config = { \
.reg = DT_INST_REG_ADDR(n), \ .reg = DT_INST_REG_ADDR(n), \
.rcu_periph_clock = DT_INST_PROP(n, rcu_periph_clock), \ .rcu_periph_clock = DT_INST_PROP(n, rcu_periph_clock), \
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \
}; \ }; \
DEVICE_DT_INST_DEFINE(n, &usart_gd32_init, \ DEVICE_DT_INST_DEFINE(n, &usart_gd32_init, \
NULL, \ NULL, \

View file

@ -5,7 +5,7 @@ description: GigaDevice USART
compatible: "gd,gd32-usart" compatible: "gd,gd32-usart"
include: uart-controller.yaml include: [uart-controller.yaml, pinctrl-device.yaml]
properties: properties:
reg: reg: