|
|
@@ -975,6 +975,14 @@ struct fwnode_handle *acpi_get_next_subnode(const struct fwnode_handle *fwnode,
|
|
|
const struct acpi_data_node *data = to_acpi_data_node(fwnode);
|
|
|
struct acpi_data_node *dn;
|
|
|
|
|
|
+ /*
|
|
|
+ * We can have a combination of device and data nodes, e.g. with
|
|
|
+ * hierarchical _DSD properties. Make sure the adev pointer is
|
|
|
+ * restored before going through data nodes, otherwise we will
|
|
|
+ * be looking for data_nodes below the last device found instead
|
|
|
+ * of the common fwnode shared by device_nodes and data_nodes.
|
|
|
+ */
|
|
|
+ adev = to_acpi_device_node(fwnode);
|
|
|
if (adev)
|
|
|
head = &adev->data.subnodes;
|
|
|
else if (data)
|