This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 9e254e898d99bd8557105fd09d29f44fa24c94e2
Author: Eren Terzioglu <[email protected]>
AuthorDate: Fri Jun 19 18:17:10 2026 +0200

    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 <[email protected]>
---
 boards/risc-v/esp32c6/common/src/esp_board_twai.c | 26 ++++++----------
 boards/risc-v/esp32p4/common/src/esp_board_twai.c | 37 ++++++-----------------
 2 files changed, 18 insertions(+), 45 deletions(-)

diff --git a/boards/risc-v/esp32c6/common/src/esp_board_twai.c 
b/boards/risc-v/esp32c6/common/src/esp_board_twai.c
index 05f22a94400..b7cfcead853 100644
--- a/boards/risc-v/esp32c6/common/src/esp_board_twai.c
+++ b/boards/risc-v/esp32c6/common/src/esp_board_twai.c
@@ -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" */
-
-  ret = can_register("/dev/can0", twai);
-  if (ret < 0)
-    {
-      canerr("ERROR: TWAI0 register failed: %d\n", ret);
-      return ret;
-    }
-#endif /* CONFIG_ESPRESSIF_TWAI0 */
-
-#ifdef CONFIG_ESPRESSIF_TWAI1
-  /* Register the TWAI driver at "/dev/can1" */
+  snprintf(devname, sizeof(devname), DEVNAME_FMT, port);
 
-  ret = can_register("/dev/can1", twai);
+  ret = can_register(devname, twai);
   if (ret < 0)
     {
-      canerr("ERROR: TWAI1 register failed: %d\n", ret);
+      canerr("ERROR: TWAI%d register failed: %d\n", port, ret);
       return ret;
     }
-#endif /* CONFIG_ESPRESSIF_TWAI1 */
 
   return OK;
 #else
diff --git a/boards/risc-v/esp32p4/common/src/esp_board_twai.c 
b/boards/risc-v/esp32p4/common/src/esp_board_twai.c
index a3cab7e2f1f..d0a4851e628 100644
--- a/boards/risc-v/esp32p4/common/src/esp_board_twai.c
+++ b/boards/risc-v/esp32p4/common/src/esp_board_twai.c
@@ -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" */
-
-  ret = can_register("/dev/can0", twai);
-  if (ret < 0)
-    {
-      canerr("ERROR: TWAI0 register failed: %d\n", 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" */
+  snprintf(devname, sizeof(devname), DEVNAME_FMT, port);
 
-  ret = can_register("/dev/can2", twai);
+  ret = can_register(devname, twai);
   if (ret < 0)
     {
-      canerr("ERROR: TWAI2 register failed: %d\n", ret);
+      canerr("ERROR: TWAI%d register failed: %d\n", port, ret);
       return ret;
     }
-#endif /* CONFIG_ESPRESSIF_TWAI2 */
 
   return OK;
 #else

Reply via email to