drivers: can: sja1000: assume can_send() always provides callback
Given the recent change to the CAN controller can_send() API wrapper,
assume that a callback is always provided at the driver level.
Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
diff --git a/drivers/can/can_sja1000.c b/drivers/can/can_sja1000.c
index 4ecb88d..2f9bddd 100644
--- a/drivers/can/can_sja1000.c
+++ b/drivers/can/can_sja1000.c
@@ -356,6 +356,8 @@
uint8_t cmr;
uint8_t sr;
+ __ASSERT_NO_MSG(callback != NULL);
+
if (frame->dlc > CAN_MAX_DLC) {
LOG_ERR("TX frame DLC %u exceeds maximum (%d)", frame->dlc, CAN_MAX_DLC);
return -EINVAL;
@@ -397,11 +399,6 @@
can_sja1000_write_reg(dev, CAN_SJA1000_CMR, cmr);
- if (callback == NULL) {
- k_sem_take(&data->tx_done, K_FOREVER);
- return data->tx_status;
- }
-
return 0;
}
@@ -573,13 +570,8 @@
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);
- } else {
- data->tx_status = status;
- k_sem_give(&data->tx_done);
- }
+ data->tx_callback = NULL;
+ callback(dev, status, user_data);
k_sem_give(&data->tx_idle);
}
@@ -683,7 +675,6 @@
k_mutex_init(&data->mod_lock);
k_sem_init(&data->tx_idle, 1, 1);
- k_sem_init(&data->tx_done, 0, 1);
data->state = CAN_STATE_ERROR_ACTIVE;
diff --git a/drivers/can/can_sja1000.h b/drivers/can/can_sja1000.h
index b9c1b2d..8aee06e 100644
--- a/drivers/can/can_sja1000.h
+++ b/drivers/can/can_sja1000.h
@@ -106,10 +106,8 @@
can_state_change_callback_t state_change_cb;
void *state_change_cb_data;
struct k_sem tx_idle;
- struct k_sem tx_done;
can_tx_callback_t tx_callback;
void *tx_user_data;
- int tx_status;
uint32_t sjw;
void *custom;
};