struct acpi_device *adev;
        u64 address;
        int score;
+       bool check_sta;
        bool check_children;
 };
 
                return 0;
 
        if (!wd->adev) {
-               /* This is the first matching object.  Save it and continue. */
+               /*
+                * This is the first matching object, so save it.  If it is not
+                * necessary to look for any other matching objects, stop the
+                * search.
+                */
                wd->adev = adev;
-               return 0;
+               return !(wd->check_sta || wd->check_children);
        }
 
        /*
        return 0;
 }
 
-struct acpi_device *acpi_find_child_device(struct acpi_device *parent,
-                                          u64 address, bool check_children)
+static struct acpi_device *acpi_find_child(struct acpi_device *parent,
+                                          u64 address, bool check_children,
+                                          bool check_sta)
 {
        struct find_child_walk_data wd = {
                .address = address,
                .check_children = check_children,
+               .check_sta = check_sta,
                .adev = NULL,
                .score = 0,
        };
 
        return wd.adev;
 }
+
+struct acpi_device *acpi_find_child_device(struct acpi_device *parent,
+                                          u64 address, bool check_children)
+{
+       return acpi_find_child(parent, address, check_children, true);
+}
 EXPORT_SYMBOL_GPL(acpi_find_child_device);
 
+struct acpi_device *acpi_find_child_by_adr(struct acpi_device *adev,
+                                          acpi_bus_address adr)
+{
+       return acpi_find_child(adev, adr, false, false);
+}
+EXPORT_SYMBOL_GPL(acpi_find_child_by_adr);
+
 static void acpi_physnode_link_name(char *buf, unsigned int node_id)
 {
        if (node_id > 0)
 
 }
 struct acpi_device *acpi_find_child_device(struct acpi_device *parent,
                                           u64 address, bool check_children);
+struct acpi_device *acpi_find_child_by_adr(struct acpi_device *adev,
+                                          acpi_bus_address adr);
 int acpi_is_root_bridge(acpi_handle);
 struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);