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>
This commit is contained in:
parent
7c6c57f2ab
commit
3395de96ae
@ -997,6 +997,32 @@ fwnode_get_next_child_node(const struct fwnode_handle *fwnode,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_get_next_child_node);
|
||||
|
||||
/**
|
||||
* fwnode_get_next_available_child_node - Return the next
|
||||
* available child node handle for a node
|
||||
* @fwnode: Firmware node to find the next child node for.
|
||||
* @child: Handle to one of the node's child nodes or a %NULL handle.
|
||||
*/
|
||||
struct fwnode_handle *
|
||||
fwnode_get_next_available_child_node(const struct fwnode_handle *fwnode,
|
||||
struct fwnode_handle *child)
|
||||
{
|
||||
struct fwnode_handle *next_child = child;
|
||||
|
||||
if (!fwnode)
|
||||
return NULL;
|
||||
|
||||
do {
|
||||
next_child = fwnode_get_next_child_node(fwnode, next_child);
|
||||
|
||||
if (!next_child || fwnode_device_is_available(next_child))
|
||||
break;
|
||||
} while (next_child);
|
||||
|
||||
return next_child;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_get_next_available_child_node);
|
||||
|
||||
/**
|
||||
* device_get_next_child_node - Return the next child node handle for a device
|
||||
* @dev: Device to find the next child node for.
|
||||
|
@ -83,11 +83,17 @@ struct fwnode_handle *fwnode_get_next_parent(
|
||||
struct fwnode_handle *fwnode);
|
||||
struct fwnode_handle *fwnode_get_next_child_node(
|
||||
const struct fwnode_handle *fwnode, struct fwnode_handle *child);
|
||||
struct fwnode_handle *fwnode_get_next_available_child_node(
|
||||
const struct fwnode_handle *fwnode, struct fwnode_handle *child);
|
||||
|
||||
#define fwnode_for_each_child_node(fwnode, child) \
|
||||
for (child = fwnode_get_next_child_node(fwnode, NULL); child; \
|
||||
child = fwnode_get_next_child_node(fwnode, child))
|
||||
|
||||
#define fwnode_for_each_available_child_node(fwnode, child) \
|
||||
for (child = fwnode_get_next_available_child_node(fwnode, NULL); child;\
|
||||
child = fwnode_get_next_available_child_node(fwnode, child))
|
||||
|
||||
struct fwnode_handle *device_get_next_child_node(
|
||||
struct device *dev, struct fwnode_handle *child);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user