diff --git a/drivers/serial/serial_test.c b/drivers/serial/serial_test.c index 6879cb378af..d90ec2dc5f6 100644 --- a/drivers/serial/serial_test.c +++ b/drivers/serial/serial_test.c @@ -31,6 +31,7 @@ struct serial_vnd_data { void *callback_data; #ifdef CONFIG_UART_INTERRUPT_DRIVEN uart_irq_callback_user_data_t irq_isr; + void *irq_isr_user_data; bool irq_rx_enabled; bool irq_tx_enabled; #endif @@ -80,7 +81,7 @@ static void irq_process(const struct device *dev) LOG_ERR("no isr registered"); break; } - data->irq_isr(dev, NULL); + data->irq_isr(dev, data->irq_isr_user_data); }; } @@ -141,11 +142,6 @@ static void irq_callback_set(const struct device *dev, uart_irq_callback_user_da { struct serial_vnd_data *data = dev->data; - /* Not implemented. Ok because `user_data` is always NULL in the current - * implementation of core UART API. - */ - __ASSERT_NO_MSG(user_data == NULL); - #if defined(CONFIG_UART_EXCLUSIVE_API_CALLBACKS) && defined(CONFIG_UART_ASYNC_API) if (data->read_buf) { LOG_ERR("Setting callback to NULL while asynchronous API is in use."); @@ -155,6 +151,7 @@ static void irq_callback_set(const struct device *dev, uart_irq_callback_user_da #endif data->irq_isr = cb; + data->irq_isr_user_data = user_data; LOG_DBG("callback set"); }