From 694637a83cd10aad27645534612fccc1de5021c2 Mon Sep 17 00:00:00 2001 From: Daniel DeGrasse Date: Mon, 25 Apr 2022 17:07:50 -0500 Subject: [PATCH] drivers: uart_mcux_iuart: add pin control support Add pin control support to mcux_iuart driver. Signed-off-by: Daniel DeGrasse --- drivers/serial/uart_mcux_iuart.c | 11 +++++++++++ dts/bindings/serial/nxp,imx-iuart.yaml | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/serial/uart_mcux_iuart.c b/drivers/serial/uart_mcux_iuart.c index 64c46db3ce2..d32cdd3f86c 100644 --- a/drivers/serial/uart_mcux_iuart.c +++ b/drivers/serial/uart_mcux_iuart.c @@ -12,12 +12,14 @@ #include #include #include +#include struct mcux_iuart_config { UART_Type *base; const struct device *clock_dev; clock_control_subsys_t clock_subsys; uint32_t baud_rate; + const struct pinctrl_dev_config *pincfg; #ifdef CONFIG_UART_INTERRUPT_DRIVEN void (*irq_config_func)(const struct device *dev); #endif @@ -223,6 +225,7 @@ static int mcux_iuart_init(const struct device *dev) const struct mcux_iuart_config *config = dev->config; uart_config_t uart_config; uint32_t clock_freq; + int err; if (clock_control_get_rate(config->clock_dev, config->clock_subsys, &clock_freq)) { @@ -236,6 +239,11 @@ static int mcux_iuart_init(const struct device *dev) UART_Init(config->base, &uart_config, clock_freq); + err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); + if (err) { + return err; + } + #ifdef CONFIG_UART_INTERRUPT_DRIVEN config->irq_config_func(dev); #endif @@ -299,6 +307,7 @@ static const struct mcux_iuart_config mcux_iuart_##n##_config = { \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ .baud_rate = DT_INST_PROP(n, current_speed), \ + .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ IRQ_FUNC_INIT \ } @@ -317,6 +326,8 @@ static const struct mcux_iuart_config mcux_iuart_##n##_config = { \ CONFIG_SERIAL_INIT_PRIORITY, \ &mcux_iuart_driver_api); \ \ + PINCTRL_DT_INST_DEFINE(n); \ + \ IUART_MCUX_CONFIG_FUNC(n) \ \ IUART_MCUX_INIT_CFG(n); diff --git a/dts/bindings/serial/nxp,imx-iuart.yaml b/dts/bindings/serial/nxp,imx-iuart.yaml index 546f31653b2..5e2b7265f9b 100644 --- a/dts/bindings/serial/nxp,imx-iuart.yaml +++ b/dts/bindings/serial/nxp,imx-iuart.yaml @@ -3,7 +3,7 @@ description: | compatible: "nxp,imx-iuart" -include: uart-controller.yaml +include: [uart-controller.yaml, pinctrl-device.yaml] properties: reg: @@ -14,3 +14,9 @@ properties: clocks: required: true + + pinctrl-0: + required: true + + pinctrl-names: + required: true