drivers: uart: add pinctrl driver support

Replace soc-specific pin functions with Zephyr pinctrl api functions for
pin-mux configuration in uart driver.

Signed-off-by: Mulin Chao <mlchao@nuvoton.com>
This commit is contained in:
Mulin Chao 2022-02-21 01:52:53 -08:00 committed by Maureen Helm
commit 8efc935288
6 changed files with 18 additions and 17 deletions

View file

@ -70,7 +70,9 @@
&uart1 { &uart1 {
status = "okay"; status = "okay";
current-speed = <115200>; current-speed = <115200>;
pinctrl-0 = <&altc_uart1_sl2>; /* Use UART1_SL2 ie. PIN64.65 */ /* Use UART1_SL2 ie. PIN64.65 */
pinctrl-0 = <&uart1_2_sin_sout_gp64_65>;
pinctrl-names = "default";
}; };
&pwm6 { &pwm6 {

View file

@ -83,7 +83,9 @@
status = "okay"; status = "okay";
current-speed = <115200>; current-speed = <115200>;
/* Use UART1_SL2 ie. PIN64.65 */ /* Use UART1_SL2 ie. PIN64.65 */
pinctrl-0 = <&altj_cr_sin1_sl2 &altj_cr_sout1_sl2>; pinctrl-0 = <&uart1_2_sin_gp64
&uart1_2_sout_gp65>;
pinctrl-names = "default";
}; };
&pwm6 { &pwm6 {

View file

@ -8,6 +8,7 @@
#include <zephyr/sys/__assert.h> #include <zephyr/sys/__assert.h>
#include <zephyr/drivers/gpio.h> #include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/pinctrl.h>
#include <zephyr/drivers/uart.h> #include <zephyr/drivers/uart.h>
#include <zephyr/drivers/clock_control.h> #include <zephyr/drivers/clock_control.h>
#include <zephyr/kernel.h> #include <zephyr/kernel.h>
@ -31,8 +32,7 @@ struct uart_npcx_config {
/* int-mux configuration */ /* int-mux configuration */
const struct npcx_wui uart_rx_wui; const struct npcx_wui uart_rx_wui;
/* pinmux configuration */ /* pinmux configuration */
const uint8_t alts_size; const struct pinctrl_dev_config *pcfg;
const struct npcx_alt *alts_list;
}; };
enum uart_pm_policy_state_flag { enum uart_pm_policy_state_flag {
@ -499,7 +499,11 @@ static int uart_npcx_init(const struct device *dev)
} }
/* Configure pin-mux for uart device */ /* Configure pin-mux for uart device */
npcx_pinctrl_mux_configure(config->alts_list, config->alts_size, 1); ret = pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT);
if (ret < 0) {
LOG_ERR("UART pinctrl setup failed (%d)", ret);
return ret;
}
return 0; return 0;
} }
@ -524,14 +528,13 @@ static int uart_npcx_init(const struct device *dev)
#define NPCX_UART_INIT(i) \ #define NPCX_UART_INIT(i) \
NPCX_UART_IRQ_CONFIG_FUNC_DECL(i); \ NPCX_UART_IRQ_CONFIG_FUNC_DECL(i); \
\ \
static const struct npcx_alt uart_alts##i[] = NPCX_DT_ALT_ITEMS_LIST(i); \ PINCTRL_DT_INST_DEFINE(i); \
\ \
static const struct uart_npcx_config uart_npcx_cfg_##i = { \ static const struct uart_npcx_config uart_npcx_cfg_##i = { \
.inst = (struct uart_reg *)DT_INST_REG_ADDR(i), \ .inst = (struct uart_reg *)DT_INST_REG_ADDR(i), \
.clk_cfg = NPCX_DT_CLK_CFG_ITEM(i), \ .clk_cfg = NPCX_DT_CLK_CFG_ITEM(i), \
.uart_rx_wui = NPCX_DT_WUI_ITEM_BY_NAME(0, uart_rx), \ .uart_rx_wui = NPCX_DT_WUI_ITEM_BY_NAME(0, uart_rx), \
.alts_size = ARRAY_SIZE(uart_alts##i), \ .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(i), \
.alts_list = uart_alts##i, \
NPCX_UART_IRQ_CONFIG_FUNC_INIT(i) \ NPCX_UART_IRQ_CONFIG_FUNC_INIT(i) \
}; \ }; \
\ \

View file

@ -76,7 +76,6 @@
reg = <0x400C4000 0x2000>; reg = <0x400C4000 0x2000>;
interrupts = <33 3>; interrupts = <33 3>;
clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL1 4>; clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL1 4>;
pinctrl-0 = <&alta_uart1_sl1>; /* PIN10.11 */
uart-rx = <&wui_cr_sin1>; uart-rx = <&wui_cr_sin1>;
status = "disabled"; status = "disabled";
label = "UART_1"; label = "UART_1";
@ -87,7 +86,6 @@
reg = <0x400C6000 0x2000>; reg = <0x400C6000 0x2000>;
interrupts = <32 3>; interrupts = <32 3>;
clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL7 6>; clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL7 6>;
pinctrl-0 = <&alta_uart2_sl>; /* PIN75.86 */
uart-rx = <&wui_cr_sin2>; uart-rx = <&wui_cr_sin2>;
status = "disabled"; status = "disabled";
label = "UART_2"; label = "UART_2";

View file

@ -77,7 +77,6 @@
reg = <0x400E0000 0x2000>; reg = <0x400E0000 0x2000>;
interrupts = <33 3>; interrupts = <33 3>;
clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL1 4>; clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL1 4>;
pinctrl-0 = <&altj_cr_sin1_sl1 &altj_cr_sout1_sl1>; /* PIN10.11 */
uart-rx = <&wui_cr_sin1>; uart-rx = <&wui_cr_sin1>;
status = "disabled"; status = "disabled";
label = "UART_1"; label = "UART_1";
@ -88,7 +87,6 @@
reg = <0x400E2000 0x2000>; reg = <0x400E2000 0x2000>;
interrupts = <32 3>; interrupts = <32 3>;
clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL7 6>; clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL7 6>;
pinctrl-0 = <&altj_cr_sin2_sl &altj_cr_sout2_sl>; /* PIN75.86 */
uart-rx = <&wui_cr_sin2>; uart-rx = <&wui_cr_sin2>;
status = "disabled"; status = "disabled";
label = "UART_2"; label = "UART_2";
@ -99,7 +97,6 @@
reg = <0x400E4000 0x2000>; reg = <0x400E4000 0x2000>;
interrupts = <38 3>; interrupts = <38 3>;
clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL7 4>; clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL7 4>;
pinctrl-0 = <&altj_cr_sin3_sl &altj_cr_sout3_sl>; /* PIND3.D6 */
uart-rx = <&wui_cr_sin3>; uart-rx = <&wui_cr_sin3>;
status = "disabled"; status = "disabled";
label = "UART_3"; label = "UART_3";
@ -110,7 +107,6 @@
reg = <0x400E6000 0x2000>; reg = <0x400E6000 0x2000>;
interrupts = <39 3>; interrupts = <39 3>;
clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL7 3>; clocks = <&pcc NPCX_CLOCK_BUS_APB4 NPCX_PWDWN_CTL7 3>;
pinctrl-0 = <&alte_cr_sin4_sl &alte_cr_sout4_sl>; /* PIN17.35 */
uart-rx = <&wui_cr_sin4>; uart-rx = <&wui_cr_sin4>;
status = "disabled"; status = "disabled";
label = "UART_4"; label = "UART_4";

View file

@ -5,7 +5,7 @@ description: Nuvoton, NPCX-UART node
compatible: "nuvoton,npcx-uart" compatible: "nuvoton,npcx-uart"
include: uart-controller.yaml include: [uart-controller.yaml, pinctrl-device.yaml]
properties: properties:
reg: reg:
@ -13,9 +13,9 @@ properties:
clocks: clocks:
required: true required: true
pinctrl-0: pinctrl-0:
type: phandles
required: true required: true
description: configurations of pinmux controllers pinctrl-names:
required: true
uart-rx: uart-rx:
type: phandle type: phandle
required: true required: true