Thread (34 messages) 34 messages, 5 authors, 2016-02-29

Re: [PATCH v4 16/17] FDT: Add a helper to get specified name subnode

From: Rob Herring <robh@kernel.org>
Date: 2016-02-09 05:05:28
Also in: linux-arm-kernel, linux-efi, lkml

On Thu, Feb 4, 2016 at 9:05 PM, Shannon Zhao [off-list ref] wrote:
From: Shannon Zhao <redacted>

Sometimes it needs to check if there is a node in FDT by full path.
I'm confused. Are you searching by full path or...
Introduce this helper to get the specified name subnode if it exists.
name of sub node?

Either way, fdt_subnode_offset or fdt_path_offset doesn't work?
quoted hunk ↗ jump to hunk
Signed-off-by: Shannon Zhao <redacted>
---
CC: Rob Herring <robh@kernel.org>
---
 drivers/of/fdt.c       | 25 +++++++++++++++++++++++++
 include/linux/of_fdt.h |  2 ++
 2 files changed, 27 insertions(+)
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 655f79d..eacb188 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -645,6 +645,31 @@ int __init of_scan_flat_dt(int (*it)(unsigned long node,
 }

 /**
+ * of_get_flat_dt_subnode_by_name - get subnode of specified node by name
+ *
+ * @node: the parent node
+ * @uname: the name of subnode
+ * @return offset of the subnode, or -FDT_ERR_NOTFOUND if there is none
+ */
+
+int of_get_flat_dt_subnode_by_name(unsigned long node, const char *uname)
+{
+       const void *blob = initial_boot_params;
+       int offset;
+       const char *pathp;
+
+       for (offset = fdt_first_subnode(blob, node);
+            offset >= 0;
+            offset = fdt_next_subnode(blob, offset)) {
+               pathp = fdt_get_name(blob, offset, NULL);
+               if (strcmp(pathp, uname) == 0)
+                       return offset;
+       }
+
+       return -FDT_ERR_NOTFOUND;
+}
+
+/**
  * of_get_flat_dt_root - find the root node in the flat blob
  */
 unsigned long __init of_get_flat_dt_root(void)
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index df9ef38..fc28162 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -52,6 +52,8 @@ extern char __dtb_end[];
 extern int of_scan_flat_dt(int (*it)(unsigned long node, const char *uname,
                                     int depth, void *data),
                           void *data);
+extern int of_get_flat_dt_subnode_by_name(unsigned long node,
+                                         const char *uname);
 extern const void *of_get_flat_dt_prop(unsigned long node, const char *name,
                                       int *size);
 extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
--
2.0.4


--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help