[U-Boot] [PATCH 05/23] fdt: Add a subnodes iterator macro

Simon Glass
2014-08-18T18:11:03Z

On 18 August 2014 01:16, Thierry Reding <thierry.reding@gmail.com> wrote:
> From: Thierry Reding <treding@nvidia.com>
>
> 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.
>
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Acked-by: Simon Glass <sjg@chromium.org>

Will this go upstream to dtc at some point?

> ---
> include/libfdt.h | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/include/libfdt.h b/include/libfdt.h
> index 4d7fb2681669..0330d7a29a58 100644
> --- a/include/libfdt.h
> +++ b/include/libfdt.h
> @@ -163,6 +163,26 @@ int fdt_first_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
> + * ...
> + * }
> + *
> + * @fdt: FDT blob
> + * @node: child node
> + * @parent: parent node

It might be worth mentioning the type of each of these since it is not
in the macro.

> + */
> +#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 */
> /**********************************************************************/
> --
> 2.0.4
>

Regards,
Simon