1 /* 2 * drivers/acpi/device_pm.c - ACPI device power management routines. 3 * 4 * Copyright (C) 2012, Intel Corp. 5 * Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com> 6 * 7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as published 11 * by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License along 19 * with this program; if not, write to the Free Software Foundation, Inc., 20 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 21 * 22 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23 */ 24 25 #include <linux/device.h> 26 #include <linux/export.h> 27 #include <linux/mutex.h> 28 #include <linux/pm_qos.h> 29 #include <linux/pm_runtime.h> 30 31 #include <acpi/acpi.h> 32 #include <acpi/acpi_bus.h> 33 #include <acpi/acpi_drivers.h> 34 35 #include "internal.h" 36 37 #define _COMPONENT ACPI_POWER_COMPONENT 38 ACPI_MODULE_NAME("device_pm"); 39 40 /** 41 * acpi_power_state_string - String representation of ACPI device power state. 42 * @state: ACPI device power state to return the string representation of. 43 */ 44 const char *acpi_power_state_string(int state) 45 { 46 switch (state) { 47 case ACPI_STATE_D0: 48 return "D0"; 49 case ACPI_STATE_D1: 50 return "D1"; 51 case ACPI_STATE_D2: 52 return "D2"; 53 case ACPI_STATE_D3_HOT: 54 return "D3hot"; 55 case ACPI_STATE_D3_COLD: 56 return "D3cold"; 57 default: 58 return "(unknown)"; 59 } 60 } 61 62 /** 63 * acpi_device_get_power - Get power state of an ACPI device. 64 * @device: Device to get the power state of. 65 * @state: Place to store the power state of the device. 66 * 67 * This function does not update the device's power.state field, but it may 68 * update its parent's power.state field (when the parent's power state is 69 * unknown and the device's power state turns out to be D0). 70 */ 71 int acpi_device_get_power(struct acpi_device *device, int *state) 72 { 73 int result = ACPI_STATE_UNKNOWN; 74 75 if (!device || !state) 76 return -EINVAL; 77 78 if (!device->flags.power_manageable) { 79 /* TBD: Non-recursive algorithm for walking up hierarchy. */ 80 *state = device->parent ? 81 device->parent->power.state : ACPI_STATE_D0; 82 goto out; 83 } 84 85 /* 86 * Get the device's power state from power resources settings and _PSC, 87 * if available. 88 */ 89 if (device->power.flags.power_resources) { 90 int error = acpi_power_get_inferred_state(device, &result); 91 if (error) 92 return error; 93 } 94 if (device->power.flags.explicit_get) { 95 acpi_handle handle = device->handle; 96 unsigned long long psc; 97 acpi_status status; 98 99 status = acpi_evaluate_integer(handle, "_PSC", NULL, &psc); 100 if (ACPI_FAILURE(status)) 101 return -ENODEV; 102 103 /* 104 * The power resources settings may indicate a power state 105 * shallower than the actual power state of the device. 106 * 107 * Moreover, on systems predating ACPI 4.0, if the device 108 * doesn't depend on any power resources and _PSC returns 3, 109 * that means "power off". We need to maintain compatibility 110 * with those systems. 111 */ 112 if (psc > result && psc < ACPI_STATE_D3_COLD) 113 result = psc; 114 else if (result == ACPI_STATE_UNKNOWN) 115 result = psc > ACPI_STATE_D2 ? ACPI_STATE_D3_COLD : psc; 116 } 117 118 /* 119 * If we were unsure about the device parent's power state up to this 120 * point, the fact that the device is in D0 implies that the parent has 121 * to be in D0 too. 122 */ 123 if (device->parent && device->parent->power.state == ACPI_STATE_UNKNOWN 124 && result == ACPI_STATE_D0) 125 device->parent->power.state = ACPI_STATE_D0; 126 127 *state = result; 128 129 out: 130 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is %s\n", 131 device->pnp.bus_id, acpi_power_state_string(*state))); 132 133 return 0; 134 } 135 136 static int acpi_dev_pm_explicit_set(struct acpi_device *adev, int state) 137 { 138 if (adev->power.states[state].flags.explicit_set) { 139 char method[5] = { '_', 'P', 'S', '0' + state, '\0' }; 140 acpi_status status; 141 142 status = acpi_evaluate_object(adev->handle, method, NULL, NULL); 143 if (ACPI_FAILURE(status)) 144 return -ENODEV; 145 } 146 return 0; 147 } 148 149 /** 150 * acpi_device_set_power - Set power state of an ACPI device. 151 * @device: Device to set the power state of. 152 * @state: New power state to set. 153 * 154 * Callers must ensure that the device is power manageable before using this 155 * function. 156 */ 157 int acpi_device_set_power(struct acpi_device *device, int state) 158 { 159 int result = 0; 160 bool cut_power = false; 161 162 if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3_COLD)) 163 return -EINVAL; 164 165 /* Make sure this is a valid target state */ 166 167 if (state == device->power.state) { 168 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at %s\n", 169 acpi_power_state_string(state))); 170 return 0; 171 } 172 173 if (!device->power.states[state].flags.valid) { 174 printk(KERN_WARNING PREFIX "Device does not support %s\n", 175 acpi_power_state_string(state)); 176 return -ENODEV; 177 } 178 if (device->parent && (state < device->parent->power.state)) { 179 printk(KERN_WARNING PREFIX 180 "Cannot set device to a higher-powered" 181 " state than parent\n"); 182 return -ENODEV; 183 } 184 185 /* For D3cold we should first transition into D3hot. */ 186 if (state == ACPI_STATE_D3_COLD 187 && device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible) { 188 state = ACPI_STATE_D3_HOT; 189 cut_power = true; 190 } 191 192 if (state < device->power.state && state != ACPI_STATE_D0 193 && device->power.state >= ACPI_STATE_D3_HOT) { 194 printk(KERN_WARNING PREFIX 195 "Cannot transition to non-D0 state from D3\n"); 196 return -ENODEV; 197 } 198 199 /* 200 * Transition Power 201 * ---------------- 202 * In accordance with the ACPI specification first apply power (via 203 * power resources) and then evalute _PSx. 204 */ 205 if (device->power.flags.power_resources) { 206 result = acpi_power_transition(device, state); 207 if (result) 208 goto end; 209 } 210 result = acpi_dev_pm_explicit_set(device, state); 211 if (result) 212 goto end; 213 214 if (cut_power) { 215 device->power.state = state; 216 state = ACPI_STATE_D3_COLD; 217 result = acpi_power_transition(device, state); 218 } 219 220 end: 221 if (result) { 222 printk(KERN_WARNING PREFIX 223 "Device [%s] failed to transition to %s\n", 224 device->pnp.bus_id, 225 acpi_power_state_string(state)); 226 } else { 227 device->power.state = state; 228 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 229 "Device [%s] transitioned to %s\n", 230 device->pnp.bus_id, 231 acpi_power_state_string(state))); 232 } 233 234 return result; 235 } 236 EXPORT_SYMBOL(acpi_device_set_power); 237 238 int acpi_bus_set_power(acpi_handle handle, int state) 239 { 240 struct acpi_device *device; 241 int result; 242 243 result = acpi_bus_get_device(handle, &device); 244 if (result) 245 return result; 246 247 if (!device->flags.power_manageable) { 248 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 249 "Device [%s] is not power manageable\n", 250 dev_name(&device->dev))); 251 return -ENODEV; 252 } 253 254 return acpi_device_set_power(device, state); 255 } 256 EXPORT_SYMBOL(acpi_bus_set_power); 257 258 int acpi_bus_init_power(struct acpi_device *device) 259 { 260 int state; 261 int result; 262 263 if (!device) 264 return -EINVAL; 265 266 device->power.state = ACPI_STATE_UNKNOWN; 267 268 result = acpi_device_get_power(device, &state); 269 if (result) 270 return result; 271 272 if (state < ACPI_STATE_D3_COLD && device->power.flags.power_resources) { 273 result = acpi_power_on_resources(device, state); 274 if (result) 275 return result; 276 277 result = acpi_dev_pm_explicit_set(device, state); 278 if (result) 279 return result; 280 } else if (state == ACPI_STATE_UNKNOWN) { 281 /* 282 * No power resources and missing _PSC? Cross fingers and make 283 * it D0 in hope that this is what the BIOS put the device into. 284 * [We tried to force D0 here by executing _PS0, but that broke 285 * Toshiba P870-303 in a nasty way.] 286 */ 287 state = ACPI_STATE_D0; 288 } 289 device->power.state = state; 290 return 0; 291 } 292 293 /** 294 * acpi_device_fix_up_power - Force device with missing _PSC into D0. 295 * @device: Device object whose power state is to be fixed up. 296 * 297 * Devices without power resources and _PSC, but having _PS0 and _PS3 defined, 298 * are assumed to be put into D0 by the BIOS. However, in some cases that may 299 * not be the case and this function should be used then. 300 */ 301 int acpi_device_fix_up_power(struct acpi_device *device) 302 { 303 int ret = 0; 304 305 if (!device->power.flags.power_resources 306 && !device->power.flags.explicit_get 307 && device->power.state == ACPI_STATE_D0) 308 ret = acpi_dev_pm_explicit_set(device, ACPI_STATE_D0); 309 310 return ret; 311 } 312 313 int acpi_bus_update_power(acpi_handle handle, int *state_p) 314 { 315 struct acpi_device *device; 316 int state; 317 int result; 318 319 result = acpi_bus_get_device(handle, &device); 320 if (result) 321 return result; 322 323 result = acpi_device_get_power(device, &state); 324 if (result) 325 return result; 326 327 if (state == ACPI_STATE_UNKNOWN) 328 state = ACPI_STATE_D0; 329 330 result = acpi_device_set_power(device, state); 331 if (!result && state_p) 332 *state_p = state; 333 334 return result; 335 } 336 EXPORT_SYMBOL_GPL(acpi_bus_update_power); 337 338 bool acpi_bus_power_manageable(acpi_handle handle) 339 { 340 struct acpi_device *device; 341 int result; 342 343 result = acpi_bus_get_device(handle, &device); 344 return result ? false : device->flags.power_manageable; 345 } 346 EXPORT_SYMBOL(acpi_bus_power_manageable); 347 348 #ifdef CONFIG_PM 349 static DEFINE_MUTEX(acpi_pm_notifier_lock); 350 351 /** 352 * acpi_add_pm_notifier - Register PM notifier for given ACPI device. 353 * @adev: ACPI device to add the notifier for. 354 * @context: Context information to pass to the notifier routine. 355 * 356 * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of 357 * PM wakeup events. For example, wakeup events may be generated for bridges 358 * if one of the devices below the bridge is signaling wakeup, even if the 359 * bridge itself doesn't have a wakeup GPE associated with it. 360 */ 361 acpi_status acpi_add_pm_notifier(struct acpi_device *adev, 362 acpi_notify_handler handler, void *context) 363 { 364 acpi_status status = AE_ALREADY_EXISTS; 365 366 mutex_lock(&acpi_pm_notifier_lock); 367 368 if (adev->wakeup.flags.notifier_present) 369 goto out; 370 371 status = acpi_install_notify_handler(adev->handle, 372 ACPI_SYSTEM_NOTIFY, 373 handler, context); 374 if (ACPI_FAILURE(status)) 375 goto out; 376 377 adev->wakeup.flags.notifier_present = true; 378 379 out: 380 mutex_unlock(&acpi_pm_notifier_lock); 381 return status; 382 } 383 384 /** 385 * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device. 386 * @adev: ACPI device to remove the notifier from. 387 */ 388 acpi_status acpi_remove_pm_notifier(struct acpi_device *adev, 389 acpi_notify_handler handler) 390 { 391 acpi_status status = AE_BAD_PARAMETER; 392 393 mutex_lock(&acpi_pm_notifier_lock); 394 395 if (!adev->wakeup.flags.notifier_present) 396 goto out; 397 398 status = acpi_remove_notify_handler(adev->handle, 399 ACPI_SYSTEM_NOTIFY, 400 handler); 401 if (ACPI_FAILURE(status)) 402 goto out; 403 404 adev->wakeup.flags.notifier_present = false; 405 406 out: 407 mutex_unlock(&acpi_pm_notifier_lock); 408 return status; 409 } 410 411 bool acpi_bus_can_wakeup(acpi_handle handle) 412 { 413 struct acpi_device *device; 414 int result; 415 416 result = acpi_bus_get_device(handle, &device); 417 return result ? false : device->wakeup.flags.valid; 418 } 419 EXPORT_SYMBOL(acpi_bus_can_wakeup); 420 421 /** 422 * acpi_device_power_state - Get preferred power state of ACPI device. 423 * @dev: Device whose preferred target power state to return. 424 * @adev: ACPI device node corresponding to @dev. 425 * @target_state: System state to match the resultant device state. 426 * @d_max_in: Deepest low-power state to take into consideration. 427 * @d_min_p: Location to store the upper limit of the allowed states range. 428 * Return value: Preferred power state of the device on success, -ENODEV 429 * (if there's no 'struct acpi_device' for @dev) or -EINVAL on failure 430 * 431 * Find the lowest power (highest number) ACPI device power state that the 432 * device can be in while the system is in the state represented by 433 * @target_state. If @d_min_p is set, the highest power (lowest number) device 434 * power state that @dev can be in for the given system sleep state is stored 435 * at the location pointed to by it. 436 * 437 * Callers must ensure that @dev and @adev are valid pointers and that @adev 438 * actually corresponds to @dev before using this function. 439 */ 440 int acpi_device_power_state(struct device *dev, struct acpi_device *adev, 441 u32 target_state, int d_max_in, int *d_min_p) 442 { 443 char acpi_method[] = "_SxD"; 444 unsigned long long d_min, d_max; 445 bool wakeup = false; 446 447 if (d_max_in < ACPI_STATE_D0 || d_max_in > ACPI_STATE_D3) 448 return -EINVAL; 449 450 if (d_max_in > ACPI_STATE_D3_HOT) { 451 enum pm_qos_flags_status stat; 452 453 stat = dev_pm_qos_flags(dev, PM_QOS_FLAG_NO_POWER_OFF); 454 if (stat == PM_QOS_FLAGS_ALL) 455 d_max_in = ACPI_STATE_D3_HOT; 456 } 457 458 acpi_method[2] = '0' + target_state; 459 /* 460 * If the sleep state is S0, the lowest limit from ACPI is D3, 461 * but if the device has _S0W, we will use the value from _S0W 462 * as the lowest limit from ACPI. Finally, we will constrain 463 * the lowest limit with the specified one. 464 */ 465 d_min = ACPI_STATE_D0; 466 d_max = ACPI_STATE_D3; 467 468 /* 469 * If present, _SxD methods return the minimum D-state (highest power 470 * state) we can use for the corresponding S-states. Otherwise, the 471 * minimum D-state is D0 (ACPI 3.x). 472 * 473 * NOTE: We rely on acpi_evaluate_integer() not clobbering the integer 474 * provided -- that's our fault recovery, we ignore retval. 475 */ 476 if (target_state > ACPI_STATE_S0) { 477 acpi_evaluate_integer(adev->handle, acpi_method, NULL, &d_min); 478 wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid 479 && adev->wakeup.sleep_state >= target_state; 480 } else if (dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) != 481 PM_QOS_FLAGS_NONE) { 482 wakeup = adev->wakeup.flags.valid; 483 } 484 485 /* 486 * If _PRW says we can wake up the system from the target sleep state, 487 * the D-state returned by _SxD is sufficient for that (we assume a 488 * wakeup-aware driver if wake is set). Still, if _SxW exists 489 * (ACPI 3.x), it should return the maximum (lowest power) D-state that 490 * can wake the system. _S0W may be valid, too. 491 */ 492 if (wakeup) { 493 acpi_status status; 494 495 acpi_method[3] = 'W'; 496 status = acpi_evaluate_integer(adev->handle, acpi_method, NULL, 497 &d_max); 498 if (ACPI_FAILURE(status)) { 499 if (target_state != ACPI_STATE_S0 || 500 status != AE_NOT_FOUND) 501 d_max = d_min; 502 } else if (d_max < d_min) { 503 /* Warn the user of the broken DSDT */ 504 printk(KERN_WARNING "ACPI: Wrong value from %s\n", 505 acpi_method); 506 /* Sanitize it */ 507 d_min = d_max; 508 } 509 } 510 511 if (d_max_in < d_min) 512 return -EINVAL; 513 if (d_min_p) 514 *d_min_p = d_min; 515 /* constrain d_max with specified lowest limit (max number) */ 516 if (d_max > d_max_in) { 517 for (d_max = d_max_in; d_max > d_min; d_max--) { 518 if (adev->power.states[d_max].flags.valid) 519 break; 520 } 521 } 522 return d_max; 523 } 524 EXPORT_SYMBOL_GPL(acpi_device_power_state); 525 526 /** 527 * acpi_pm_device_sleep_state - Get preferred power state of ACPI device. 528 * @dev: Device whose preferred target power state to return. 529 * @d_min_p: Location to store the upper limit of the allowed states range. 530 * @d_max_in: Deepest low-power state to take into consideration. 531 * Return value: Preferred power state of the device on success, -ENODEV 532 * (if there's no 'struct acpi_device' for @dev) or -EINVAL on failure 533 * 534 * The caller must ensure that @dev is valid before using this function. 535 */ 536 int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in) 537 { 538 acpi_handle handle = DEVICE_ACPI_HANDLE(dev); 539 struct acpi_device *adev; 540 541 if (!handle || acpi_bus_get_device(handle, &adev)) { 542 dev_dbg(dev, "ACPI handle without context in %s!\n", __func__); 543 return -ENODEV; 544 } 545 546 return acpi_device_power_state(dev, adev, acpi_target_system_state(), 547 d_max_in, d_min_p); 548 } 549 EXPORT_SYMBOL(acpi_pm_device_sleep_state); 550 551 #ifdef CONFIG_PM_RUNTIME 552 /** 553 * acpi_wakeup_device - Wakeup notification handler for ACPI devices. 554 * @handle: ACPI handle of the device the notification is for. 555 * @event: Type of the signaled event. 556 * @context: Device corresponding to @handle. 557 */ 558 static void acpi_wakeup_device(acpi_handle handle, u32 event, void *context) 559 { 560 struct device *dev = context; 561 562 if (event == ACPI_NOTIFY_DEVICE_WAKE && dev) { 563 pm_wakeup_event(dev, 0); 564 pm_runtime_resume(dev); 565 } 566 } 567 568 /** 569 * __acpi_device_run_wake - Enable/disable runtime remote wakeup for device. 570 * @adev: ACPI device to enable/disable the remote wakeup for. 571 * @enable: Whether to enable or disable the wakeup functionality. 572 * 573 * Enable/disable the GPE associated with @adev so that it can generate 574 * wakeup signals for the device in response to external (remote) events and 575 * enable/disable device wakeup power. 576 * 577 * Callers must ensure that @adev is a valid ACPI device node before executing 578 * this function. 579 */ 580 int __acpi_device_run_wake(struct acpi_device *adev, bool enable) 581 { 582 struct acpi_device_wakeup *wakeup = &adev->wakeup; 583 584 if (enable) { 585 acpi_status res; 586 int error; 587 588 error = acpi_enable_wakeup_device_power(adev, ACPI_STATE_S0); 589 if (error) 590 return error; 591 592 res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number); 593 if (ACPI_FAILURE(res)) { 594 acpi_disable_wakeup_device_power(adev); 595 return -EIO; 596 } 597 } else { 598 acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number); 599 acpi_disable_wakeup_device_power(adev); 600 } 601 return 0; 602 } 603 604 /** 605 * acpi_pm_device_run_wake - Enable/disable remote wakeup for given device. 606 * @dev: Device to enable/disable the platform to wake up. 607 * @enable: Whether to enable or disable the wakeup functionality. 608 */ 609 int acpi_pm_device_run_wake(struct device *phys_dev, bool enable) 610 { 611 struct acpi_device *adev; 612 acpi_handle handle; 613 614 if (!device_run_wake(phys_dev)) 615 return -EINVAL; 616 617 handle = DEVICE_ACPI_HANDLE(phys_dev); 618 if (!handle || acpi_bus_get_device(handle, &adev)) { 619 dev_dbg(phys_dev, "ACPI handle without context in %s!\n", 620 __func__); 621 return -ENODEV; 622 } 623 624 return __acpi_device_run_wake(adev, enable); 625 } 626 EXPORT_SYMBOL(acpi_pm_device_run_wake); 627 #else 628 static inline void acpi_wakeup_device(acpi_handle handle, u32 event, 629 void *context) {} 630 #endif /* CONFIG_PM_RUNTIME */ 631 632 #ifdef CONFIG_PM_SLEEP 633 /** 634 * __acpi_device_sleep_wake - Enable or disable device to wake up the system. 635 * @dev: Device to enable/desible to wake up the system. 636 * @target_state: System state the device is supposed to wake up from. 637 * @enable: Whether to enable or disable @dev to wake up the system. 638 */ 639 int __acpi_device_sleep_wake(struct acpi_device *adev, u32 target_state, 640 bool enable) 641 { 642 return enable ? 643 acpi_enable_wakeup_device_power(adev, target_state) : 644 acpi_disable_wakeup_device_power(adev); 645 } 646 647 /** 648 * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system. 649 * @dev: Device to enable/desible to wake up the system from sleep states. 650 * @enable: Whether to enable or disable @dev to wake up the system. 651 */ 652 int acpi_pm_device_sleep_wake(struct device *dev, bool enable) 653 { 654 acpi_handle handle; 655 struct acpi_device *adev; 656 int error; 657 658 if (!device_can_wakeup(dev)) 659 return -EINVAL; 660 661 handle = DEVICE_ACPI_HANDLE(dev); 662 if (!handle || acpi_bus_get_device(handle, &adev)) { 663 dev_dbg(dev, "ACPI handle without context in %s!\n", __func__); 664 return -ENODEV; 665 } 666 667 error = __acpi_device_sleep_wake(adev, acpi_target_system_state(), 668 enable); 669 if (!error) 670 dev_info(dev, "System wakeup %s by ACPI\n", 671 enable ? "enabled" : "disabled"); 672 673 return error; 674 } 675 #endif /* CONFIG_PM_SLEEP */ 676 677 /** 678 * acpi_dev_pm_get_node - Get ACPI device node for the given physical device. 679 * @dev: Device to get the ACPI node for. 680 */ 681 struct acpi_device *acpi_dev_pm_get_node(struct device *dev) 682 { 683 acpi_handle handle = DEVICE_ACPI_HANDLE(dev); 684 struct acpi_device *adev; 685 686 return handle && !acpi_bus_get_device(handle, &adev) ? adev : NULL; 687 } 688 689 /** 690 * acpi_dev_pm_low_power - Put ACPI device into a low-power state. 691 * @dev: Device to put into a low-power state. 692 * @adev: ACPI device node corresponding to @dev. 693 * @system_state: System state to choose the device state for. 694 */ 695 static int acpi_dev_pm_low_power(struct device *dev, struct acpi_device *adev, 696 u32 system_state) 697 { 698 int power_state; 699 700 if (!acpi_device_power_manageable(adev)) 701 return 0; 702 703 power_state = acpi_device_power_state(dev, adev, system_state, 704 ACPI_STATE_D3, NULL); 705 if (power_state < ACPI_STATE_D0 || power_state > ACPI_STATE_D3) 706 return -EIO; 707 708 return acpi_device_set_power(adev, power_state); 709 } 710 711 /** 712 * acpi_dev_pm_full_power - Put ACPI device into the full-power state. 713 * @adev: ACPI device node to put into the full-power state. 714 */ 715 static int acpi_dev_pm_full_power(struct acpi_device *adev) 716 { 717 return acpi_device_power_manageable(adev) ? 718 acpi_device_set_power(adev, ACPI_STATE_D0) : 0; 719 } 720 721 #ifdef CONFIG_PM_RUNTIME 722 /** 723 * acpi_dev_runtime_suspend - Put device into a low-power state using ACPI. 724 * @dev: Device to put into a low-power state. 725 * 726 * Put the given device into a runtime low-power state using the standard ACPI 727 * mechanism. Set up remote wakeup if desired, choose the state to put the 728 * device into (this checks if remote wakeup is expected to work too), and set 729 * the power state of the device. 730 */ 731 int acpi_dev_runtime_suspend(struct device *dev) 732 { 733 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 734 bool remote_wakeup; 735 int error; 736 737 if (!adev) 738 return 0; 739 740 remote_wakeup = dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) > 741 PM_QOS_FLAGS_NONE; 742 error = __acpi_device_run_wake(adev, remote_wakeup); 743 if (remote_wakeup && error) 744 return -EAGAIN; 745 746 error = acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); 747 if (error) 748 __acpi_device_run_wake(adev, false); 749 750 return error; 751 } 752 EXPORT_SYMBOL_GPL(acpi_dev_runtime_suspend); 753 754 /** 755 * acpi_dev_runtime_resume - Put device into the full-power state using ACPI. 756 * @dev: Device to put into the full-power state. 757 * 758 * Put the given device into the full-power state using the standard ACPI 759 * mechanism at run time. Set the power state of the device to ACPI D0 and 760 * disable remote wakeup. 761 */ 762 int acpi_dev_runtime_resume(struct device *dev) 763 { 764 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 765 int error; 766 767 if (!adev) 768 return 0; 769 770 error = acpi_dev_pm_full_power(adev); 771 __acpi_device_run_wake(adev, false); 772 return error; 773 } 774 EXPORT_SYMBOL_GPL(acpi_dev_runtime_resume); 775 776 /** 777 * acpi_subsys_runtime_suspend - Suspend device using ACPI. 778 * @dev: Device to suspend. 779 * 780 * Carry out the generic runtime suspend procedure for @dev and use ACPI to put 781 * it into a runtime low-power state. 782 */ 783 int acpi_subsys_runtime_suspend(struct device *dev) 784 { 785 int ret = pm_generic_runtime_suspend(dev); 786 return ret ? ret : acpi_dev_runtime_suspend(dev); 787 } 788 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_suspend); 789 790 /** 791 * acpi_subsys_runtime_resume - Resume device using ACPI. 792 * @dev: Device to Resume. 793 * 794 * Use ACPI to put the given device into the full-power state and carry out the 795 * generic runtime resume procedure for it. 796 */ 797 int acpi_subsys_runtime_resume(struct device *dev) 798 { 799 int ret = acpi_dev_runtime_resume(dev); 800 return ret ? ret : pm_generic_runtime_resume(dev); 801 } 802 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_resume); 803 #endif /* CONFIG_PM_RUNTIME */ 804 805 #ifdef CONFIG_PM_SLEEP 806 /** 807 * acpi_dev_suspend_late - Put device into a low-power state using ACPI. 808 * @dev: Device to put into a low-power state. 809 * 810 * Put the given device into a low-power state during system transition to a 811 * sleep state using the standard ACPI mechanism. Set up system wakeup if 812 * desired, choose the state to put the device into (this checks if system 813 * wakeup is expected to work too), and set the power state of the device. 814 */ 815 int acpi_dev_suspend_late(struct device *dev) 816 { 817 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 818 u32 target_state; 819 bool wakeup; 820 int error; 821 822 if (!adev) 823 return 0; 824 825 target_state = acpi_target_system_state(); 826 wakeup = device_may_wakeup(dev); 827 error = __acpi_device_sleep_wake(adev, target_state, wakeup); 828 if (wakeup && error) 829 return error; 830 831 error = acpi_dev_pm_low_power(dev, adev, target_state); 832 if (error) 833 __acpi_device_sleep_wake(adev, ACPI_STATE_UNKNOWN, false); 834 835 return error; 836 } 837 EXPORT_SYMBOL_GPL(acpi_dev_suspend_late); 838 839 /** 840 * acpi_dev_resume_early - Put device into the full-power state using ACPI. 841 * @dev: Device to put into the full-power state. 842 * 843 * Put the given device into the full-power state using the standard ACPI 844 * mechanism during system transition to the working state. Set the power 845 * state of the device to ACPI D0 and disable remote wakeup. 846 */ 847 int acpi_dev_resume_early(struct device *dev) 848 { 849 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 850 int error; 851 852 if (!adev) 853 return 0; 854 855 error = acpi_dev_pm_full_power(adev); 856 __acpi_device_sleep_wake(adev, ACPI_STATE_UNKNOWN, false); 857 return error; 858 } 859 EXPORT_SYMBOL_GPL(acpi_dev_resume_early); 860 861 /** 862 * acpi_subsys_prepare - Prepare device for system transition to a sleep state. 863 * @dev: Device to prepare. 864 */ 865 int acpi_subsys_prepare(struct device *dev) 866 { 867 /* 868 * Follow PCI and resume devices suspended at run time before running 869 * their system suspend callbacks. 870 */ 871 pm_runtime_resume(dev); 872 return pm_generic_prepare(dev); 873 } 874 EXPORT_SYMBOL_GPL(acpi_subsys_prepare); 875 876 /** 877 * acpi_subsys_suspend_late - Suspend device using ACPI. 878 * @dev: Device to suspend. 879 * 880 * Carry out the generic late suspend procedure for @dev and use ACPI to put 881 * it into a low-power state during system transition into a sleep state. 882 */ 883 int acpi_subsys_suspend_late(struct device *dev) 884 { 885 int ret = pm_generic_suspend_late(dev); 886 return ret ? ret : acpi_dev_suspend_late(dev); 887 } 888 EXPORT_SYMBOL_GPL(acpi_subsys_suspend_late); 889 890 /** 891 * acpi_subsys_resume_early - Resume device using ACPI. 892 * @dev: Device to Resume. 893 * 894 * Use ACPI to put the given device into the full-power state and carry out the 895 * generic early resume procedure for it during system transition into the 896 * working state. 897 */ 898 int acpi_subsys_resume_early(struct device *dev) 899 { 900 int ret = acpi_dev_resume_early(dev); 901 return ret ? ret : pm_generic_resume_early(dev); 902 } 903 EXPORT_SYMBOL_GPL(acpi_subsys_resume_early); 904 #endif /* CONFIG_PM_SLEEP */ 905 906 static struct dev_pm_domain acpi_general_pm_domain = { 907 .ops = { 908 #ifdef CONFIG_PM_RUNTIME 909 .runtime_suspend = acpi_subsys_runtime_suspend, 910 .runtime_resume = acpi_subsys_runtime_resume, 911 .runtime_idle = pm_generic_runtime_idle, 912 #endif 913 #ifdef CONFIG_PM_SLEEP 914 .prepare = acpi_subsys_prepare, 915 .suspend_late = acpi_subsys_suspend_late, 916 .resume_early = acpi_subsys_resume_early, 917 .poweroff_late = acpi_subsys_suspend_late, 918 .restore_early = acpi_subsys_resume_early, 919 #endif 920 }, 921 }; 922 923 /** 924 * acpi_dev_pm_attach - Prepare device for ACPI power management. 925 * @dev: Device to prepare. 926 * @power_on: Whether or not to power on the device. 927 * 928 * If @dev has a valid ACPI handle that has a valid struct acpi_device object 929 * attached to it, install a wakeup notification handler for the device and 930 * add it to the general ACPI PM domain. If @power_on is set, the device will 931 * be put into the ACPI D0 state before the function returns. 932 * 933 * This assumes that the @dev's bus type uses generic power management callbacks 934 * (or doesn't use any power management callbacks at all). 935 * 936 * Callers must ensure proper synchronization of this function with power 937 * management callbacks. 938 */ 939 int acpi_dev_pm_attach(struct device *dev, bool power_on) 940 { 941 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 942 943 if (!adev) 944 return -ENODEV; 945 946 if (dev->pm_domain) 947 return -EEXIST; 948 949 acpi_add_pm_notifier(adev, acpi_wakeup_device, dev); 950 dev->pm_domain = &acpi_general_pm_domain; 951 if (power_on) { 952 acpi_dev_pm_full_power(adev); 953 __acpi_device_run_wake(adev, false); 954 } 955 return 0; 956 } 957 EXPORT_SYMBOL_GPL(acpi_dev_pm_attach); 958 959 /** 960 * acpi_dev_pm_detach - Remove ACPI power management from the device. 961 * @dev: Device to take care of. 962 * @power_off: Whether or not to try to remove power from the device. 963 * 964 * Remove the device from the general ACPI PM domain and remove its wakeup 965 * notifier. If @power_off is set, additionally remove power from the device if 966 * possible. 967 * 968 * Callers must ensure proper synchronization of this function with power 969 * management callbacks. 970 */ 971 void acpi_dev_pm_detach(struct device *dev, bool power_off) 972 { 973 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 974 975 if (adev && dev->pm_domain == &acpi_general_pm_domain) { 976 dev->pm_domain = NULL; 977 acpi_remove_pm_notifier(adev, acpi_wakeup_device); 978 if (power_off) { 979 /* 980 * If the device's PM QoS resume latency limit or flags 981 * have been exposed to user space, they have to be 982 * hidden at this point, so that they don't affect the 983 * choice of the low-power state to put the device into. 984 */ 985 dev_pm_qos_hide_latency_limit(dev); 986 dev_pm_qos_hide_flags(dev); 987 __acpi_device_run_wake(adev, false); 988 acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); 989 } 990 } 991 } 992 EXPORT_SYMBOL_GPL(acpi_dev_pm_detach); 993 994 /** 995 * acpi_dev_pm_add_dependent - Add physical device depending for PM. 996 * @handle: Handle of ACPI device node. 997 * @depdev: Device depending on that node for PM. 998 */ 999 void acpi_dev_pm_add_dependent(acpi_handle handle, struct device *depdev) 1000 { 1001 struct acpi_device_physical_node *dep; 1002 struct acpi_device *adev; 1003 1004 if (!depdev || acpi_bus_get_device(handle, &adev)) 1005 return; 1006 1007 mutex_lock(&adev->physical_node_lock); 1008 1009 list_for_each_entry(dep, &adev->power_dependent, node) 1010 if (dep->dev == depdev) 1011 goto out; 1012 1013 dep = kzalloc(sizeof(*dep), GFP_KERNEL); 1014 if (dep) { 1015 dep->dev = depdev; 1016 list_add_tail(&dep->node, &adev->power_dependent); 1017 } 1018 1019 out: 1020 mutex_unlock(&adev->physical_node_lock); 1021 } 1022 EXPORT_SYMBOL_GPL(acpi_dev_pm_add_dependent); 1023 1024 /** 1025 * acpi_dev_pm_remove_dependent - Remove physical device depending for PM. 1026 * @handle: Handle of ACPI device node. 1027 * @depdev: Device depending on that node for PM. 1028 */ 1029 void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev) 1030 { 1031 struct acpi_device_physical_node *dep; 1032 struct acpi_device *adev; 1033 1034 if (!depdev || acpi_bus_get_device(handle, &adev)) 1035 return; 1036 1037 mutex_lock(&adev->physical_node_lock); 1038 1039 list_for_each_entry(dep, &adev->power_dependent, node) 1040 if (dep->dev == depdev) { 1041 list_del(&dep->node); 1042 kfree(dep); 1043 break; 1044 } 1045 1046 mutex_unlock(&adev->physical_node_lock); 1047 } 1048 EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent); 1049 #endif /* CONFIG_PM */ 1050