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>
This commit is contained in:
Henrik Brix Andersen 2022-09-20 16:53:49 +02:00 committed by Fabio Baltieri
commit eb06e6aed0
2 changed files with 4 additions and 15 deletions

View file

@ -356,6 +356,8 @@ int can_sja1000_send(const struct device *dev, const struct can_frame *frame, k_
uint8_t cmr; uint8_t cmr;
uint8_t sr; uint8_t sr;
__ASSERT_NO_MSG(callback != NULL);
if (frame->dlc > CAN_MAX_DLC) { if (frame->dlc > CAN_MAX_DLC) {
LOG_ERR("TX frame DLC %u exceeds maximum (%d)", frame->dlc, CAN_MAX_DLC); LOG_ERR("TX frame DLC %u exceeds maximum (%d)", frame->dlc, CAN_MAX_DLC);
return -EINVAL; return -EINVAL;
@ -397,11 +399,6 @@ int can_sja1000_send(const struct device *dev, const struct can_frame *frame, k_
can_sja1000_write_reg(dev, CAN_SJA1000_CMR, cmr); 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; return 0;
} }
@ -573,13 +570,8 @@ static void can_sja1000_tx_done(const struct device *dev, int status)
can_tx_callback_t callback = data->tx_callback; can_tx_callback_t callback = data->tx_callback;
void *user_data = data->tx_user_data; void *user_data = data->tx_user_data;
if (callback != NULL) {
data->tx_callback = NULL; data->tx_callback = NULL;
callback(dev, status, user_data); callback(dev, status, user_data);
} else {
data->tx_status = status;
k_sem_give(&data->tx_done);
}
k_sem_give(&data->tx_idle); k_sem_give(&data->tx_idle);
} }
@ -683,7 +675,6 @@ int can_sja1000_init(const struct device *dev)
k_mutex_init(&data->mod_lock); k_mutex_init(&data->mod_lock);
k_sem_init(&data->tx_idle, 1, 1); k_sem_init(&data->tx_idle, 1, 1);
k_sem_init(&data->tx_done, 0, 1);
data->state = CAN_STATE_ERROR_ACTIVE; data->state = CAN_STATE_ERROR_ACTIVE;

View file

@ -106,10 +106,8 @@ struct can_sja1000_data {
can_state_change_callback_t state_change_cb; can_state_change_callback_t state_change_cb;
void *state_change_cb_data; void *state_change_cb_data;
struct k_sem tx_idle; struct k_sem tx_idle;
struct k_sem tx_done;
can_tx_callback_t tx_callback; can_tx_callback_t tx_callback;
void *tx_user_data; void *tx_user_data;
int tx_status;
uint32_t sjw; uint32_t sjw;
void *custom; void *custom;
}; };