On Tue, Dec 28, 2021 at 03:25:42PM +0100, Michael Walle wrote: > Add a new variant of the of_parse_phandle_with_args() which treats the > cells name as optional. If it's missing, it is assumed that the phandle > has no arguments. > > Up until now, a nvmem node didn't have any arguments, so all the device > trees haven't any '#*-cells' property. But there is a need for an > additional argument for the phandle, for which we need a '#*-cells' > property. Therefore, we need to support nvmem nodes with and without > this property. > > Signed-off-by: Michael Walle <michael@xxxxxxxx> > --- > drivers/of/base.c | 23 +++++++++++++++++++++++ > include/linux/of.h | 12 ++++++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index 5b907600f5b0..fb28bb26276e 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -1543,6 +1543,29 @@ int of_parse_phandle_with_args(const struct device_node *np, const char *list_na > } > EXPORT_SYMBOL(of_parse_phandle_with_args); > > +/** > + * of_parse_phandle_with_optional_args() - Find a node pointed by phandle in a list > + * > + * Same as of_parse_phandle_args() except that if the cells_name property is > + * not found, cell_count of 0 is assumed. > + * > + * This is used to useful, if you have a phandle which didn't have arguments > + * before and thus doesn't have a '#*-cells' property but is now migrated to > + * having arguments while retaining backwards compatibility. > + */ > +int of_parse_phandle_with_optional_args(const struct device_node *np, > + const char *list_name, > + const char *cells_name, int index, > + struct of_phandle_args *out_args) > +{ > + if (index < 0) > + return -EINVAL; I'm not sure why we didn't do this from the start, but just make index unsigned and then this check is not needed. > + > + return __of_parse_phandle_with_args(np, list_name, cells_name, > + 0, index, out_args); > +} > +EXPORT_SYMBOL(of_parse_phandle_with_optional_args); With the above, just make this static inline. Bonus points if you want to do the same changes on the other variants. Rob