aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/device_pm.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2012-11-01 20:40:53 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2012-11-14 18:15:18 -0500
commita6ae7594b1b157e0e7976ed105a7be27d69a5361 (patch)
treead9d2fdca3d7a20335d29498101917eb8fc8782b /drivers/acpi/device_pm.c
parent078eb12648c2f8bba48921f60ec2cec3e1bbc051 (diff)
ACPI / PM: Move device PM functions related to sleep states
Introduce helper function returning the target sleep state of the system and use it to move the remaining device power management functions from sleep.c to device_pm.c. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/device_pm.c')
-rw-r--r--drivers/acpi/device_pm.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
index b4f03f91b0b0..7ddd93463a2e 100644
--- a/drivers/acpi/device_pm.c
+++ b/drivers/acpi/device_pm.c
@@ -198,6 +198,31 @@ int acpi_device_power_state(struct device *dev, struct acpi_device *adev,
198} 198}
199EXPORT_SYMBOL_GPL(acpi_device_power_state); 199EXPORT_SYMBOL_GPL(acpi_device_power_state);
200 200
201/**
202 * acpi_pm_device_sleep_state - Get preferred power state of ACPI device.
203 * @dev: Device whose preferred target power state to return.
204 * @d_min_p: Location to store the upper limit of the allowed states range.
205 * @d_max_in: Deepest low-power state to take into consideration.
206 * Return value: Preferred power state of the device on success, -ENODEV
207 * (if there's no 'struct acpi_device' for @dev) or -EINVAL on failure
208 *
209 * The caller must ensure that @dev is valid before using this function.
210 */
211int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in)
212{
213 acpi_handle handle = DEVICE_ACPI_HANDLE(dev);
214 struct acpi_device *adev;
215
216 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &adev))) {
217 dev_dbg(dev, "ACPI handle without context in %s!\n", __func__);
218 return -ENODEV;
219 }
220
221 return acpi_device_power_state(dev, adev, acpi_target_system_state(),
222 d_max_in, d_min_p);
223}
224EXPORT_SYMBOL(acpi_pm_device_sleep_state);
225
201#ifdef CONFIG_PM_RUNTIME 226#ifdef CONFIG_PM_RUNTIME
202/** 227/**
203 * __acpi_device_run_wake - Enable/disable runtime remote wakeup for device. 228 * __acpi_device_run_wake - Enable/disable runtime remote wakeup for device.
@@ -274,4 +299,33 @@ int __acpi_device_sleep_wake(struct acpi_device *adev, u32 target_state,
274 acpi_enable_wakeup_device_power(adev, target_state) : 299 acpi_enable_wakeup_device_power(adev, target_state) :
275 acpi_disable_wakeup_device_power(adev); 300 acpi_disable_wakeup_device_power(adev);
276} 301}
302
303/**
304 * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system.
305 * @dev: Device to enable/desible to wake up the system from sleep states.
306 * @enable: Whether to enable or disable @dev to wake up the system.
307 */
308int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
309{
310 acpi_handle handle;
311 struct acpi_device *adev;
312 int error;
313
314 if (!device_can_wakeup(dev))
315 return -EINVAL;
316
317 handle = DEVICE_ACPI_HANDLE(dev);
318 if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &adev))) {
319 dev_dbg(dev, "ACPI handle without context in %s!\n", __func__);
320 return -ENODEV;
321 }
322
323 error = __acpi_device_sleep_wake(adev, acpi_target_system_state(),
324 enable);
325 if (!error)
326 dev_info(dev, "System wakeup %s by ACPI\n",
327 enable ? "enabled" : "disabled");
328
329 return error;
330}
277#endif /* CONFIG_PM_SLEEP */ 331#endif /* CONFIG_PM_SLEEP */