|
@@ -931,6 +931,31 @@ int device_add_properties(struct device *dev,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(device_add_properties);
|
|
|
|
|
|
+/**
|
|
|
+ * fwnode_get_parent - Return parent firwmare node
|
|
|
+ * @fwnode: Firmware whose parent is retrieved
|
|
|
+ *
|
|
|
+ * Return parent firmware node of the given node if possible or %NULL if no
|
|
|
+ * parent was available.
|
|
|
+ */
|
|
|
+struct fwnode_handle *fwnode_get_parent(struct fwnode_handle *fwnode)
|
|
|
+{
|
|
|
+ struct fwnode_handle *parent = NULL;
|
|
|
+
|
|
|
+ if (is_of_node(fwnode)) {
|
|
|
+ struct device_node *node;
|
|
|
+
|
|
|
+ node = of_get_parent(to_of_node(fwnode));
|
|
|
+ if (node)
|
|
|
+ parent = &node->fwnode;
|
|
|
+ } else if (is_acpi_node(fwnode)) {
|
|
|
+ parent = acpi_node_get_parent(fwnode);
|
|
|
+ }
|
|
|
+
|
|
|
+ return parent;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(fwnode_get_parent);
|
|
|
+
|
|
|
/**
|
|
|
* device_get_next_child_node - Return the next child node handle for a device
|
|
|
* @dev: Device to find the next child node for.
|