summaryrefslogtreecommitdiffstats
path: root/src/libdt.c
diff options
context:
space:
mode:
authorSteffen Trumtrar <s.trumtrar@pengutronix.de>2014-02-26 11:42:31 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2014-02-27 09:52:43 +0100
commit29577082acf7abad81627a76a89c7b9c80114d89 (patch)
tree5cf2c5dee78e6c2ff5a36c56dc949cf984c92482 /src/libdt.c
parent18dba42c0683457a5e251e88cc44a4480c573ce5 (diff)
downloaddt-utils-29577082acf7abad81627a76a89c7b9c80114d89.tar.gz
dt-utils-29577082acf7abad81627a76a89c7b9c80114d89.tar.xz
libdt: add function to search the devicenode in subdirs
Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'src/libdt.c')
-rw-r--r--src/libdt.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libdt.c b/src/libdt.c
index 61a0706..cd63653 100644
--- a/src/libdt.c
+++ b/src/libdt.c
@@ -2017,6 +2017,41 @@ struct udev_device *device_find_partition(struct udev_device *dev, const char *n
return NULL;
}
+struct udev_device *device_find_devnode(struct udev_device *dev)
+{
+ struct udev *udev;
+ struct udev_enumerate *enumerate;
+ struct udev_list_entry *devices, *dev_list_entry;
+ struct udev_device *devnode;
+
+ udev = udev_new();
+ if (!udev) {
+ fprintf(stderr, "Can't create udev\n");
+ return NULL;
+ }
+
+ enumerate = udev_enumerate_new(udev);
+ udev_enumerate_add_match_parent(enumerate, dev);
+ udev_enumerate_scan_devices(enumerate);
+ devices = udev_enumerate_get_list_entry(enumerate);
+ udev_list_entry_foreach(dev_list_entry, devices) {
+ const char *path;
+
+ path = udev_list_entry_get_name(dev_list_entry);
+ devnode = udev_device_new_from_syspath(udev, path);
+
+ if (!udev_device_get_devnode(devnode))
+ continue;
+ else
+ return devnode;
+ }
+
+ udev_enumerate_unref(enumerate);
+ udev_unref(udev);
+
+ return NULL;
+}
+
struct of_path_type {
const char *name;
int (*parse)(struct of_path *op, const char *str);