Skip to content

Commit 7e89ce9

Browse files
danieldegrassedleach02
authored andcommitted
drivers: serial: enable pin control for lpc11u6x serial driver
Enable pin control api for lpc11u6x serial driver, and remove pinmux api usage. Signed-off-by: Daniel DeGrasse <[email protected]>
1 parent 069280c commit 7e89ce9

File tree

5 files changed

+24
-70
lines changed

5 files changed

+24
-70
lines changed

boards/arm/faze/faze.dts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@
5151
};
5252

5353
&uart0 {
54-
pinmuxs = <&pinmux0 18 IOCON_FUNC1>, <&pinmux0 19 IOCON_FUNC1>;
55-
pinmux-names = "RXD", "TXD";
5654
pinctrl-0 = <&uart0_default>;
5755
pinctrl-names = "default";
5856
current-speed = <115200>;

boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,13 @@
8989
};
9090

9191
&uart0 {
92-
pinmuxs = <&pinmux1 26 IOCON_FUNC2>, <&pinmux1 27 IOCON_FUNC2>;
93-
pinmux-names = "RXD", "TXD";
9492
pinctrl-0 = <&uart0_default>;
9593
pinctrl-names = "default";
9694
current-speed = <115200>;
9795
status = "okay";
9896
};
9997

10098
arduino_serial: &uart4 {
101-
pinmuxs = <&pinmux2 11 IOCON_FUNC1>, <&pinmux2 12 IOCON_FUNC1>;
102-
pinmux-names = "RXD", "TXD";
10399
pinctrl-0 = <&uart4_default>;
104100
pinctrl-names = "default";
105101
current-speed = <115200>;

drivers/serial/uart_lpc11u6x.c

Lines changed: 17 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <zephyr/arch/arm/aarch32/cortex_m/cmsis.h>
99

1010
#include <zephyr/drivers/uart.h>
11-
#include <zephyr/drivers/pinmux.h>
1211
#include <zephyr/drivers/clock_control.h>
1312

1413
#include "uart_lpc11u6x.h"
@@ -345,20 +344,14 @@ static int lpc11u6x_uart0_init(const struct device *dev)
345344
{
346345
const struct lpc11u6x_uart0_config *cfg = dev->config;
347346
struct lpc11u6x_uart0_data *data = dev->data;
348-
const struct device *clk_drv, *rx_pinmux_drv, *tx_pinmux_drv;
347+
const struct device *clk_drv;
348+
int err;
349349

350-
/* Configure RX and TX pin via the pinmux driver */
351-
rx_pinmux_drv = device_get_binding(cfg->rx_pinmux_drv_name);
352-
if (!rx_pinmux_drv) {
353-
return -EINVAL;
350+
/* Apply default pin control state to select RX and TX pins */
351+
err = pinctrl_apply_state(cfg->pincfg, PINCTRL_STATE_DEFAULT);
352+
if (err) {
353+
return err;
354354
}
355-
pinmux_pin_set(rx_pinmux_drv, cfg->rx_pin, cfg->rx_func);
356-
357-
tx_pinmux_drv = device_get_binding(cfg->tx_pinmux_drv_name);
358-
if (!tx_pinmux_drv) {
359-
return -EINVAL;
360-
}
361-
pinmux_pin_set(tx_pinmux_drv, cfg->tx_pin, cfg->tx_func);
362355

363356
/* Call clock driver to initialize uart0 clock */
364357
clk_drv = device_get_binding(cfg->clock_drv_name);
@@ -392,19 +385,14 @@ static int lpc11u6x_uart0_init(const struct device *dev)
392385
static void lpc11u6x_uart0_isr_config(const struct device *dev);
393386
#endif /* CONFIG_UART_INTERRUPT_DRIVEN */
394387

388+
PINCTRL_DT_DEFINE(DT_NODELABEL(uart0));
389+
395390
static const struct lpc11u6x_uart0_config uart0_config = {
396391
.uart0 = (struct lpc11u6x_uart0_regs *)
397392
DT_REG_ADDR(DT_NODELABEL(uart0)),
398393
.clock_drv_name = DT_LABEL(DT_PHANDLE(DT_NODELABEL(uart0), clocks)),
399-
.rx_pinmux_drv_name =
400-
DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart0), pinmuxs, rxd)),
401-
.tx_pinmux_drv_name =
402-
DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart0), pinmuxs, txd)),
394+
.pincfg = PINCTRL_DT_DEV_CONFIG_GET(DT_NODELABEL(uart0)),
403395
.clkid = DT_PHA_BY_IDX(DT_NODELABEL(uart0), clocks, 0, clkid),
404-
.rx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, rxd, pin),
405-
.rx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, rxd, function),
406-
.tx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, txd, pin),
407-
.tx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart0), pinmuxs, txd, function),
408396
.baudrate = DT_PROP(DT_NODELABEL(uart0), current_speed),
409397
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
410398
.irq_config_func = lpc11u6x_uart0_isr_config,
@@ -791,20 +779,14 @@ static int lpc11u6x_uartx_init(const struct device *dev)
791779
{
792780
const struct lpc11u6x_uartx_config *cfg = dev->config;
793781
struct lpc11u6x_uartx_data *data = dev->data;
794-
const struct device *clk_drv, *rx_pinmux_drv, *tx_pinmux_drv;
782+
const struct device *clk_drv;
783+
int err;
795784

796-
/* Configure RX and TX pin via the pinmux driver */
797-
rx_pinmux_drv = device_get_binding(cfg->rx_pinmux_drv_name);
798-
if (!rx_pinmux_drv) {
799-
return -EINVAL;
800-
}
801-
pinmux_pin_set(rx_pinmux_drv, cfg->rx_pin, cfg->rx_func);
802-
803-
tx_pinmux_drv = device_get_binding(cfg->tx_pinmux_drv_name);
804-
if (!tx_pinmux_drv) {
805-
return -EINVAL;
785+
/* Apply default pin control state to select RX and TX pins */
786+
err = pinctrl_apply_state(cfg->pincfg, PINCTRL_STATE_DEFAULT);
787+
if (err) {
788+
return err;
806789
}
807-
pinmux_pin_set(tx_pinmux_drv, cfg->tx_pin, cfg->tx_func);
808790

809791
/* Call clock driver to initialize uart0 clock */
810792
clk_drv = device_get_binding(cfg->clock_drv_name);
@@ -874,25 +856,15 @@ static const struct uart_driver_api uartx_api = {
874856

875857

876858
#define LPC11U6X_UARTX_INIT(idx) \
859+
PINCTRL_DT_DEFINE(DT_NODELABEL(uart##idx)); \
877860
\
878861
static const struct lpc11u6x_uartx_config uart_cfg_##idx = { \
879862
.base = (struct lpc11u6x_uartx_regs *) \
880863
DT_REG_ADDR(DT_NODELABEL(uart##idx)), \
881864
.clock_drv_name = \
882865
DT_LABEL(DT_PHANDLE(DT_NODELABEL(uart##idx), clocks)), \
883-
.rx_pinmux_drv_name = \
884-
DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, rxd)), \
885-
.tx_pinmux_drv_name = \
886-
DT_LABEL(DT_PHANDLE_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, txd)), \
887866
.clkid = DT_PHA_BY_IDX(DT_NODELABEL(uart##idx), clocks, 0, clkid), \
888-
.rx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, rxd, pin), \
889-
.rx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), \
890-
pinmuxs, rxd, function), \
891-
.rx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, \
892-
rxd, function), \
893-
.tx_pin = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, txd, pin), \
894-
.tx_func = DT_PHA_BY_NAME(DT_NODELABEL(uart##idx), pinmuxs, \
895-
txd, function), \
867+
.pincfg = PINCTRL_DT_DEV_CONFIG_GET(DT_NODELABEL(uart##idx)), \
896868
.baudrate = DT_PROP(DT_NODELABEL(uart##idx), current_speed), \
897869
}; \
898870
\

drivers/serial/uart_lpc11u6x.h

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#ifndef ZEPHYR_DRIVERS_SERIAL_UART_LPC11U6X_H_
88
#define ZEPHYR_DRIVERS_SERIAL_UART_LPC11U6X_H_
99

10+
#include <zephyr/drivers/pinctrl.h>
11+
1012
#define LPC11U6X_UART0_CLK 14745600
1113

1214
#define LPC11U6X_UART0_LCR_WLS_5BITS 0
@@ -127,14 +129,9 @@ struct lpc11u6x_uart0_regs {
127129
struct lpc11u6x_uart0_config {
128130
struct lpc11u6x_uart0_regs *uart0;
129131
const char *clock_drv_name;
130-
const char *rx_pinmux_drv_name;
131-
const char *tx_pinmux_drv_name;
132132
uint32_t baudrate;
133133
uint32_t clkid;
134-
uint8_t rx_pin;
135-
uint8_t rx_func;
136-
uint8_t tx_pin;
137-
uint8_t tx_func;
134+
const struct pinctrl_dev_config *pincfg;
138135
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
139136
void (*irq_config_func)(const struct device *dev);
140137
#endif /* CONFIG_UART_INTERRUPT_DRIVEN */
@@ -171,14 +168,9 @@ struct lpc11u6x_uartx_regs {
171168
struct lpc11u6x_uartx_config {
172169
struct lpc11u6x_uartx_regs *base;
173170
const char *clock_drv_name;
174-
const char *rx_pinmux_drv_name;
175-
const char *tx_pinmux_drv_name;
176171
uint32_t baudrate;
177172
uint32_t clkid;
178-
uint8_t rx_pin;
179-
uint8_t rx_func;
180-
uint8_t tx_pin;
181-
uint8_t tx_func;
173+
const struct pinctrl_dev_config *pincfg;
182174
};
183175

184176
struct lpc11u6x_uartx_data {

dts/bindings/serial/nxp,lpc11u6x-uart.yaml

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ description: LPC11U6X UART
22

33
compatible: "nxp,lpc11u6x-uart"
44

5-
include: uart-controller.yaml
5+
include: [uart-controller.yaml, pinctrl-device.yaml]
66

77
properties:
88
reg:
@@ -14,12 +14,8 @@ properties:
1414
clocks:
1515
required: true
1616

17-
pinmuxs:
18-
type: phandle-array
17+
pinctrl-0:
1918
required: true
20-
description: RX and TX pinmux
2119

22-
pinmux-names:
23-
type: string-array
20+
pinctrl-names:
2421
required: true
25-
description: UART pins names

0 commit comments

Comments
 (0)