diff --git a/drivers/serial/uart_numicro.c b/drivers/serial/uart_numicro.c index 77079965a0d..d9dfdc3f944 100644 --- a/drivers/serial/uart_numicro.c +++ b/drivers/serial/uart_numicro.c @@ -11,12 +11,8 @@ #define DT_DRV_COMPAT nuvoton_numicro_uart -#define UART_STRUCT(dev) \ - ((UART_T *) \ - ((const struct uart_numicro_config * const)(dev)->config)->devcfg.base) - struct uart_numicro_config { - struct uart_device_config devcfg; + UART_T *uart; uint32_t id_rst; uint32_t id_clk; }; @@ -28,9 +24,10 @@ struct uart_numicro_data { static int uart_numicro_poll_in(const struct device *dev, unsigned char *c) { + const struct uart_numicro_config *config = dev->config; uint32_t count; - count = UART_Read(UART_STRUCT(dev), c, 1); + count = UART_Read(config->uart, c, 1); if (!count) { return -1; } @@ -40,7 +37,9 @@ static int uart_numicro_poll_in(const struct device *dev, unsigned char *c) static void uart_numicro_poll_out(const struct device *dev, unsigned char c) { - UART_Write(UART_STRUCT(dev), &c, 1); + const struct uart_numicro_config *config = dev->config; + + UART_Write(config->uart, &c, 1); } static int uart_numicro_err_check(const struct device *dev) @@ -99,6 +98,7 @@ static inline uint32_t uart_numicro_convert_parity(enum uart_config_parity parit static int uart_numicro_configure(const struct device *dev, const struct uart_config *cfg) { + const struct uart_numicro_config *config = dev->config; struct uart_numicro_data *ddata = dev->data; int32_t databits, stopbits; uint32_t parity; @@ -114,17 +114,17 @@ static int uart_numicro_configure(const struct device *dev, } if (cfg->flow_ctrl == UART_CFG_FLOW_CTRL_NONE) { - UART_DisableFlowCtrl(UART_STRUCT(dev)); + UART_DisableFlowCtrl(config->uart); } else if (cfg->flow_ctrl == UART_CFG_FLOW_CTRL_RTS_CTS) { - UART_EnableFlowCtrl(UART_STRUCT(dev)); + UART_EnableFlowCtrl(config->uart); } else { return -ENOTSUP; } parity = uart_numicro_convert_parity(cfg->parity); - UART_SetLineConfig(UART_STRUCT(dev), cfg->baudrate, databits, - parity, stopbits); + UART_SetLineConfig(config->uart, cfg->baudrate, databits, parity, + stopbits); memcpy(&ddata->ucfg, cfg, sizeof(*cfg)); @@ -165,7 +165,7 @@ static int uart_numicro_init(const struct device *dev) SYS_LockReg(); - UART_Open(UART_STRUCT(dev), ddata->ucfg.baudrate); + UART_Open(config->uart, ddata->ucfg.baudrate); return 0; } @@ -183,9 +183,7 @@ static const struct uart_driver_api uart_numicro_driver_api = { #define NUMICRO_INIT(index) \ \ static const struct uart_numicro_config uart_numicro_cfg_##index = { \ - .devcfg = { \ - .base = (uint8_t *)DT_INST_REG_ADDR(index), \ - }, \ + .uart = (UART_T *)DT_INST_REG_ADDR(index), \ .id_rst = UART##index##_RST, \ .id_clk = UART##index##_MODULE, \ }; \