boards/risc-v/espressif: Fix twai initialization for esp32[-c6|-p4]

Fix twai initialization when multiple twai devices enabled for esp32c6 and esp32p4

Signed-off-by: Eren Terzioglu <eren.terzioglu@espressif.com>
This commit is contained in:
Eren Terzioglu 2026-06-19 18:17:10 +02:00 committed by Xiang Xiao
parent 5b94c8031e
commit 9e254e898d
2 changed files with 18 additions and 45 deletions

View file

@ -27,6 +27,7 @@
#include <nuttx/config.h>
#include <errno.h>
#include <stdio.h>
#include <nuttx/debug.h>
#include <nuttx/can/can.h>
@ -40,6 +41,9 @@
* Pre-processor Definitions
****************************************************************************/
#define DEVNAME_FMT "/dev/can%d"
#define DEVNAME_FMTLEN (8 + 3 + 1)
/****************************************************************************
* Public Functions
****************************************************************************/
@ -63,6 +67,7 @@ int board_twai_setup(int port)
{
#ifdef CONFIG_ESPRESSIF_TWAI
struct can_dev_s *twai;
char devname[DEVNAME_FMTLEN];
int ret;
/* Call esp_twaiinitialize() to get an instance of the TWAI
@ -72,31 +77,18 @@ int board_twai_setup(int port)
twai = esp_twaiinitialize(port);
if (twai == NULL)
{
canerr("ERROR: Failed to get TWAI interface\n");
canerr("ERROR: Failed to get TWAI interface for port %d\n", port);
return -ENODEV;
}
#ifdef CONFIG_ESPRESSIF_TWAI0
/* Register the TWAI driver at "/dev/can0" */
snprintf(devname, sizeof(devname), DEVNAME_FMT, port);
ret = can_register("/dev/can0", twai);
ret = can_register(devname, twai);
if (ret < 0)
{
canerr("ERROR: TWAI0 register failed: %d\n", ret);
canerr("ERROR: TWAI%d register failed: %d\n", port, ret);
return ret;
}
#endif /* CONFIG_ESPRESSIF_TWAI0 */
#ifdef CONFIG_ESPRESSIF_TWAI1
/* Register the TWAI driver at "/dev/can1" */
ret = can_register("/dev/can1", twai);
if (ret < 0)
{
canerr("ERROR: TWAI1 register failed: %d\n", ret);
return ret;
}
#endif /* CONFIG_ESPRESSIF_TWAI1 */
return OK;
#else

View file

@ -27,6 +27,7 @@
#include <nuttx/config.h>
#include <errno.h>
#include <stdio.h>
#include <nuttx/debug.h>
#include <nuttx/can/can.h>
@ -40,6 +41,9 @@
* Pre-processor Definitions
****************************************************************************/
#define DEVNAME_FMT "/dev/can%d"
#define DEVNAME_FMTLEN (8 + 3 + 1)
/****************************************************************************
* Public Functions
****************************************************************************/
@ -63,6 +67,7 @@ int board_twai_setup(int port)
{
#ifdef CONFIG_ESPRESSIF_TWAI
struct can_dev_s *twai;
char devname[DEVNAME_FMTLEN];
int ret;
/* Call esp_twaiinitialize() to get an instance of the TWAI
@ -72,42 +77,18 @@ int board_twai_setup(int port)
twai = esp_twaiinitialize(port);
if (twai == NULL)
{
canerr("ERROR: Failed to get TWAI interface\n");
canerr("ERROR: Failed to get TWAI interface for port %d\n", port);
return -ENODEV;
}
#ifdef CONFIG_ESPRESSIF_TWAI0
/* Register the TWAI driver at "/dev/can0" */
snprintf(devname, sizeof(devname), DEVNAME_FMT, port);
ret = can_register("/dev/can0", twai);
ret = can_register(devname, twai);
if (ret < 0)
{
canerr("ERROR: TWAI0 register failed: %d\n", ret);
canerr("ERROR: TWAI%d register failed: %d\n", port, ret);
return ret;
}
#endif /* CONFIG_ESPRESSIF_TWAI0 */
#ifdef CONFIG_ESPRESSIF_TWAI1
/* Register the TWAI driver at "/dev/can1" */
ret = can_register("/dev/can1", twai);
if (ret < 0)
{
canerr("ERROR: TWAI1 register failed: %d\n", ret);
return ret;
}
#endif /* CONFIG_ESPRESSIF_TWAI1 */
#ifdef CONFIG_ESPRESSIF_TWAI2
/* Register the TWAI driver at "/dev/can2" */
ret = can_register("/dev/can2", twai);
if (ret < 0)
{
canerr("ERROR: TWAI2 register failed: %d\n", ret);
return ret;
}
#endif /* CONFIG_ESPRESSIF_TWAI2 */
return OK;
#else