dm: core: Add a function to look up a uclass by name
authorSimon Glass <sjg@chromium.org>
Thu, 28 Dec 2017 20:14:15 +0000 (13:14 -0700)
committerSimon Glass <sjg@chromium.org>
Sat, 3 Feb 2018 17:08:40 +0000 (10:08 -0700)
Each uclass has a driver name which we can use to look up the uclass. This
is useful for logging, where the uclass ID is used as the category.

Add a function to handle this, as well as a test.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/uclass.c
include/dm/uclass.h
test/dm/core.c

index f5e406792209686a897c7395dc80d616f082036f..1aedaa08f0c2ee4058d9ddf9054ee03db45937a0 100644 (file)
@@ -158,6 +158,20 @@ const char *uclass_get_name(enum uclass_id id)
        return uc->uc_drv->name;
 }
 
+enum uclass_id uclass_get_by_name(const char *name)
+{
+       int i;
+
+       for (i = 0; i < UCLASS_COUNT; i++) {
+               struct uclass_driver *uc_drv = lists_uclass_lookup(i);
+
+               if (uc_drv && !strcmp(uc_drv->name, name))
+                       return i;
+       }
+
+       return UCLASS_INVALID;
+}
+
 int uclass_find_device(enum uclass_id id, int index, struct udevice **devp)
 {
        struct uclass *uc;
index 709f661f200b27607bcff6701377fad73271637a..3a01abc239ea9d48d869361c871939634cf24fa3 100644 (file)
@@ -127,6 +127,14 @@ int uclass_get(enum uclass_id key, struct uclass **ucp);
  */
 const char *uclass_get_name(enum uclass_id id);
 
+/**
+ * uclass_get_by_name() - Look up a uclass by its driver name
+ *
+ * @name: Name to look up
+ * @returns the associated uclass ID, or UCLASS_INVALID if not found
+ */
+enum uclass_id uclass_get_by_name(const char *name);
+
 /**
  * uclass_get_device() - Get a uclass device based on an ID and index
  *
index 50ee41b9e24ec7cad54b92a0808334a7886c86fb..052bf8fffbff7d7bd321a65a74ee70d587dfde65 100644 (file)
@@ -862,3 +862,12 @@ static int dm_test_device_get_uclass_id(struct unit_test_state *uts)
        return 0;
 }
 DM_TEST(dm_test_device_get_uclass_id, DM_TESTF_SCAN_PDATA);
+
+static int dm_test_uclass_names(struct unit_test_state *uts)
+{
+       ut_asserteq_str("test", uclass_get_name(UCLASS_TEST));
+       ut_asserteq(UCLASS_TEST, uclass_get_by_name("test"));
+
+       return 0;
+}
+DM_TEST(dm_test_uclass_names, DM_TESTF_SCAN_PDATA);