From e297f8ee26ad0ba0778665b6a9783aaddd1b4944 Mon Sep 17 00:00:00 2001 From: Maureen Helm Date: Wed, 20 Oct 2021 14:36:07 -0500 Subject: [PATCH] drivers: can: Refactor drivers to use shared init priority Refactors all of the CAN drivers to use a shared driver class initialization priority configuration, CONFIG_CAN_INIT_PRIORITY, to allow configuring CAN drivers separately from other devices. This is similar to other driver classes like I2C and SPI. The default is set to CONFIG_KERNEL_INIT_PRIORITY_DEVICE to preserve the existing default initialization priority for most drivers. The exception is the mcp2515 driver which has a dependency on a SPI driver and must therefore initialize later than the default device priority. Signed-off-by: Maureen Helm --- boards/shields/dfrobot_can_bus_v2_0/Kconfig.defconfig | 3 +++ drivers/can/Kconfig | 6 ++++++ drivers/can/Kconfig.mcp2515 | 7 ------- drivers/can/can_loopback.c | 4 ++-- drivers/can/can_mcp2515.c | 4 ++-- drivers/can/can_mcux_flexcan.c | 4 ++-- drivers/can/can_rcar.c | 2 +- drivers/can/can_stm32.c | 8 ++++---- drivers/can/can_stm32fd.c | 2 +- 9 files changed, 21 insertions(+), 19 deletions(-) diff --git a/boards/shields/dfrobot_can_bus_v2_0/Kconfig.defconfig b/boards/shields/dfrobot_can_bus_v2_0/Kconfig.defconfig index 8b020b722a9..3eb23d6366f 100644 --- a/boards/shields/dfrobot_can_bus_v2_0/Kconfig.defconfig +++ b/boards/shields/dfrobot_can_bus_v2_0/Kconfig.defconfig @@ -11,6 +11,9 @@ config SPI config CAN_MCP2515 default y +config CAN_INIT_PRIORITY + default 80 + endif # CAN endif # SHIELD_DFROBOT_CAN_BUS_V2_0 diff --git a/drivers/can/Kconfig b/drivers/can/Kconfig index ba975e9640b..b48bcb84f9a 100644 --- a/drivers/can/Kconfig +++ b/drivers/can/Kconfig @@ -17,6 +17,12 @@ module = CAN module-str = CAN source "subsys/logging/Kconfig.template.log_config" +config CAN_INIT_PRIORITY + int "CAN init priority" + default KERNEL_INIT_PRIORITY_DEVICE + help + CAN driver device initialization priority. + config CAN_SHELL bool "Enable CAN Shell" default y diff --git a/drivers/can/Kconfig.mcp2515 b/drivers/can/Kconfig.mcp2515 index bfa6abd4073..18ec7ebf33b 100644 --- a/drivers/can/Kconfig.mcp2515 +++ b/drivers/can/Kconfig.mcp2515 @@ -34,11 +34,4 @@ config CAN_MAX_FILTER Defines the array size of the callback/msgq pointers. Must be at least the size of concurrent reads. - -config CAN_MCP2515_INIT_PRIORITY - int "Init priority" - default 80 - help - MCP2515 driver initialization priority, must be higher than SPI. - endif # CAN_MCP2515 diff --git a/drivers/can/can_loopback.c b/drivers/can/can_loopback.c index 73c370fddaa..43fbbb76028 100644 --- a/drivers/can/can_loopback.c +++ b/drivers/can/can_loopback.c @@ -295,7 +295,7 @@ static struct can_loopback_data can_loopback_dev_data_1; DEVICE_DEFINE(can_loopback_1, CONFIG_CAN_LOOPBACK_DEV_NAME, &can_loopback_init, NULL, &can_loopback_dev_data_1, NULL, - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + POST_KERNEL, CONFIG_CAN_INIT_PRIORITY, &can_api_funcs); @@ -328,7 +328,7 @@ static int socket_can_init_1(const struct device *dev) NET_DEVICE_INIT(socket_can_loopback_1, SOCKET_CAN_NAME_1, socket_can_init_1, NULL, &socket_can_context_1, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + CONFIG_CAN_INIT_PRIORITY, &socket_can_api, CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); diff --git a/drivers/can/can_mcp2515.c b/drivers/can/can_mcp2515.c index 98bbde698d8..4ae18c99b52 100644 --- a/drivers/can/can_mcp2515.c +++ b/drivers/can/can_mcp2515.c @@ -925,7 +925,7 @@ static const struct mcp2515_config mcp2515_config_1 = { DEVICE_DT_INST_DEFINE(0, &mcp2515_init, NULL, &mcp2515_data_1, &mcp2515_config_1, POST_KERNEL, - CONFIG_CAN_MCP2515_INIT_PRIORITY, &can_api_funcs); + CONFIG_CAN_INIT_PRIORITY, &can_api_funcs); #if defined(CONFIG_NET_SOCKETS_CAN) @@ -956,7 +956,7 @@ static int socket_can_init(const struct device *dev) NET_DEVICE_INIT(socket_can_mcp2515_1, SOCKET_CAN_NAME_1, socket_can_init, NULL, &socket_can_context_1, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + CONFIG_CAN_INIT_PRIORITY, &socket_can_api, CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); diff --git a/drivers/can/can_mcux_flexcan.c b/drivers/can/can_mcux_flexcan.c index a54c7f23850..66ccb2a1a00 100644 --- a/drivers/can/can_mcux_flexcan.c +++ b/drivers/can/can_mcux_flexcan.c @@ -808,7 +808,7 @@ static const struct can_driver_api mcux_flexcan_driver_api = { DEVICE_DT_INST_DEFINE(id, &mcux_flexcan_init, \ NULL, &mcux_flexcan_data_##id, \ &mcux_flexcan_config_##id, POST_KERNEL, \ - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \ + CONFIG_CAN_INIT_PRIORITY, \ &mcux_flexcan_driver_api); \ \ static void mcux_flexcan_irq_config_##id(const struct device *dev) \ @@ -849,7 +849,7 @@ DT_INST_FOREACH_STATUS_OKAY(FLEXCAN_DEVICE_INIT_MCUX) NET_DEVICE_INIT(socket_can_flexcan_##id, SOCKET_CAN_NAME_##id, \ socket_can_init_##id, NULL, \ &socket_can_context_##id, NULL, \ - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &socket_can_api, \ + CONFIG_CAN_INIT_PRIORITY, &socket_can_api, \ CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), \ CAN_MTU); \ diff --git a/drivers/can/can_rcar.c b/drivers/can/can_rcar.c index 31a53c25bf4..553f576fb1c 100644 --- a/drivers/can/can_rcar.c +++ b/drivers/can/can_rcar.c @@ -1040,7 +1040,7 @@ static const struct can_driver_api can_rcar_driver_api = { &can_rcar_data_##n, \ &can_rcar_cfg_##n, \ POST_KERNEL, \ - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + CONFIG_CAN_INIT_PRIORITY, \ &can_rcar_driver_api \ ); \ static void can_rcar_##n##_init(const struct device *dev) \ diff --git a/drivers/can/can_stm32.c b/drivers/can/can_stm32.c index 687dffba805..b804804e72a 100644 --- a/drivers/can/can_stm32.c +++ b/drivers/can/can_stm32.c @@ -1150,7 +1150,7 @@ static struct can_stm32_data can_stm32_dev_data_1; DEVICE_DT_DEFINE(DT_NODELABEL(can1), &can_stm32_init, NULL, &can_stm32_dev_data_1, &can_stm32_cfg_1, - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + POST_KERNEL, CONFIG_CAN_INIT_PRIORITY, &can_api_funcs); static void config_can_1_irq(CAN_TypeDef *can) @@ -1211,7 +1211,7 @@ static int socket_can_init_1(const struct device *dev) NET_DEVICE_INIT(socket_can_stm32_1, SOCKET_CAN_NAME_1, socket_can_init_1, NULL, &socket_can_context_1, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + CONFIG_CAN_INIT_PRIORITY, &socket_can_api, CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); @@ -1249,7 +1249,7 @@ static struct can_stm32_data can_stm32_dev_data_2; DEVICE_DT_DEFINE(DT_NODELABEL(can2), &can_stm32_init, NULL, &can_stm32_dev_data_2, &can_stm32_cfg_2, - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + POST_KERNEL, CONFIG_CAN_INIT_PRIORITY, &can_api_funcs); static void config_can_2_irq(CAN_TypeDef *can) @@ -1303,7 +1303,7 @@ static int socket_can_init_2(const struct device *dev) NET_DEVICE_INIT(socket_can_stm32_2, SOCKET_CAN_NAME_2, socket_can_init_2, NULL, &socket_can_context_2, NULL, - CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + CONFIG_CAN_INIT_PRIORITY, &socket_can_api, CANBUS_RAW_L2, NET_L2_GET_CTX_TYPE(CANBUS_RAW_L2), CAN_MTU); diff --git a/drivers/can/can_stm32fd.c b/drivers/can/can_stm32fd.c index ef73b98a984..09af3ce389c 100644 --- a/drivers/can/can_stm32fd.c +++ b/drivers/can/can_stm32fd.c @@ -279,7 +279,7 @@ static struct can_stm32fd_data can_stm32fd_dev_data_##inst; #define CAN_STM32FD_DEVICE_INST(inst) \ DEVICE_DT_INST_DEFINE(inst, &can_stm32fd_init, NULL, \ &can_stm32fd_dev_data_##inst, &can_stm32fd_cfg_##inst, \ - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \ + POST_KERNEL, CONFIG_CAN_INIT_PRIORITY, \ &can_api_funcs); #define CAN_STM32FD_INST(inst) \