of: Introduce of_for_each_phandle() helper macro
authorJoerg Roedel <jroedel@suse.de>
Mon, 4 Apr 2016 15:49:20 +0000 (17:49 +0200)
committerRob Herring <robh@kernel.org>
Tue, 19 Apr 2016 22:25:14 +0000 (17:25 -0500)
With this macro any user can easily iterate over a list of
phandles. The patch also converts __of_parse_phandle_with_args()
to make use of the macro.

The of_count_phandle_with_args() function is not converted,
because the macro hides the return value of of_phandle_iterator_init(),
which is needed in there.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Rob Herring <robh@kernel.org>
drivers/of/base.c
include/linux/of.h

index fcff2b62ec10a0fffee7370bed2b57c0ac9cf558..ea5a13d3c5a5697e0d0e3bc12d100adb503c6db0 100644 (file)
@@ -1543,13 +1543,8 @@ static int __of_parse_phandle_with_args(const struct device_node *np,
        struct of_phandle_iterator it;
        int rc, cur_index = 0;
 
-       rc = of_phandle_iterator_init(&it, np, list_name,
-                                     cells_name, cell_count);
-       if (rc)
-               return rc;
-
        /* Loop over the phandles until all the requested entry is found */
-       while ((rc = of_phandle_iterator_next(&it)) == 0) {
+       of_for_each_phandle(&it, rc, np, list_name, cells_name, cell_count) {
                /*
                 * All of the error cases bail out of the loop, so at
                 * this point, the parsing is successful. If the requested
index 1f5e108f6716beab1c2afdda27258cb946e6f519..b0b80716fbfb327584832f06dfe1af70861730bb 100644 (file)
@@ -908,6 +908,12 @@ static inline int of_property_read_s32(const struct device_node *np,
        return of_property_read_u32(np, propname, (u32*) out_value);
 }
 
+#define of_for_each_phandle(it, err, np, ln, cn, cc)                   \
+       for (of_phandle_iterator_init((it), (np), (ln), (cn), (cc)),    \
+            err = of_phandle_iterator_next(it);                        \
+            err == 0;                                                  \
+            err = of_phandle_iterator_next(it))
+
 #define of_property_for_each_u32(np, propname, prop, p, u)     \
        for (prop = of_find_property(np, propname, NULL),       \
                p = of_prop_next_u32(prop, NULL, &u);           \