/* All data nodes have parent pointer so just return that */
                return to_acpi_data_node(fwnode)->parent;
        } else if (is_acpi_device_node(fwnode)) {
 - -            acpi_handle handle, parent_handle;
 -   
 -              handle = to_acpi_device_node(fwnode)->handle;
 -              if (ACPI_SUCCESS(acpi_get_parent(handle, &parent_handle))) {
 -                      struct acpi_device *adev;
 + +            struct device *dev = to_acpi_device_node(fwnode)->dev.parent;
     
   -            handle = to_acpi_device_node(fwnode)->handle;
   -            if (ACPI_SUCCESS(acpi_get_parent(handle, &parent_handle))) {
   -                    struct acpi_device *adev;
   - 
 - -                    if (!acpi_bus_get_device(parent_handle, &adev))
 - -                            return acpi_fwnode_handle(adev);
 - -            }
 + +            if (dev)
 + +                    return acpi_fwnode_handle(to_acpi_device(dev));
        }
     
        return NULL;