drivers: can: Fix building with socket_can_generic.h

socket_can_generic.h makes some assumptions that are not always valid
for various drivers with regards to numbering.  To clean this up we
add defines for SOCKET_CAN_NAME_0 and SOCKET_CAN_NAME_2 in addition to
SOCKET_CAN_NAME_1.

We also move struct socket_can_context into the drivers themselves
since they know best how many CAN interfaces are getting supported and
what naming/number convention they'd have.

Additionally, this also exposes a few other build issues with the
can_mcux_flexcan driver that get fixed.

Finally, we remove the platform_allow from samples/net/sockets/can
since it is no longer needed.

Fixes #31733

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This commit is contained in:
Kumar Gala 2021-02-02 12:58:15 -06:00 committed by Anas Nashif
commit 6defabebad
6 changed files with 13 additions and 5 deletions

View file

@ -303,6 +303,8 @@ DEVICE_DEFINE(can_loopback_1, CONFIG_CAN_LOOPBACK_DEV_NAME,
#include "socket_can_generic.h"
static struct socket_can_context socket_can_context_1;
static int socket_can_init_1(const struct device *dev)
{
const struct device *can_dev = DEVICE_GET(can_loopback_1);

View file

@ -977,6 +977,8 @@ DEVICE_DT_INST_DEFINE(0, &mcp2515_init, device_pm_control_nop,
#include "socket_can_generic.h"
static struct socket_can_context socket_can_context_1;
static int socket_can_init(const struct device *dev)
{
const struct device *can_dev = DEVICE_DT_INST_GET(1);

View file

@ -820,11 +820,12 @@ static const struct can_driver_api mcux_flexcan_driver_api = {
DT_INST_FOREACH_STATUS_OKAY(FLEXCAN_DEVICE_INIT_MCUX)
#if defined(CONFIG_NET_SOCKETS_CAN)
#include "socket_can_generic.h" \
#include "socket_can_generic.h"
#define FLEXCAN_DEVICE_SOCKET_CAN(id) \
static struct socket_can_context socket_can_context_##id; \
static int socket_can_init_##id(const struct device *dev) \
{ \
struct device *can_dev = DEVICE_DT_INST_GET(id); \
const struct device *can_dev = DEVICE_DT_INST_GET(id); \
struct socket_can_context *socket_context = dev->data; \
LOG_DBG("Init socket CAN device %p (%s) for dev %p (%s)", \
dev, dev->name, can_dev, can_dev->name); \

View file

@ -1190,6 +1190,8 @@ static void config_can_1_irq(CAN_TypeDef *can)
#include "socket_can_generic.h"
static struct socket_can_context socket_can_context_1;
static int socket_can_init_1(const struct device *dev)
{
const struct device *can_dev = DEVICE_DT_GET(DT_NODELABEL(can1));
@ -1280,6 +1282,8 @@ static void config_can_2_irq(CAN_TypeDef *can)
#include "socket_can_generic.h"
static struct socket_can_context socket_can_context_2;
static int socket_can_init_2(const struct device *dev)
{
const struct device *can_dev = DEVICE_DT_GET(DT_NODELABEL(can2));

View file

@ -13,7 +13,9 @@
#ifndef ZEPHYR_DRIVERS_CAN_SOCKET_CAN_GENERIC_H_
#define ZEPHYR_DRIVERS_CAN_SOCKET_CAN_GENERIC_H_
#define SOCKET_CAN_NAME_0 "SOCKET_CAN_0"
#define SOCKET_CAN_NAME_1 "SOCKET_CAN_1"
#define SOCKET_CAN_NAME_2 "SOCKET_CAN_2"
#define SEND_TIMEOUT K_MSEC(100)
#define RX_THREAD_STACK_SIZE 512
#define RX_THREAD_PRIORITY 2
@ -117,8 +119,6 @@ static struct canbus_api socket_can_api = {
.setsockopt = socket_can_setsockopt,
};
static struct socket_can_context socket_can_context_1;
static inline void rx_thread(void *ctx, void *unused1, void *unused2)
{
struct socket_can_context *socket_context = ctx;

View file

@ -2,7 +2,6 @@ common:
tags: net socket can CAN
depends_on: can
harness: can
platform_allow: stm32f072b_disco nucleo_l432kc
sample:
description: Test BSD sockets CAN support
name: Socket CAN example