diff --git a/drivers/serial/uart_async_to_irq.c b/drivers/serial/uart_async_to_irq.c index f1825eb398e..897ff50fcb5 100644 --- a/drivers/serial/uart_async_to_irq.c +++ b/drivers/serial/uart_async_to_irq.c @@ -336,15 +336,8 @@ void z_uart_async_to_irq_irq_callback_set(const struct device *dev, int uart_async_to_irq_rx_enable(const struct device *dev) { struct uart_async_to_irq_data *data = get_data(dev); - const struct uart_async_to_irq_config *config = get_config(dev); int err; - err = config->api->callback_set(dev, uart_async_to_irq_callback, data); - if (err < 0) { - return err; - } - - err = try_rx_enable(dev, data); if (err == 0) { atomic_or(&data->flags, A2I_RX_ENABLE); @@ -381,13 +374,21 @@ void uart_async_to_irq_trampoline_cb(const struct device *dev) } while (atomic_dec(&data->irq_req) > 1); } -int uart_async_to_irq_init(struct uart_async_to_irq_data *data, - const struct uart_async_to_irq_config *config) +int uart_async_to_irq_init(const struct device *dev) { + struct uart_async_to_irq_data *data = get_data(dev); + const struct uart_async_to_irq_config *config = get_config(dev); + int err; + data->tx.buf = config->tx_buf; data->tx.len = config->tx_len; k_sem_init(&data->rx.sem, 0, 1); + err = config->api->callback_set(dev, uart_async_to_irq_callback, data); + if (err < 0) { + return err; + } + return uart_async_rx_init(&data->rx.async_rx, &config->async_rx); } diff --git a/drivers/serial/uart_nrfx_uarte2.c b/drivers/serial/uart_nrfx_uarte2.c index 86a81e92bdb..594f5a79b55 100644 --- a/drivers/serial/uart_nrfx_uarte2.c +++ b/drivers/serial/uart_nrfx_uarte2.c @@ -857,7 +857,7 @@ static int uarte_nrfx_init(const struct device *dev) if (UARTE_ANY_INTERRUPT_DRIVEN) { if (cfg->a2i_config) { - err = uart_async_to_irq_init(data->a2i_data, cfg->a2i_config); + err = uart_async_to_irq_init(dev); if (err < 0) { return err; } diff --git a/include/zephyr/drivers/serial/uart_async_to_irq.h b/include/zephyr/drivers/serial/uart_async_to_irq.h index d8d2774b174..3b80c9061b5 100644 --- a/include/zephyr/drivers/serial/uart_async_to_irq.h +++ b/include/zephyr/drivers/serial/uart_async_to_irq.h @@ -109,13 +109,11 @@ void uart_async_to_irq_trampoline_cb(const struct device *dev); /** @brief Initialize the adaptation layer. * - * @param data Data associated with the given adaptation layer instance. - * @param config Configuration structure. Must be persistent. + * @param dev UART device. Device must support asynchronous API. * * @retval 0 On successful initialization. */ -int uart_async_to_irq_init(struct uart_async_to_irq_data *data, - const struct uart_async_to_irq_config *config); +int uart_async_to_irq_init(const struct device *dev); /* @brief Enable RX for interrupt driven API. *