[U-Boot] [PATCH v2 09/80] dm: core: Add device children and sibling functions
Simon Glass
sjg at chromium.org
Wed Mar 25 19:21:57 CET 2015
Add some utility functions to check for children and for the last sibling in
a device's parent.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
Changes in v2: None
drivers/core/device.c | 28 ++++++++++++++++++++++++++++
include/dm/device.h | 30 ++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+)
diff --git a/drivers/core/device.c b/drivers/core/device.c
index b7ed21c..ccaa99c 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -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);
+}
diff --git a/include/dm/device.h b/include/dm/device.h
index ec22885..c11342c 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -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
--
2.2.0.rc0.207.ga3a616c
More information about the U-Boot
mailing list