can: Introduce can-primary alias

This commit introduces the can-primary alias to identify
the primary CAN interface.
This alias is used for all samples and tests, so they don't
need to probe the right interface.

Signed-off-by: Alexander Wachter <alexander@wachter.cloud>
This commit is contained in:
Alexander Wachter 2020-01-23 16:02:38 +01:00 committed by Maureen Helm
commit 2f44990e9b
16 changed files with 26 additions and 51 deletions

View file

@ -14,6 +14,7 @@
led2 = &red_led;
sw0 = &user_button_3;
sw1 = &user_button_2;
can-primary = &can0;
};
chosen {

View file

@ -49,6 +49,7 @@
led1 = &blue_led;
led2 = &red_led;
sw0 = &user_button;
can-primary = &can1;
};
};

View file

@ -49,6 +49,7 @@
led1 = &blue_led;
led2 = &red_led;
sw0 = &user_button;
can-primary = &can1;
};
};

View file

@ -28,6 +28,7 @@
aliases {
led0 = &green_led;
can-primary = &can1;
};
};

View file

@ -38,6 +38,7 @@
aliases {
led0 = &green_led;
sw0 = &user_button;
can-primary = &can1;
};
};

View file

@ -38,6 +38,7 @@
aliases {
led0 = &green_led_1;
sw0 = &user_button;
can-primary = &can1;
};
};

View file

@ -42,6 +42,7 @@
led0 = &green_led_1;
led1 = &yellow_led_2;
sw0 = &user_button;
can-primary = &can1;
};
};

View file

@ -52,6 +52,7 @@
led2 = &green_right_led_5;
led3 = &blue_low_led_6;
sw0 = &user_button;
can-primary = &can1;
};
};

View file

@ -31,6 +31,7 @@
blue-pwm-led = &tri_blue_pwm_led;
sw0 = &user_button_3;
sw1 = &user_button_2;
can-primary = &can0;
};
chosen {

View file

@ -8,7 +8,7 @@
status = "okay";
cs-gpios = <&arduino_header 16 0>; /* D10 */
mcp2515@0 {
can1: mcp2515@0 {
compatible = "microchip,mcp2515";
spi-max-frequency = <1000000>;
int-gpios = <&arduino_header 8 0>; /* D2 */
@ -25,3 +25,9 @@
#size-cells = <0>;
};
};
/ {
aliases {
can-primary = &can1;
};
};

View file

@ -372,7 +372,7 @@ static struct net_can_api net_can_api_inst = {
static int net_can_init(struct device *dev)
{
struct device *can_dev = device_get_binding(DT_CAN_1_NAME);
struct device *can_dev = device_get_binding(DT_ALIAS_CAN_PRIMARY_LABEL);
struct net_can_context *ctx = dev->driver_data;
ctx->recv_filter_id = CAN_NET_FILTER_NOT_SET;
@ -382,7 +382,8 @@ static int net_can_init(struct device *dev)
#endif /*CONFIG_NET_L2_CANBUS_ETH_TRANSLATOR*/
if (!can_dev) {
NET_ERR("Can't get binding to CAN device %s", DT_CAN_1_NAME);
NET_ERR("Can't get binding to CAN device %s",
DT_ALIAS_CAN_PRIMARY_LABEL);
return -EIO;
}

View file

@ -195,13 +195,7 @@ void main(void)
k_tid_t rx_tid, get_state_tid;
int ret;
/* Usually the CAN device is either called CAN_0 or CAN_1, depending
* on the SOC. Let's check both and take the first valid one.
*/
can_dev = device_get_binding("CAN_0");
if (!can_dev) {
can_dev = device_get_binding("CAN_1");
}
can_dev = device_get_binding(DT_ALIAS_CAN_PRIMARY_LABEL);
if (!can_dev) {
printk("CAN: Device driver not found.\n");

View file

@ -4,24 +4,6 @@
# SPDX-License-Identifier: Apache-2.0
#
choice
prompt "CAN interface to use for CANopen"
config CANOPEN_INTERFACE_CAN_0
bool "CAN 0"
depends on CAN_0
config CANOPEN_INTERFACE_CAN_1
bool "CAN 1"
depends on CAN_1
endchoice
config CANOPEN_INTERFACE
int
default 0 if CANOPEN_INTERFACE_CAN0
default 1 if CANOPEN_INTERFACE_CAN1
config CANOPEN_NODE_ID
int "CANopen node ID"
default 10

View file

@ -14,13 +14,10 @@
#include <logging/log.h>
LOG_MODULE_REGISTER(app);
#if defined(CONFIG_CANOPEN_INTERFACE_CAN_0)
#define CAN_INTERFACE DT_ALIAS_CAN_0_LABEL
#define CAN_BITRATE (DT_ALIAS_CAN_0_BUS_SPEED / 1000)
#elif defined(CONFIG_CANOPEN_INTERFACE_CAN_1)
#define CAN_INTERFACE DT_ALIAS_CAN_1_LABEL
#define CAN_BITRATE (DT_ALIAS_CAN_1_BUS_SPEED / 1000)
#else
#define CAN_INTERFACE DT_ALIAS_CAN_PRIMARY_LABEL
#define CAN_BITRATE (DT_ALIAS_CAN_PRIMARY_BUS_SPEED / 1000)
#if !defined(DT_ALIAS_CAN_PRIMARY_LABEL)
#error CANopen CAN interface not set
#endif

View file

@ -43,14 +43,8 @@
#if defined(CONFIG_CAN_LOOPBACK_DEV_NAME)
#define CAN_DEVICE_NAME CONFIG_CAN_LOOPBACK_DEV_NAME
#elif defined(DT_CAN_0_NAME)
#define CAN_DEVICE_NAME DT_CAN_0_NAME
#elif defined(DT_CAN_1_NAME)
#define CAN_DEVICE_NAME DT_CAN_1_NAME
#elif defined(DT_INST_0_MICROCHIP_MCP2515_LABEL)
#define CAN_DEVICE_NAME DT_INST_0_MICROCHIP_MCP2515_LABEL
#else
#define CAN_DEVICE_NAME ""
#define CAN_DEVICE_NAME DT_ALIAS_CAN_PRIMARY_LABEL
#endif
CAN_DEFINE_MSGQ(can_msgq, 5);

View file

@ -33,14 +33,6 @@
* @}
*/
#if defined(DT_CAN_0_NAME)
#define CAN_NAME DT_CAN_0_NAME
#elif defined(DT_CAN_1_NAME)
#define CAN_NAME DT_CAN_1_NAME
#else
#error No CAN device available
#endif
#define TEST_SEND_TIMEOUT K_MSEC(100)
#define TEST_RECEIVE_TIMEOUT K_MSEC(100)
@ -138,7 +130,7 @@ static void test_filter_handling(void)
int ret, filter_id_1, filter_id_2;
struct zcan_frame msg_buffer;
can_dev = device_get_binding(CAN_NAME);
can_dev = device_get_binding(DT_ALIAS_CAN_PRIMARY_LABEL);
ret = can_configure(can_dev, CAN_LOOPBACK_MODE, 0);