Message ID | 87cyw3c13p.wl-kuninori.morimoto.gx@renesas.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | drivers: clk: renesas: ignore all clocks which is assinged to non Linux system | expand |
On Tue, Nov 21, 2023 at 02:05:30AM +0000, Kuninori Morimoto wrote: > Linux Kernel has of_get_next_available_child(). > Add more generic __of_get_next_status_child() to enable to use same > logic for other status. > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > Tested-by: Yusuke Goda <yusuke.goda.sx@renesas.com> > --- > drivers/of/base.c | 29 ++++++++++++++++++----------- > 1 file changed, 18 insertions(+), 11 deletions(-) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index 3cb467a7e747..d0f7e7c890f1 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -612,16 +612,9 @@ struct device_node *of_get_next_child(const struct device_node *node, > } > EXPORT_SYMBOL(of_get_next_child); > > -/** > - * of_get_next_available_child - Find the next available child node > - * @node: parent node > - * @prev: previous child of the parent node, or NULL to get first > - * > - * This function is like of_get_next_child(), except that it > - * automatically skips any disabled nodes (i.e. status = "disabled"). > - */ > -struct device_node *of_get_next_available_child(const struct device_node *node, > - struct device_node *prev) > +static struct device_node *__of_get_next_status_child(const struct device_node *node, '__' means the lock should already be held, not that it is an internal function. With that dropped, Reviewed-by: Rob Herring <robh@kernel.org>
diff --git a/drivers/of/base.c b/drivers/of/base.c index 3cb467a7e747..d0f7e7c890f1 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -612,16 +612,9 @@ struct device_node *of_get_next_child(const struct device_node *node, } EXPORT_SYMBOL(of_get_next_child); -/** - * of_get_next_available_child - Find the next available child node - * @node: parent node - * @prev: previous child of the parent node, or NULL to get first - * - * This function is like of_get_next_child(), except that it - * automatically skips any disabled nodes (i.e. status = "disabled"). - */ -struct device_node *of_get_next_available_child(const struct device_node *node, - struct device_node *prev) +static struct device_node *__of_get_next_status_child(const struct device_node *node, + struct device_node *prev, + bool (*checker)(const struct device_node *)) { struct device_node *next; unsigned long flags; @@ -632,7 +625,7 @@ struct device_node *of_get_next_available_child(const struct device_node *node, raw_spin_lock_irqsave(&devtree_lock, flags); next = prev ? prev->sibling : node->child; for (; next; next = next->sibling) { - if (!__of_device_is_available(next)) + if (!checker(next)) continue; if (of_node_get(next)) break; @@ -641,6 +634,20 @@ struct device_node *of_get_next_available_child(const struct device_node *node, raw_spin_unlock_irqrestore(&devtree_lock, flags); return next; } + +/** + * of_get_next_available_child - Find the next available child node + * @node: parent node + * @prev: previous child of the parent node, or NULL to get first + * + * This function is like of_get_next_child(), except that it + * automatically skips any disabled nodes (i.e. status = "disabled"). + */ +struct device_node *of_get_next_available_child(const struct device_node *node, + struct device_node *prev) +{ + return __of_get_next_status_child(node, prev, __of_device_is_available); +} EXPORT_SYMBOL(of_get_next_available_child); /**