Re: [PATCH v5 02/10] property: Add functions to count named child nodes

From: Andy Shevchenko
Date: Mon Mar 03 2025 - 07:05:11 EST


On Mon, Mar 03, 2025 at 01:31:45PM +0200, Matti Vaittinen wrote:
> There are some use-cases where child nodes with a specific name need to
> be parsed. In a few cases the data from the found nodes is added to an
> array which is allocated based on the number of found nodes. One example
> of such use is the IIO subsystem's ADC channel nodes, where the relevant
> nodes are named as channel[@N].
>
> Add a helpers for counting device's sub-nodes with certain name instead
> of open-coding this in every user.

...

> +unsigned int fwnode_get_child_node_count_named(const struct fwnode_handle *fwnode,
> + const char *name)
> +{
> + struct fwnode_handle *child;
> + unsigned int count = 0;

> + fwnode_for_each_child_node(fwnode, child)
> + if (fwnode_name_eq(child, name))

I would expect this to be a separate macro

fwnode_for_each_named_child_node()

(and its device variant) that gives us more consistent approach.

> + count++;

And the above looks like missing {}, which won't be needed with the other
suggestion in place.

> + return count;
> +}

> + if (!fwnode)
> + return -EINVAL;
> +
> + if (IS_ERR(fwnode))
> + return PTR_ERR(fwnode);

I expect that this will return 0 or number of nodes. Why do we need an error code?
If it's really required, it should be in the fwnode API above.

Also do we care about secondary fwnodes?

> + return fwnode_get_child_node_count_named(fwnode, name);
> +}

...

> +unsigned int fwnode_get_child_node_count_named(const struct fwnode_handle *fwnode,
> + const char *name);

To me the following name sounds better: fwnode_get_named_child_node_count().

> +unsigned int device_get_child_node_count_named(const struct device *dev,
> + const char *name);

In the similar way.

--
With Best Regards,
Andy Shevchenko