diff options
author | Oleksandr Tymoshenko <gonzo@FreeBSD.org> | 2015-05-22 02:00:44 +0000 |
---|---|---|
committer | Oleksandr Tymoshenko <gonzo@FreeBSD.org> | 2015-05-22 02:00:44 +0000 |
commit | 2569f51471e53f6b18ee2ae6156fd82e37fd8576 (patch) | |
tree | 050a14614b2fdd1fe90a09d2053c6fcbf1a33cfb /sys/dev/fdt/fdt_common.c | |
parent | bfdeba0cb3f34260a74da990fcaf4e30e123563c (diff) | |
download | src-2569f51471e53f6b18ee2ae6156fd82e37fd8576.tar.gz src-2569f51471e53f6b18ee2ae6156fd82e37fd8576.zip |
Add helper method fdt_find_child to make access to child nodes easier.
Some FDT nodes have complex properties organized as a child sub-nodes
(e.g. timing for LCD panel) we need easy way to obtain handles for
these sub-nodes
Notes
Notes:
svn path=/head/; revision=283275
Diffstat (limited to 'sys/dev/fdt/fdt_common.c')
-rw-r--r-- | sys/dev/fdt/fdt_common.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/sys/dev/fdt/fdt_common.c b/sys/dev/fdt/fdt_common.c index f00519e5646f..0198d550ca2c 100644 --- a/sys/dev/fdt/fdt_common.c +++ b/sys/dev/fdt/fdt_common.c @@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$"); #define FDT_COMPAT_LEN 255 #define FDT_TYPE_LEN 64 +#define FDT_NAME_LEN 32 #define FDT_REG_CELLS 4 @@ -310,6 +311,22 @@ fdt_find_compatible(phandle_t start, const char *compat, int strict) } phandle_t +fdt_find_child(phandle_t start, const char *child_name) +{ + char name[FDT_NAME_LEN]; + phandle_t child; + + for (child = OF_child(start); child != 0; child = OF_peer(child)) { + if (OF_getprop(child, "name", name, sizeof(name)) <= 0) + continue; + if (strcmp(name, child_name) == 0) + return (child); + } + + return (0); +} + +phandle_t fdt_depth_search_compatible(phandle_t start, const char *compat, int strict) { phandle_t child, node; |