Skip to content
Snippets Groups Projects
Commit 2f376042 authored by Thierry Reding's avatar Thierry Reding Committed by Simon Glass
Browse files

fdt: Add a subnodes iterator macro


The fdt_for_each_subnode() iterator macro provided by this patch can be
used to iterate over a device tree node's subnodes. At each iteration a
loop variable will be set to the next subnode.

Acked-by: default avatarSimon Glass <sjg@chromium.org>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 9f85eee7
No related branches found
No related tags found
No related merge requests found
...@@ -163,6 +163,31 @@ int fdt_first_subnode(const void *fdt, int offset); ...@@ -163,6 +163,31 @@ int fdt_first_subnode(const void *fdt, int offset);
*/ */
int fdt_next_subnode(const void *fdt, int offset); int fdt_next_subnode(const void *fdt, int offset);
/**
* fdt_for_each_subnode - iterate over all subnodes of a parent
*
* This is actually a wrapper around a for loop and would be used like so:
*
* fdt_for_each_subnode(fdt, node, parent) {
* ...
* use node
* ...
* }
*
* Note that this is implemented as a macro and node is used as iterator in
* the loop. It should therefore be a locally allocated variable. The parent
* variable on the other hand is never modified, so it can be constant or
* even a literal.
*
* @fdt: FDT blob (const void *)
* @node: child node (int)
* @parent: parent node (int)
*/
#define fdt_for_each_subnode(fdt, node, parent) \
for (node = fdt_first_subnode(fdt, parent); \
node >= 0; \
node = fdt_next_subnode(fdt, node))
/**********************************************************************/ /**********************************************************************/
/* General functions */ /* General functions */
/**********************************************************************/ /**********************************************************************/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment