Browse Source

[component][driver]init dm serial naming framework in a separate phase (#8971)

init dm serial naming framework in a phase
zms123456 1 year ago
parent
commit
adf2b35ec6
1 changed files with 22 additions and 16 deletions
  1. 22 16
      components/drivers/serial/serial_dm.c

+ 22 - 16
components/drivers/serial/serial_dm.c

@@ -11,11 +11,12 @@
 #include <rtatomic.h>
 #include <drivers/serial_dm.h>
 
+static int uid_min = -1;
+static volatile rt_atomic_t uid = 0;
+
 int serial_dev_set_name(struct rt_serial_device *sdev)
 {
     int id = -1;
-    static int uid_min = -1;
-    static volatile rt_atomic_t uid = 0;
 
     RT_ASSERT(sdev != RT_NULL);
 
@@ -28,20 +29,6 @@ int serial_dev_set_name(struct rt_serial_device *sdev)
         {
             id = rt_ofw_get_alias_id(sdev->parent.ofw_node, "uart");
         }
-
-        if (uid_min < 0)
-        {
-            uid_min = rt_ofw_get_alias_last_id("serial");
-
-            if (uid_min < 0)
-            {
-                uid_min = rt_ofw_get_alias_last_id("uart");
-            }
-
-            uid_min = uid_min < 0 ? 0 : (uid_min + 1);
-
-            rt_hw_atomic_store(&uid, uid_min);
-        }
     }
 #endif
 
@@ -53,6 +40,25 @@ int serial_dev_set_name(struct rt_serial_device *sdev)
     return rt_dm_dev_set_name(&sdev->parent, "uart%u", id);
 }
 
+static int serial_dm_naming_framework_init(void)
+{
+#ifdef RT_USING_OFW
+    uid_min = rt_ofw_get_alias_last_id("serial");
+
+    if (uid_min < 0)
+    {
+        uid_min = rt_ofw_get_alias_last_id("uart");
+    }
+
+    uid_min = uid_min < 0 ? 0 : (uid_min + 1);
+
+    rt_hw_atomic_store(&uid, uid_min);
+#endif
+
+    return 0;
+}
+INIT_PLATFORM_EXPORT(serial_dm_naming_framework_init);
+
 void *serial_base_from_args(char *str)
 {
     rt_ubase_t base = 0;