diff options
author | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2014-02-26 11:42:31 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-02-27 09:52:43 +0100 |
commit | 29577082acf7abad81627a76a89c7b9c80114d89 (patch) | |
tree | 5cf2c5dee78e6c2ff5a36c56dc949cf984c92482 /src/libdt.c | |
parent | 18dba42c0683457a5e251e88cc44a4480c573ce5 (diff) | |
download | dt-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.c | 35 |
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); |