Commit b75e1f06 authored by Matti Vaittinen's avatar Matti Vaittinen Committed by Greg Kroah-Hartman
Browse files

device property: Use tidy for_each_named_* macros



Implementing if-conditions inside for_each_x() macros requires some
thinking to avoid side effects in the calling code. Resulting code
may look somewhat awkward, and there are couple of different ways it is
usually done.

Standardizing this to one way can help making it more obvious for a code
reader and writer. The newly added for_each_if() is a way to achieve this.

Use for_each_if() to make these macros look like many others which
should in the long run help reading the code.

Signed-off-by: default avatarMatti Vaittinen <mazziesaccount@gmail.com>
Acked-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/c98b39a7195006fdd24590b8d11bb271a72a0c8a.1749453752.git.mazziesaccount@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5accfca0
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <linux/fwnode.h>
#include <linux/stddef.h>
#include <linux/types.h>
#include <linux/util_macros.h>

struct device;

@@ -169,7 +170,7 @@ struct fwnode_handle *fwnode_get_next_available_child_node(

#define fwnode_for_each_named_child_node(fwnode, child, name)		\
	fwnode_for_each_child_node(fwnode, child)			\
		if (!fwnode_name_eq(child, name)) { } else
		for_each_if(fwnode_name_eq(child, name))

#define fwnode_for_each_available_child_node(fwnode, child)		       \
	for (child = fwnode_get_next_available_child_node(fwnode, NULL); child;\
@@ -184,7 +185,7 @@ struct fwnode_handle *device_get_next_child_node(const struct device *dev,

#define device_for_each_named_child_node(dev, child, name)		\
	device_for_each_child_node(dev, child)				\
		if (!fwnode_name_eq(child, name)) { } else
		for_each_if(fwnode_name_eq(child, name))

#define device_for_each_child_node_scoped(dev, child)			\
	for (struct fwnode_handle *child __free(fwnode_handle) =	\
@@ -193,7 +194,7 @@ struct fwnode_handle *device_get_next_child_node(const struct device *dev,

#define device_for_each_named_child_node_scoped(dev, child, name)	\
	device_for_each_child_node_scoped(dev, child)			\
		if (!fwnode_name_eq(child, name)) { } else
		for_each_if(fwnode_name_eq(child, name))

struct fwnode_handle *fwnode_get_named_child_node(const struct fwnode_handle *fwnode,
						  const char *childname);