@@ -89,6 +89,20 @@ static inline void can_sja1000_clear_errors(const struct device *dev)
8989 (void )can_sja1000_read_reg (dev , CAN_SJA1000_ECC );
9090}
9191
92+ static void can_sja1000_tx_done (const struct device * dev , int status )
93+ {
94+ struct can_sja1000_data * data = dev -> data ;
95+ can_tx_callback_t callback = data -> tx_callback ;
96+ void * user_data = data -> tx_user_data ;
97+
98+ if (callback != NULL ) {
99+ data -> tx_callback = NULL ;
100+ callback (dev , status , user_data );
101+ }
102+
103+ k_sem_give (& data -> tx_idle );
104+ }
105+
92106int can_sja1000_set_timing (const struct device * dev , const struct can_timing * timing )
93107{
94108 struct can_sja1000_data * data = dev -> data ;
@@ -187,6 +201,7 @@ int can_sja1000_stop(const struct device *dev)
187201 return - EALREADY ;
188202 }
189203
204+ /* Entering reset mode aborts current transmission, if any */
190205 err = can_sja1000_enter_reset_mode (dev );
191206 if (err != 0 ) {
192207 return err ;
@@ -202,6 +217,8 @@ int can_sja1000_stop(const struct device *dev)
202217
203218 data -> started = false;
204219
220+ can_sja1000_tx_done (dev , - ENETDOWN );
221+
205222 return 0 ;
206223}
207224
@@ -564,18 +581,6 @@ static void can_sja1000_handle_receive_irq(const struct device *dev)
564581 } while ((sr & CAN_SJA1000_SR_RBS ) != 0 );
565582}
566583
567- static void can_sja1000_tx_done (const struct device * dev , int status )
568- {
569- struct can_sja1000_data * data = dev -> data ;
570- can_tx_callback_t callback = data -> tx_callback ;
571- void * user_data = data -> tx_user_data ;
572-
573- data -> tx_callback = NULL ;
574- callback (dev , status , user_data );
575-
576- k_sem_give (& data -> tx_idle );
577- }
578-
579584static void can_sja1000_handle_transmit_irq (const struct device * dev )
580585{
581586 int status = 0 ;
0 commit comments