diff options
author | Marcin Wojtas <mw@semihalf.com> | 2018-01-18 07:31:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-22 10:57:04 -0500 |
commit | 3395de96ae5998692bd86024d0d5e4dd55cd6cc3 (patch) | |
tree | c870b2a027636e19c4143a928b3913b86eb52185 /drivers/base/property.c | |
parent | 7c6c57f2ab2c5113844fe187a7c45c4bd76dc671 (diff) |
device property: Allow iterating over available child fwnodes
Implement a new helper function fwnode_get_next_available_child_node(),
which enables obtaining next enabled child fwnode, which
works on a similar basis to OF's of_get_next_available_child().
This commit also introduces a macro, thanks to which it is
possible to iterate over the available fwnodes, using the
new function described above.
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/base/property.c')
-rw-r--r-- | drivers/base/property.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/base/property.c b/drivers/base/property.c index 1d6c9d99d72f..613ba820f545 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c | |||
@@ -998,6 +998,32 @@ fwnode_get_next_child_node(const struct fwnode_handle *fwnode, | |||
998 | EXPORT_SYMBOL_GPL(fwnode_get_next_child_node); | 998 | EXPORT_SYMBOL_GPL(fwnode_get_next_child_node); |
999 | 999 | ||
1000 | /** | 1000 | /** |
1001 | * fwnode_get_next_available_child_node - Return the next | ||
1002 | * available child node handle for a node | ||
1003 | * @fwnode: Firmware node to find the next child node for. | ||
1004 | * @child: Handle to one of the node's child nodes or a %NULL handle. | ||
1005 | */ | ||
1006 | struct fwnode_handle * | ||
1007 | fwnode_get_next_available_child_node(const struct fwnode_handle *fwnode, | ||
1008 | struct fwnode_handle *child) | ||
1009 | { | ||
1010 | struct fwnode_handle *next_child = child; | ||
1011 | |||
1012 | if (!fwnode) | ||
1013 | return NULL; | ||
1014 | |||
1015 | do { | ||
1016 | next_child = fwnode_get_next_child_node(fwnode, next_child); | ||
1017 | |||
1018 | if (!next_child || fwnode_device_is_available(next_child)) | ||
1019 | break; | ||
1020 | } while (next_child); | ||
1021 | |||
1022 | return next_child; | ||
1023 | } | ||
1024 | EXPORT_SYMBOL_GPL(fwnode_get_next_available_child_node); | ||
1025 | |||
1026 | /** | ||
1001 | * device_get_next_child_node - Return the next child node handle for a device | 1027 | * device_get_next_child_node - Return the next child node handle for a device |
1002 | * @dev: Device to find the next child node for. | 1028 | * @dev: Device to find the next child node for. |
1003 | * @child: Handle to one of the device's child nodes or a null handle. | 1029 | * @child: Handle to one of the device's child nodes or a null handle. |