|
@@ -753,6 +753,36 @@ int __init of_scan_flat_dt(int (*it)(unsigned long node,
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * of_scan_flat_dt_subnodes - scan sub-nodes of a node call callback on each.
|
|
|
+ * @it: callback function
|
|
|
+ * @data: context data pointer
|
|
|
+ *
|
|
|
+ * This function is used to scan sub-nodes of a node.
|
|
|
+ */
|
|
|
+int __init of_scan_flat_dt_subnodes(unsigned long parent,
|
|
|
+ int (*it)(unsigned long node,
|
|
|
+ const char *uname,
|
|
|
+ void *data),
|
|
|
+ void *data)
|
|
|
+{
|
|
|
+ const void *blob = initial_boot_params;
|
|
|
+ int node;
|
|
|
+
|
|
|
+ fdt_for_each_subnode(node, blob, parent) {
|
|
|
+ const char *pathp;
|
|
|
+ int rc;
|
|
|
+
|
|
|
+ pathp = fdt_get_name(blob, node, NULL);
|
|
|
+ if (*pathp == '/')
|
|
|
+ pathp = kbasename(pathp);
|
|
|
+ rc = it(node, pathp, data);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* of_get_flat_dt_subnode_by_name - get the subnode by given name
|
|
|
*
|
|
@@ -812,6 +842,14 @@ int __init of_flat_dt_match(unsigned long node, const char *const *compat)
|
|
|
return of_fdt_match(initial_boot_params, node, compat);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * of_get_flat_dt_prop - Given a node in the flat blob, return the phandle
|
|
|
+ */
|
|
|
+uint32_t __init of_get_flat_dt_phandle(unsigned long node)
|
|
|
+{
|
|
|
+ return fdt_get_phandle(initial_boot_params, node);
|
|
|
+}
|
|
|
+
|
|
|
struct fdt_scan_status {
|
|
|
const char *name;
|
|
|
int namelen;
|