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 <maureen.helm@intel.com>
This commit is contained in:
Maureen Helm 2021-10-20 14:36:07 -05:00 committed by Anas Nashif
commit e297f8ee26
9 changed files with 21 additions and 19 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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);

View file

@ -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); \

View file

@ -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) \

View file

@ -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);

View file

@ -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) \