From a5e534a283b7d98c55771bf651856c5937d5d94e Mon Sep 17 00:00:00 2001 From: Henrik Brix Andersen Date: Mon, 31 Oct 2022 12:52:18 +0100 Subject: [PATCH] drivers: can: loopback: process TX callbacks in non-loopback mode The TX callbacks must be processed regardless of the device being in loopback mode or not. Signed-off-by: Henrik Brix Andersen --- drivers/can/can_loopback.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/can/can_loopback.c b/drivers/can/can_loopback.c index 8ba3319e2b3..34d8d16af19 100644 --- a/drivers/can/can_loopback.c +++ b/drivers/can/can_loopback.c @@ -72,6 +72,12 @@ static void tx_thread(void *arg1, void *arg2, void *arg3) while (1) { k_msgq_get(&data->tx_msgq, &frame, K_FOREVER); + frame.cb(dev, 0, frame.cb_arg); + + if (!data->loopback) { + continue; + } + k_mutex_lock(&data->mtx, K_FOREVER); for (int i = 0; i < CONFIG_CAN_MAX_FILTER; i++) { @@ -83,7 +89,6 @@ static void tx_thread(void *arg1, void *arg2, void *arg3) } k_mutex_unlock(&data->mtx); - frame.cb(dev, 0, frame.cb_arg); } } @@ -134,10 +139,6 @@ static int can_loopback_send(const struct device *dev, return -ENETDOWN; } - if (!data->loopback) { - return 0; - } - loopback_frame.frame = *frame; loopback_frame.cb = callback; loopback_frame.cb_arg = user_data;