drivers: can: sja1000: notify of aborted transmission on can_stop()

Notify of any aborted transmission when entering reset mode via can_stop().

Fixes: #50545

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
diff --git a/drivers/can/can_sja1000.c b/drivers/can/can_sja1000.c
index 2f9bddd..7935713 100644
--- a/drivers/can/can_sja1000.c
+++ b/drivers/can/can_sja1000.c
@@ -89,6 +89,20 @@
 	(void)can_sja1000_read_reg(dev, CAN_SJA1000_ECC);
 }
 
+static void can_sja1000_tx_done(const struct device *dev, int status)
+{
+	struct can_sja1000_data *data = dev->data;
+	can_tx_callback_t callback = data->tx_callback;
+	void *user_data = data->tx_user_data;
+
+	if (callback != NULL) {
+		data->tx_callback = NULL;
+		callback(dev, status, user_data);
+	}
+
+	k_sem_give(&data->tx_idle);
+}
+
 int can_sja1000_set_timing(const struct device *dev, const struct can_timing *timing)
 {
 	struct can_sja1000_data *data = dev->data;
@@ -187,6 +201,7 @@
 		return -EALREADY;
 	}
 
+	/* Entering reset mode aborts current transmission, if any */
 	err = can_sja1000_enter_reset_mode(dev);
 	if (err != 0) {
 		return err;
@@ -202,6 +217,8 @@
 
 	data->started = false;
 
+	can_sja1000_tx_done(dev, -ENETDOWN);
+
 	return 0;
 }
 
@@ -564,18 +581,6 @@
 	} while ((sr & CAN_SJA1000_SR_RBS) != 0);
 }
 
-static void can_sja1000_tx_done(const struct device *dev, int status)
-{
-	struct can_sja1000_data *data = dev->data;
-	can_tx_callback_t callback = data->tx_callback;
-	void *user_data = data->tx_user_data;
-
-	data->tx_callback = NULL;
-	callback(dev, status, user_data);
-
-	k_sem_give(&data->tx_idle);
-}
-
 static void can_sja1000_handle_transmit_irq(const struct device *dev)
 {
 	int status = 0;