drivers: serial: numicro: use pinctrl instead of hard-coded values
This commit enables the numicro serial driver to configure the UART pins using the pinctrl API. Signed-off-by: Filip Brozovic <fbrozovic@gmail.com>
This commit is contained in:
parent
3453a3b247
commit
617aa8cc65
|
@ -5,6 +5,7 @@
|
||||||
* Author: Saravanan Sekar <saravanan@linumiz.com>
|
* Author: Saravanan Sekar <saravanan@linumiz.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <zephyr/drivers/pinctrl.h>
|
||||||
#include <zephyr/drivers/uart.h>
|
#include <zephyr/drivers/uart.h>
|
||||||
#include <NuMicro.h>
|
#include <NuMicro.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -15,6 +16,7 @@ struct uart_numicro_config {
|
||||||
UART_T *uart;
|
UART_T *uart;
|
||||||
uint32_t id_rst;
|
uint32_t id_rst;
|
||||||
uint32_t id_clk;
|
uint32_t id_clk;
|
||||||
|
const struct pinctrl_dev_config *pincfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uart_numicro_data {
|
struct uart_numicro_data {
|
||||||
|
@ -146,6 +148,7 @@ static int uart_numicro_init(const struct device *dev)
|
||||||
{
|
{
|
||||||
const struct uart_numicro_config *config = dev->config;
|
const struct uart_numicro_config *config = dev->config;
|
||||||
struct uart_numicro_data *ddata = dev->data;
|
struct uart_numicro_data *ddata = dev->data;
|
||||||
|
int err;
|
||||||
|
|
||||||
SYS_ResetModule(config->id_rst);
|
SYS_ResetModule(config->id_rst);
|
||||||
|
|
||||||
|
@ -158,13 +161,13 @@ static int uart_numicro_init(const struct device *dev)
|
||||||
CLK_SetModuleClock(config->id_clk, CLK_CLKSEL1_UART0SEL_PLL,
|
CLK_SetModuleClock(config->id_clk, CLK_CLKSEL1_UART0SEL_PLL,
|
||||||
CLK_CLKDIV0_UART0(0));
|
CLK_CLKDIV0_UART0(0));
|
||||||
|
|
||||||
/* Set pinctrl for UART0 RXD and TXD */
|
|
||||||
SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk);
|
|
||||||
SYS->GPB_MFPH |= (SYS_GPB_MFPH_PB12MFP_UART0_RXD |
|
|
||||||
SYS_GPB_MFPH_PB13MFP_UART0_TXD);
|
|
||||||
|
|
||||||
SYS_LockReg();
|
SYS_LockReg();
|
||||||
|
|
||||||
|
err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT);
|
||||||
|
if (err != 0) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
UART_Open(config->uart, ddata->ucfg.baudrate);
|
UART_Open(config->uart, ddata->ucfg.baudrate);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -181,11 +184,13 @@ static const struct uart_driver_api uart_numicro_driver_api = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUMICRO_INIT(index) \
|
#define NUMICRO_INIT(index) \
|
||||||
|
PINCTRL_DT_INST_DEFINE(index); \
|
||||||
\
|
\
|
||||||
static const struct uart_numicro_config uart_numicro_cfg_##index = { \
|
static const struct uart_numicro_config uart_numicro_cfg_##index = { \
|
||||||
.uart = (UART_T *)DT_INST_REG_ADDR(index), \
|
.uart = (UART_T *)DT_INST_REG_ADDR(index), \
|
||||||
.id_rst = UART##index##_RST, \
|
.id_rst = UART##index##_RST, \
|
||||||
.id_clk = UART##index##_MODULE, \
|
.id_clk = UART##index##_MODULE, \
|
||||||
|
.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(index), \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
static struct uart_numicro_data uart_numicro_data_##index = { \
|
static struct uart_numicro_data uart_numicro_data_##index = { \
|
||||||
|
|
|
@ -2,8 +2,11 @@ description: NUVOTON NUMICRO FAMILY UART
|
||||||
|
|
||||||
compatible: "nuvoton,numicro-uart"
|
compatible: "nuvoton,numicro-uart"
|
||||||
|
|
||||||
include: uart-controller.yaml
|
include: [uart-controller.yaml, pinctrl-device.yaml]
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
reg:
|
reg:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
pinctrl-0:
|
||||||
|
required: true
|
||||||
|
|
Loading…
Reference in a new issue