aboutsummaryrefslogtreecommitdiff
path: root/drivers/acpi/dock.c
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2007-02-03 01:12:39 -0500
committerLen Brown <len.brown@intel.com>2007-02-03 01:12:39 -0500
commit1fcb71b84b05ff3bfd5b5b2eca9a9b3d13a76e3a (patch)
treedc38e6c01154a3f19f92f9c114ba4b956c5a80a2 /drivers/acpi/dock.c
parente8bdc5a9c56c140c732246a298922c3cf3777460 (diff)
parent0ed1e38d513ea683ce125e698dd41d31441e0e8c (diff)
Pull bay into test branch
Diffstat (limited to 'drivers/acpi/dock.c')
-rw-r--r--drivers/acpi/dock.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index 90990a4b652..688e83a1690 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -615,20 +615,28 @@ static acpi_status
find_dock_devices(acpi_handle handle, u32 lvl, void *context, void **rv)
{
acpi_status status;
- acpi_handle tmp;
+ acpi_handle tmp, parent;
struct dock_station *ds = context;
struct dock_dependent_device *dd;
status = acpi_bus_get_ejd(handle, &tmp);
- if (ACPI_FAILURE(status))
- return AE_OK;
+ if (ACPI_FAILURE(status)) {
+ /* try the parent device as well */
+ status = acpi_get_parent(handle, &parent);
+ if (ACPI_FAILURE(status))
+ goto fdd_out;
+ /* see if parent is dependent on dock */
+ status = acpi_bus_get_ejd(parent, &tmp);
+ if (ACPI_FAILURE(status))
+ goto fdd_out;
+ }
if (tmp == ds->handle) {
dd = alloc_dock_dependent_device(handle);
if (dd)
add_dock_dependent_device(ds, dd);
}
-
+fdd_out:
return AE_OK;
}