summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteffen Trumtrar <s.trumtrar@pengutronix.de>2014-02-26 11:42:32 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2014-02-27 09:52:43 +0100
commit8f0ce9db681bef2dbe11ba651fae60665a058b9f (patch)
tree770f02a85c4a436bec9970afb3d7a6ed7b22f839
parent29577082acf7abad81627a76a89c7b9c80114d89 (diff)
downloaddt-utils-8f0ce9db681bef2dbe11ba651fae60665a058b9f.tar.gz
dt-utils-8f0ce9db681bef2dbe11ba651fae60665a058b9f.tar.xz
libdt: search for devnode if partition not found
Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--src/libdt.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libdt.c b/src/libdt.c
index cd63653..7fa9479 100644
--- a/src/libdt.c
+++ b/src/libdt.c
@@ -2084,6 +2084,26 @@ static int of_path_type_partname(struct of_path *op, const char *name)
return 0;
}
+ part = device_find_devnode(op->dev);
+ if (part) {
+ if (udev_device_get_devnode(part) != NULL) {
+ op->devpath = strdup(udev_device_get_devnode(part));
+
+ if (!op->devpath)
+ return -EINVAL;
+
+ ret = stat(op->devpath, &s);
+ if (ret)
+ return -errno;
+
+ ret = of_parse_partition_from_path(op, name);
+ } else {
+ pr_debug("%s: '%s' not found\n", __func__, name);
+ ret = -EINVAL;
+ }
+ return ret;
+ }
+
ret = asprintf(&op->devpath, "%s/eeprom", udev_device_get_syspath(op->dev));
if (ret < 0)
return -ENOMEM;