提交 ade3e7fe 编写于 作者: R Rafael J. Wysocki 提交者: Len Brown

ACPI / PM: Add function for device power state initialization

Add function acpi_bus_init_power() for getting the initial power
state of an ACPI device and reference counting its power resources
as appropriate.

Make acpi_bus_get_power_flags() use the new function instead of
acpi_bus_get_power() that updates device->power.state without
reference counting the device's power resources.
Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 5e6d4fe4
...@@ -364,6 +364,31 @@ int acpi_bus_set_power(acpi_handle handle, int state) ...@@ -364,6 +364,31 @@ int acpi_bus_set_power(acpi_handle handle, int state)
EXPORT_SYMBOL(acpi_bus_set_power); EXPORT_SYMBOL(acpi_bus_set_power);
int acpi_bus_init_power(struct acpi_device *device)
{
int state;
int result;
if (!device)
return -EINVAL;
device->power.state = ACPI_STATE_UNKNOWN;
result = __acpi_bus_get_power(device, &state);
if (result)
return result;
if (device->power.flags.power_resources)
result = acpi_power_on_resources(device, state);
if (!result)
device->power.state = state;
return result;
}
bool acpi_bus_power_manageable(acpi_handle handle) bool acpi_bus_power_manageable(acpi_handle handle)
{ {
struct acpi_device *device; struct acpi_device *device;
......
...@@ -44,6 +44,7 @@ int acpi_device_sleep_wake(struct acpi_device *dev, ...@@ -44,6 +44,7 @@ int acpi_device_sleep_wake(struct acpi_device *dev,
int acpi_power_get_inferred_state(struct acpi_device *device, int *state); int acpi_power_get_inferred_state(struct acpi_device *device, int *state);
int acpi_power_on_resources(struct acpi_device *device, int state); int acpi_power_on_resources(struct acpi_device *device, int state);
int acpi_power_transition(struct acpi_device *device, int state); int acpi_power_transition(struct acpi_device *device, int state);
int acpi_bus_init_power(struct acpi_device *device);
extern int acpi_power_nocheck; extern int acpi_power_nocheck;
int acpi_wakeup_device_init(void); int acpi_wakeup_device_init(void);
......
...@@ -901,10 +901,7 @@ static int acpi_bus_get_power_flags(struct acpi_device *device) ...@@ -901,10 +901,7 @@ static int acpi_bus_get_power_flags(struct acpi_device *device)
device->power.states[ACPI_STATE_D3].flags.valid = 1; device->power.states[ACPI_STATE_D3].flags.valid = 1;
device->power.states[ACPI_STATE_D3].power = 0; device->power.states[ACPI_STATE_D3].power = 0;
/* TBD: System wake support and resource requirements. */ acpi_bus_init_power(device);
device->power.state = ACPI_STATE_UNKNOWN;
acpi_bus_get_power(device->handle, &(device->power.state));
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册