diff --git a/boards/arm/faze/faze.dts b/boards/arm/faze/faze.dts index b6dbd498a96..5914ba310a8 100644 --- a/boards/arm/faze/faze.dts +++ b/boards/arm/faze/faze.dts @@ -51,8 +51,6 @@ }; &uart0 { - pinmuxs = <&pinmux0 18 IOCON_FUNC1>, <&pinmux0 19 IOCON_FUNC1>; - pinmux-names = "RXD", "TXD"; pinctrl-0 = <&uart0_default>; pinctrl-names = "default"; current-speed = <115200>; diff --git a/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts b/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts index f7c028c086b..e314a117e2c 100644 --- a/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts +++ b/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts @@ -89,8 +89,6 @@ }; &uart0 { - pinmuxs = <&pinmux1 26 IOCON_FUNC2>, <&pinmux1 27 IOCON_FUNC2>; - pinmux-names = "RXD", "TXD"; pinctrl-0 = <&uart0_default>; pinctrl-names = "default"; current-speed = <115200>; @@ -98,8 +96,6 @@ }; arduino_serial: &uart4 { - pinmuxs = <&pinmux2 11 IOCON_FUNC1>, <&pinmux2 12 IOCON_FUNC1>; - pinmux-names = "RXD", "TXD"; pinctrl-0 = <&uart4_default>; pinctrl-names = "default"; current-speed = <115200>; diff --git a/drivers/serial/uart_lpc11u6x.c b/drivers/serial/uart_lpc11u6x.c index 628cd3e35a5..0c079f6d57e 100644 --- a/drivers/serial/uart_lpc11u6x.c +++ b/drivers/serial/uart_lpc11u6x.c @@ -8,7 +8,6 @@ #include #include -#include #include #include "uart_lpc11u6x.h" @@ -345,20 +344,14 @@ static int lpc11u6x_uart0_init(const struct device *dev) { const struct lpc11u6x_uart0_config *cfg = dev->config; struct lpc11u6x_uart0_data *data = dev->data; - const struct device *clk_drv, *rx_pinmux_drv, *tx_pinmux_drv; + const struct device *clk_drv; + int err; - /* Configure RX and TX pin via the pinmux driver */ - rx_pinmux_drv = device_get_binding(cfg->rx_pinmux_drv_name); - if (!rx_pinmux_drv) { - return -EINVAL; + /* Apply default pin control state to select RX and TX pins */ + err = pinctrl_apply_state(cfg->pincfg, PINCTRL_STATE_DEFAULT); + if (err) { + return err; } - pinmux_pin_set(rx_pinmux_drv, cfg->rx_pin, cfg->rx_func); - - tx_pinmux_drv = device_get_binding(cfg->tx_pinmux_drv_name); - if (!tx_pinmux_drv) { - return -EINVAL; - } - pinmux_pin_set(tx_pinmux_drv, cfg->tx_pin, cfg->tx_func); /* Call clock driver to initialize uart0 clock */ clk_drv = device_get_binding(cfg->clock_drv_name); @@ -392,19 +385,14 @@ static int lpc11u6x_uart0_init(const struct device *dev) static void lpc11u6x_uart0_isr_config(const struct device *dev); #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ +PINCTRL_DT_DEFINE(DT_NODELABEL(uart0)); + static const struct lpc11u6x_uart0_config uart0_config = { .uart0 = (struct lpc11u6x_uart0_regs *) DT_REG_ADDR(DT_NODELABEL(uart0)), .clock_drv_name = DT_LABEL(DT_PHANDLE(DT_NODELABEL(uart0), clocks)), - .rx_pinmux_drv_name = - DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart0), pinmuxs, rxd)), - .tx_pinmux_drv_name = - DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart0), pinmuxs, txd)), + .pincfg = PINCTRL_DT_DEV_CONFIG_GET(DT_NODELABEL(uart0)), .clkid = DT_PHA_BY_IDX(DT_NODELABEL(uart0), clocks, 0, clkid), - .rx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, rxd, pin), - .rx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, rxd, function), - .tx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, txd, pin), - .tx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, txd, function), .baudrate = DT_PROP(DT_NODELABEL(uart0), current_speed), #ifdef CONFIG_UART_INTERRUPT_DRIVEN .irq_config_func = lpc11u6x_uart0_isr_config, @@ -791,20 +779,14 @@ static int lpc11u6x_uartx_init(const struct device *dev) { const struct lpc11u6x_uartx_config *cfg = dev->config; struct lpc11u6x_uartx_data *data = dev->data; - const struct device *clk_drv, *rx_pinmux_drv, *tx_pinmux_drv; + const struct device *clk_drv; + int err; - /* Configure RX and TX pin via the pinmux driver */ - rx_pinmux_drv = device_get_binding(cfg->rx_pinmux_drv_name); - if (!rx_pinmux_drv) { - return -EINVAL; + /* Apply default pin control state to select RX and TX pins */ + err = pinctrl_apply_state(cfg->pincfg, PINCTRL_STATE_DEFAULT); + if (err) { + return err; } - pinmux_pin_set(rx_pinmux_drv, cfg->rx_pin, cfg->rx_func); - - tx_pinmux_drv = device_get_binding(cfg->tx_pinmux_drv_name); - if (!tx_pinmux_drv) { - return -EINVAL; - } - pinmux_pin_set(tx_pinmux_drv, cfg->tx_pin, cfg->tx_func); /* Call clock driver to initialize uart0 clock */ clk_drv = device_get_binding(cfg->clock_drv_name); @@ -874,25 +856,15 @@ static const struct uart_driver_api uartx_api = { #define LPC11U6X_UARTX_INIT(idx) \ +PINCTRL_DT_DEFINE(DT_NODELABEL(uart##idx)); \ \ static const struct lpc11u6x_uartx_config uart_cfg_##idx = { \ .base = (struct lpc11u6x_uartx_regs *) \ DT_REG_ADDR(DT_NODELABEL(uart##idx)), \ .clock_drv_name = \ DT_LABEL(DT_PHANDLE(DT_NODELABEL(uart##idx), clocks)), \ - .rx_pinmux_drv_name = \ - DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, rxd)), \ - .tx_pinmux_drv_name = \ - DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, txd)), \ .clkid = DT_PHA_BY_IDX(DT_NODELABEL(uart##idx), clocks, 0, clkid), \ - .rx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, rxd, pin), \ - .rx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), \ - pinmuxs, rxd, function), \ - .rx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, \ - rxd, function), \ - .tx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, txd, pin), \ - .tx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, \ - txd, function), \ + .pincfg = PINCTRL_DT_DEV_CONFIG_GET(DT_NODELABEL(uart##idx)), \ .baudrate = DT_PROP(DT_NODELABEL(uart##idx), current_speed), \ }; \ \ diff --git a/drivers/serial/uart_lpc11u6x.h b/drivers/serial/uart_lpc11u6x.h index 9532a090681..7f673861d4a 100644 --- a/drivers/serial/uart_lpc11u6x.h +++ b/drivers/serial/uart_lpc11u6x.h @@ -7,6 +7,8 @@ #ifndef ZEPHYR_DRIVERS_SERIAL_UART_LPC11U6X_H_ #define ZEPHYR_DRIVERS_SERIAL_UART_LPC11U6X_H_ +#include + #define LPC11U6X_UART0_CLK 14745600 #define LPC11U6X_UART0_LCR_WLS_5BITS 0 @@ -127,14 +129,9 @@ struct lpc11u6x_uart0_regs { struct lpc11u6x_uart0_config { struct lpc11u6x_uart0_regs *uart0; const char *clock_drv_name; - const char *rx_pinmux_drv_name; - const char *tx_pinmux_drv_name; uint32_t baudrate; uint32_t clkid; - uint8_t rx_pin; - uint8_t rx_func; - uint8_t tx_pin; - uint8_t tx_func; + const struct pinctrl_dev_config *pincfg; #ifdef CONFIG_UART_INTERRUPT_DRIVEN void (*irq_config_func)(const struct device *dev); #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ @@ -171,14 +168,9 @@ struct lpc11u6x_uartx_regs { struct lpc11u6x_uartx_config { struct lpc11u6x_uartx_regs *base; const char *clock_drv_name; - const char *rx_pinmux_drv_name; - const char *tx_pinmux_drv_name; uint32_t baudrate; uint32_t clkid; - uint8_t rx_pin; - uint8_t rx_func; - uint8_t tx_pin; - uint8_t tx_func; + const struct pinctrl_dev_config *pincfg; }; struct lpc11u6x_uartx_data { diff --git a/dts/bindings/serial/nxp,lpc11u6x-uart.yaml b/dts/bindings/serial/nxp,lpc11u6x-uart.yaml index 1be3a2978d7..ef48ca5092b 100644 --- a/dts/bindings/serial/nxp,lpc11u6x-uart.yaml +++ b/dts/bindings/serial/nxp,lpc11u6x-uart.yaml @@ -2,7 +2,7 @@ description: LPC11U6X UART compatible: "nxp,lpc11u6x-uart" -include: uart-controller.yaml +include: [uart-controller.yaml, pinctrl-device.yaml] properties: reg: @@ -14,12 +14,8 @@ properties: clocks: required: true - pinmuxs: - type: phandle-array + pinctrl-0: required: true - description: RX and TX pinmux - pinmux-names: - type: string-array + pinctrl-names: required: true - description: UART pins names