From: Javier Carrasco <javier.carrasco.cruz@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Jonathan Cameron <jic23@kernel.org>,
Rob Herring <robh@kernel.org>,
Daniel Scally <djrscally@gmail.com>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Jean Delvare <jdelvare@suse.com>,
Guenter Roeck <linux@roeck-us.net>, Pavel Machek <pavel@ucw.cz>,
Lee Jones <lee@kernel.org>,
Marcin Wojtas <marcin.s.wojtas@gmail.com>,
Russell King <linux@armlinux.org.uk>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>
Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-hwmon@vger.kernel.org, linux-leds@vger.kernel.org,
netdev@vger.kernel.org,
Javier Carrasco <javier.carrasco.cruz@gmail.com>
Subject: [PATCH 1/6] device property: document device_for_each_child_node macro
Date: Sat, 06 Jul 2024 17:23:33 +0200 [thread overview]
Message-ID: <20240706-device_for_each_child_node-available-v1-1-8a3f7615e41c@gmail.com> (raw)
In-Reply-To: <20240706-device_for_each_child_node-available-v1-0-8a3f7615e41c@gmail.com>
There have been some misconceptions about this macro, which iterates
over available child nodes from different backends.
As that is not obvious by its name, some users have opted for the
`fwnode_for_each_available_child_node()` macro instead.
That requires an unnecessary, explicit access to the fwnode member
of the device structure.
Passing the device to `device_for_each_child_node()` is shorter,
reflects more clearly the nature of the child nodes, and renders the
same result.
In general, `fwnode_for_each_available_child_node()` should be used
whenever the parent node of the children to iterate over is a firmware
node, and not the device itself.
Document the `device_for_each_child node(dev, child)` macro to clarify
its functionality.
Suggested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
---
include/linux/property.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/linux/property.h b/include/linux/property.h
index 61fc20e5f81f..ba8a3dc54786 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -171,6 +171,16 @@ struct fwnode_handle *fwnode_get_next_available_child_node(
struct fwnode_handle *device_get_next_child_node(const struct device *dev,
struct fwnode_handle *child);
+/**
+ * device_for_each_child_node - iterate over available child nodes of a device
+ * @dev: Pointer to the struct device
+ * @child: Pointer to an available child node in each loop iteration, if found
+ *
+ * Unavailable nodes are skipped i.e. this macro is implicitly _available_.
+ * The reference to the child node must be dropped on early exits.
+ * See fwnode_handle_put().
+ * For a scoped version of this macro, use device_for_each_child_node_scoped().
+ */
#define device_for_each_child_node(dev, child) \
for (child = device_get_next_child_node(dev, NULL); child; \
child = device_get_next_child_node(dev, child))
--
2.40.1
next prev parent reply other threads:[~2024-07-06 15:23 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-06 15:23 [PATCH 0/6] use device_for_each_child_node() to access device child nodes Javier Carrasco
2024-07-06 15:23 ` Javier Carrasco [this message]
2024-07-07 16:53 ` [PATCH 1/6] device property: document device_for_each_child_node macro Jonathan Cameron
2024-07-06 15:23 ` [PATCH 2/6] hwmon: (ltc2992) use device_for_each_child_node_scoped() to access child nodes Javier Carrasco
2024-07-07 16:55 ` Jonathan Cameron
2024-07-06 15:23 ` [PATCH 3/6] leds: bd2606mvv: use device_for_each_child_node() to access device " Javier Carrasco
2024-07-07 16:57 ` Jonathan Cameron
2024-07-08 8:14 ` Javier Carrasco
2024-07-08 8:28 ` Jonathan Cameron
2024-07-08 15:45 ` Javier Carrasco
2024-07-12 21:06 ` Andreas Kemnade
2024-07-13 21:37 ` Javier Carrasco
2024-07-06 15:23 ` [PATCH 4/6] leds: is31fl319x: use device_for_each_child_node_scoped() to access " Javier Carrasco
2024-07-07 16:58 ` Jonathan Cameron
2024-07-06 15:23 ` [PATCH 5/6] leds: pca995x: use device_for_each_child_node() to access device " Javier Carrasco
2024-07-07 16:59 ` Jonathan Cameron
2024-07-06 15:23 ` [PATCH 6/6] net: mvpp2: " Javier Carrasco
2024-07-07 17:01 ` Jonathan Cameron
2024-07-29 8:23 ` Russell King (Oracle)
2024-07-29 9:23 ` Javier Carrasco
2024-07-29 13:00 ` Russell King (Oracle)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240706-device_for_each_child_node-available-v1-1-8a3f7615e41c@gmail.com \
--to=javier.carrasco.cruz@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=davem@davemloft.net \
--cc=djrscally@gmail.com \
--cc=edumazet@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=jdelvare@suse.com \
--cc=jic23@kernel.org \
--cc=kuba@kernel.org \
--cc=lee@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linux@roeck-us.net \
--cc=marcin.s.wojtas@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pavel@ucw.cz \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).