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