drivers: can: npl: 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 17:49:17 +02:00 committed by Fabio Baltieri
commit a99a55eefb

View file

@ -32,7 +32,6 @@ struct can_npl_data {
struct can_filter_context filters[CONFIG_CAN_MAX_FILTER]; struct can_filter_context filters[CONFIG_CAN_MAX_FILTER];
struct k_mutex filter_mutex; struct k_mutex filter_mutex;
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;
bool loopback; bool loopback;
@ -95,12 +94,7 @@ static void rx_thread(void *arg1, void *arg2, void *arg3)
count = linux_socketcan_read_data(data->dev_fd, (void *)(&sframe), count = linux_socketcan_read_data(data->dev_fd, (void *)(&sframe),
sizeof(sframe), &msg_confirm); sizeof(sframe), &msg_confirm);
if (msg_confirm) { if (msg_confirm) {
if (data->tx_callback != NULL) { data->tx_callback(dev, 0, data->tx_user_data);
data->tx_callback(dev, 0, data->tx_user_data);
} else {
k_sem_give(&data->tx_done);
}
k_sem_give(&data->tx_idle); k_sem_give(&data->tx_idle);
if (!data->loopback) { if (!data->loopback) {
@ -142,6 +136,8 @@ static int can_npl_send(const struct device *dev, const struct can_frame *frame,
"standard" : "extended", "standard" : "extended",
frame->rtr == CAN_DATAFRAME ? "" : ", RTR frame"); frame->rtr == CAN_DATAFRAME ? "" : ", RTR frame");
__ASSERT_NO_MSG(callback != NULL);
#ifdef CONFIG_CAN_FD_MODE #ifdef CONFIG_CAN_FD_MODE
if (data->mode_fd && frame->fd == 1) { if (data->mode_fd && frame->fd == 1) {
max_dlc = CANFD_MAX_DLC; max_dlc = CANFD_MAX_DLC;
@ -177,10 +173,6 @@ static int can_npl_send(const struct device *dev, const struct can_frame *frame,
LOG_ERR("Cannot send CAN data len %d (%d)", sframe.len, -errno); LOG_ERR("Cannot send CAN data len %d (%d)", sframe.len, -errno);
} }
if (callback == NULL) {
k_sem_take(&data->tx_done, K_FOREVER);
}
return 0; return 0;
} }
@ -455,7 +447,6 @@ static int can_npl_init(const struct device *dev)
k_mutex_init(&data->filter_mutex); k_mutex_init(&data->filter_mutex);
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->dev_fd = linux_socketcan_iface_open(cfg->if_name); data->dev_fd = linux_socketcan_iface_open(cfg->if_name);
if (data->dev_fd < 0) { if (data->dev_fd < 0) {