diff --git a/drivers/serial/uart_imx.c b/drivers/serial/uart_imx.c index 338d6c17e00..7c1b336c731 100644 --- a/drivers/serial/uart_imx.c +++ b/drivers/serial/uart_imx.c @@ -20,6 +20,7 @@ #include #include #include +#include #define UART_STRUCT(dev) \ ((UART_Type *)((const struct imx_uart_config *const)(dev)->config)->base) @@ -28,6 +29,7 @@ struct imx_uart_config { UART_Type *base; uint32_t baud_rate; uint8_t modem_mode; + const struct pinctrl_dev_config *pincfg; #ifdef CONFIG_UART_INTERRUPT_DRIVEN void (*irq_config_func)(const struct device *dev); #endif @@ -55,6 +57,7 @@ static int uart_imx_init(const struct device *dev) UART_Type *uart = UART_STRUCT(dev); const struct imx_uart_config *config = dev->config; unsigned int old_level; + int err; /* disable interrupts */ old_level = irq_lock(); @@ -68,6 +71,11 @@ static int uart_imx_init(const struct device *dev) .direction = uartDirectionTxRx }; + err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); + if (err) { + return err; + } + /* Get current module clock frequency */ initConfig.clockRate = get_uart_clock_freq(uart); @@ -283,6 +291,7 @@ static const struct uart_driver_api uart_imx_driver_api = { .base = (UART_Type *) DT_INST_REG_ADDR(n), \ .baud_rate = DT_INST_PROP(n, current_speed), \ .modem_mode = DT_INST_PROP(n, modem_mode), \ + .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ IRQ_FUNC_INIT \ } @@ -312,6 +321,8 @@ static const struct uart_driver_api uart_imx_driver_api = { \ static const struct imx_uart_config imx_uart_##n##_config; \ \ + PINCTRL_DT_INST_DEFINE(n); \ + \ DEVICE_DT_INST_DEFINE(n, &uart_imx_init, NULL, \ &imx_uart_##n##_data, &imx_uart_##n##_config, \ PRE_KERNEL_1, \ diff --git a/dts/bindings/serial/nxp,imx-uart.yaml b/dts/bindings/serial/nxp,imx-uart.yaml index ce8f1b8a09c..1f8c7defb8d 100644 --- a/dts/bindings/serial/nxp,imx-uart.yaml +++ b/dts/bindings/serial/nxp,imx-uart.yaml @@ -5,7 +5,7 @@ description: iMX UART compatible: "nxp,imx-uart" -include: uart-controller.yaml +include: [uart-controller.yaml, pinctrl-device.yaml] properties: reg: @@ -23,3 +23,9 @@ properties: type: int required: true description: Set the RDC permission for this peripheral + + pinctrl-0: + required: true + + pinctrl-names: + required: true