dm: core: Add device children and sibling functions

Add some utility functions to check for children and for the last sibling in
a device's parent.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
Simon Glass 2015-03-25 12:21:57 -06:00
parent 206d4d2b4b
commit c5785673bc
2 changed files with 58 additions and 0 deletions

View file

@ -490,3 +490,31 @@ fdt_addr_t dev_get_addr(struct udevice *dev)
return FDT_ADDR_T_NONE;
}
#endif
bool device_has_children(struct udevice *dev)
{
return !list_empty(&dev->child_head);
}
bool device_has_active_children(struct udevice *dev)
{
struct udevice *child;
for (device_find_first_child(dev, &child);
child;
device_find_next_child(&child)) {
if (device_active(child))
return true;
}
return false;
}
bool device_is_last_sibling(struct udevice *dev)
{
struct udevice *parent = dev->parent;
if (!parent)
return false;
return list_is_last(&dev->sibling_node, &parent->child_head);
}

View file

@ -380,4 +380,34 @@ int device_find_next_child(struct udevice **devp);
*/
fdt_addr_t dev_get_addr(struct udevice *dev);
/**
* device_has_children() - check if a device has any children
*
* @dev: Device to check
* @return true if the device has one or more children
*/
bool device_has_children(struct udevice *dev);
/**
* device_has_active_children() - check if a device has any active children
*
* @dev: Device to check
* @return true if the device has one or more children and at least one of
* them is active (probed).
*/
bool device_has_active_children(struct udevice *dev);
/**
* device_is_last_sibling() - check if a device is the last sibling
*
* This function can be useful for display purposes, when special action needs
* to be taken when displaying the last sibling. This can happen when a tree
* view of devices is being displayed.
*
* @dev: Device to check
* @return true if there are no more siblings after this one - i.e. is it
* last in the list.
*/
bool device_is_last_sibling(struct udevice *dev);
#endif