]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: core: introduce uclass_get_device_by_of_path()
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>
Thu, 13 Apr 2023 15:17:03 +0000 (17:17 +0200)
committerSimon Glass <sjg@chromium.org>
Fri, 28 Apr 2023 17:48:59 +0000 (11:48 -0600)
There's quite a few instances of board-specific code doing

  off = fdt_path_offset(gd->fdt_blob, ...);
  ...
  ret = uclass_get_device_by_of_offset(..., off, &dev);

looking for an eeprom or a pmic via some alias. Such code can be
simplified a little if we have a helper for directly getting a device
via device tree path (including being given as an alias).

Implement it in terms of ofnode rather than raw offsets so that this
will work whether live tree is enabled or not.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
drivers/core/uclass.c
include/dm/uclass.h

index 009de74025bd8f7d9c9c20706d3f9d377e95277a..e46d5717aa62206d18734573ffe31cc8ede399bf 100644 (file)
@@ -545,6 +545,12 @@ int uclass_get_device_by_ofnode(enum uclass_id id, ofnode node,
 }
 
 #if CONFIG_IS_ENABLED(OF_REAL)
+int uclass_get_device_by_of_path(enum uclass_id id, const char *path,
+                                struct udevice **devp)
+{
+       return uclass_get_device_by_ofnode(id, ofnode_path(path), devp);
+}
+
 int uclass_get_device_by_phandle_id(enum uclass_id id, uint phandle_id,
                                    struct udevice **devp)
 {
index ee15c920633a32da876de6df03a33779cff69819..5c5fb9acac090632697f52af935587a9c10a849a 100644 (file)
@@ -264,6 +264,23 @@ int uclass_get_device_by_of_offset(enum uclass_id id, int node,
 int uclass_get_device_by_ofnode(enum uclass_id id, ofnode node,
                                struct udevice **devp);
 
+/**
+ * uclass_get_device_by_of_path() - Get a uclass device by device tree path
+ *
+ * This searches the devices in the uclass for one attached to the
+ * device tree node corresponding to the given path (which may also be
+ * an alias).
+ *
+ * The device is probed to activate it ready for use.
+ *
+ * @id: ID to look up
+ * @node: Device tree path to search for (if no such path then -ENODEV is returned)
+ * @devp: Returns pointer to device (there is only one for each node)
+ * Return: 0 if OK, -ve on error
+ */
+int uclass_get_device_by_of_path(enum uclass_id id, const char *path,
+                                struct udevice **devp);
+
 /**
  * uclass_get_device_by_phandle_id() - Get a uclass device by phandle id
  *