+static int acpi_power_resume(struct acpi_device *device)
+{
+ int result = 0;
+ struct acpi_power_resource *resource = NULL;
+ struct acpi_power_reference *ref;
+
+ if (!device || !acpi_driver_data(device))
+ return -EINVAL;
+
+ resource = (struct acpi_power_resource *)acpi_driver_data(device);
+
+ result = acpi_power_get_state(resource);
+ if (result)
+ return result;
+
+ mutex_lock(&resource->resource_lock);
+ if ((resource->state == ACPI_POWER_RESOURCE_STATE_OFF) &&
+ !list_empty(&resource->reference)) {
+ ref = container_of(resource->reference.next, struct acpi_power_reference, node);
+ mutex_unlock(&resource->resource_lock);
+ result = acpi_power_on(device->handle, ref->device);
+ return result;
+ }
+
+ mutex_unlock(&resource->resource_lock);
+ return 0;
+}
+