diff --git a/drivers/can/can_mcan.c b/drivers/can/can_mcan.c index 58c227833b3..222f0446239 100644 --- a/drivers/can/can_mcan.c +++ b/drivers/can/can_mcan.c @@ -721,8 +721,10 @@ int can_mcan_get_state(const struct can_mcan_config *cfg, enum can_state *state, } #ifndef CONFIG_CAN_AUTO_BUS_OFF_RECOVERY -int can_mcan_recover(struct can_mcan_reg *can, k_timeout_t timeout) +int can_mcan_recover(const struct can_mcan_config *cfg, k_timeout_t timeout) { + struct can_mcan_reg *can = cfg->can; + return can_leave_init_mode(can, timeout); } #endif /* CONFIG_CAN_AUTO_BUS_OFF_RECOVERY */ diff --git a/drivers/can/can_mcan.h b/drivers/can/can_mcan.h index 8fa422b7965..3c99ea4752d 100644 --- a/drivers/can/can_mcan.h +++ b/drivers/can/can_mcan.h @@ -225,7 +225,7 @@ void can_mcan_line_1_isr(const struct can_mcan_config *cfg, struct can_mcan_msg_sram *msg_ram, struct can_mcan_data *data); -int can_mcan_recover(struct can_mcan_reg *can, k_timeout_t timeout); +int can_mcan_recover(const struct can_mcan_config *cfg, k_timeout_t timeout); int can_mcan_send(const struct can_mcan_config *cfg, struct can_mcan_data *data, struct can_mcan_msg_sram *msg_ram, diff --git a/drivers/can/can_mcux_mcan.c b/drivers/can/can_mcux_mcan.c index 63d81b63d4a..93bd7e15b1f 100644 --- a/drivers/can/can_mcux_mcan.c +++ b/drivers/can/can_mcux_mcan.c @@ -108,6 +108,13 @@ int mcux_mcan_get_max_bitrate(const struct device *dev, uint32_t *max_bitrate) return 0; } +static int mcux_mcan_recover(const struct device *dev, k_timeout_t timeout) +{ + const struct mcux_mcan_config *config = dev->config; + + return can_mcan_recover(&config->mcan, timeout); +} + static void mcux_mcan_line_0_isr(const struct device *dev) { const struct mcux_mcan_config *config = dev->config; @@ -154,7 +161,7 @@ static const struct can_driver_api mcux_mcan_driver_api = { .add_rx_filter = mcux_mcan_add_rx_filter, .remove_rx_filter = mcux_mcan_remove_rx_filter, #ifndef CONFIG_CAN_AUTO_BUS_OFF_RECOVERY - .recover = can_mcan_recover, + .recover = mcux_mcan_recover, #endif /* CONFIG_CAN_AUTO_BUS_OFF_RECOVERY */ .get_state = mcux_mcan_get_state, .set_state_change_callback = mcux_mcan_set_state_change_callback, diff --git a/drivers/can/can_sam.c b/drivers/can/can_sam.c index 910813b238a..dfdb5beb145 100644 --- a/drivers/can/can_sam.c +++ b/drivers/can/can_sam.c @@ -145,6 +145,13 @@ int can_sam_get_max_bitrate(const struct device *dev, uint32_t *max_bitrate) return 0; } +static int can_sam_recover(const struct device *dev, k_timeout_t timeout) +{ + const struct can_sam_config *cfg = dev->config; + + return can_mcan_recover(&cfg->mcan_cfg, timeout); +} + static void can_sam_line_0_isr(const struct device *dev) { const struct can_sam_config *cfg = dev->config; @@ -175,7 +182,7 @@ static const struct can_driver_api can_api_funcs = { .remove_rx_filter = can_sam_remove_rx_filter, .get_state = can_sam_get_state, #ifndef CONFIG_CAN_AUTO_BUS_OFF_RECOVERY - .recover = can_mcan_recover, + .recover = can_sam_recover, #endif .get_core_clock = can_sam_get_core_clock, .get_max_filters = can_mcan_get_max_filters, diff --git a/drivers/can/can_stm32fd.c b/drivers/can/can_stm32fd.c index 0047a6bdffd..96b6a2718d3 100644 --- a/drivers/can/can_stm32fd.c +++ b/drivers/can/can_stm32fd.c @@ -154,6 +154,13 @@ int can_stm32fd_get_max_bitrate(const struct device *dev, uint32_t *max_bitrate) return 0; } +static int can_stm32fd_recover(const struct device *dev, k_timeout_t timeout) +{ + const struct can_stm32fd_config *cfg = dev->config; + + return can_mcan_recover(&cfg->mcan_cfg, timeout); +} + static void can_stm32fd_line_0_isr(const struct device *dev) { const struct can_stm32fd_config *cfg = dev->config; @@ -184,7 +191,7 @@ static const struct can_driver_api can_api_funcs = { .remove_rx_filter = can_stm32fd_remove_rx_filter, .get_state = can_stm32fd_get_state, #ifndef CONFIG_CAN_AUTO_BUS_OFF_RECOVERY - .recover = can_mcan_recover, + .recover = can_stm32fd_recover, #endif .get_core_clock = can_stm32fd_get_core_clock, .get_max_bitrate = can_stm32fd_get_max_bitrate, diff --git a/drivers/can/can_stm32h7.c b/drivers/can/can_stm32h7.c index 2a07fcf21a8..089b472133c 100644 --- a/drivers/can/can_stm32h7.c +++ b/drivers/can/can_stm32h7.c @@ -176,6 +176,13 @@ int can_stm32h7_get_max_bitrate(const struct device *dev, uint32_t *max_bitrate) return 0; } +static int can_stm32h7_recover(const struct device *dev, k_timeout_t timeout) +{ + const struct can_stm32h7_config *cfg = dev->config; + + return can_mcan_recover(&cfg->mcan_cfg, timeout); +} + static void can_stm32h7_line_0_isr(const struct device *dev) { const struct can_stm32h7_config *cfg = dev->config; @@ -200,7 +207,7 @@ static const struct can_driver_api can_api_funcs = { .remove_rx_filter = can_stm32h7_remove_rx_filter, .get_state = can_stm32h7_get_state, #ifndef CONFIG_CAN_AUTO_BUS_OFF_RECOVERY - .recover = can_mcan_recover, + .recover = can_stm32h7_recover, #endif .get_core_clock = can_stm32h7_get_core_clock, .get_max_bitrate = can_stm32h7_get_max_bitrate,