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:
parent
fcf7c6e6d1
commit
eb06e6aed0
2 changed files with 4 additions and 15 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue