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 result = acpi_device_set_power(device, state); 330 if (result) 331 return result; 332 } else { 333 if (device->power.flags.power_resources) { 334 /* 335 * We don't need to really switch the state, bu we need 336 * to update the power resources' reference counters. 337 */ 338 result = acpi_power_transition(device, state); 339 if (result) 340 return result; 341 } 342 device->power.state = state; 343 } 344 if (state_p) 345 *state_p = state; 346 347 return 0; 348 } 349 EXPORT_SYMBOL_GPL(acpi_bus_update_power); 350 351 bool acpi_bus_power_manageable(acpi_handle handle) 352 { 353 struct acpi_device *device; 354 int result; 355 356 result = acpi_bus_get_device(handle, &device); 357 return result ? false : device->flags.power_manageable; 358 } 359 EXPORT_SYMBOL(acpi_bus_power_manageable); 360 361 #ifdef CONFIG_PM 362 static DEFINE_MUTEX(acpi_pm_notifier_lock); 363 364 /** 365 * acpi_add_pm_notifier - Register PM notifier for given ACPI device. 366 * @adev: ACPI device to add the notifier for. 367 * @context: Context information to pass to the notifier routine. 368 * 369 * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of 370 * PM wakeup events. For example, wakeup events may be generated for bridges 371 * if one of the devices below the bridge is signaling wakeup, even if the 372 * bridge itself doesn't have a wakeup GPE associated with it. 373 */ 374 acpi_status acpi_add_pm_notifier(struct acpi_device *adev, 375 acpi_notify_handler handler, void *context) 376 { 377 acpi_status status = AE_ALREADY_EXISTS; 378 379 mutex_lock(&acpi_pm_notifier_lock); 380 381 if (adev->wakeup.flags.notifier_present) 382 goto out; 383 384 status = acpi_install_notify_handler(adev->handle, 385 ACPI_SYSTEM_NOTIFY, 386 handler, context); 387 if (ACPI_FAILURE(status)) 388 goto out; 389 390 adev->wakeup.flags.notifier_present = true; 391 392 out: 393 mutex_unlock(&acpi_pm_notifier_lock); 394 return status; 395 } 396 397 /** 398 * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device. 399 * @adev: ACPI device to remove the notifier from. 400 */ 401 acpi_status acpi_remove_pm_notifier(struct acpi_device *adev, 402 acpi_notify_handler handler) 403 { 404 acpi_status status = AE_BAD_PARAMETER; 405 406 mutex_lock(&acpi_pm_notifier_lock); 407 408 if (!adev->wakeup.flags.notifier_present) 409 goto out; 410 411 status = acpi_remove_notify_handler(adev->handle, 412 ACPI_SYSTEM_NOTIFY, 413 handler); 414 if (ACPI_FAILURE(status)) 415 goto out; 416 417 adev->wakeup.flags.notifier_present = false; 418 419 out: 420 mutex_unlock(&acpi_pm_notifier_lock); 421 return status; 422 } 423 424 bool acpi_bus_can_wakeup(acpi_handle handle) 425 { 426 struct acpi_device *device; 427 int result; 428 429 result = acpi_bus_get_device(handle, &device); 430 return result ? false : device->wakeup.flags.valid; 431 } 432 EXPORT_SYMBOL(acpi_bus_can_wakeup); 433 434 /** 435 * acpi_dev_pm_get_state - Get preferred power state of ACPI device. 436 * @dev: Device whose preferred target power state to return. 437 * @adev: ACPI device node corresponding to @dev. 438 * @target_state: System state to match the resultant device state. 439 * @d_min_p: Location to store the highest power state available to the device. 440 * @d_max_p: Location to store the lowest power state available to the device. 441 * 442 * Find the lowest power (highest number) and highest power (lowest number) ACPI 443 * device power states that the device can be in while the system is in the 444 * state represented by @target_state. Store the integer numbers representing 445 * those stats in the memory locations pointed to by @d_max_p and @d_min_p, 446 * respectively. 447 * 448 * Callers must ensure that @dev and @adev are valid pointers and that @adev 449 * actually corresponds to @dev before using this function. 450 * 451 * Returns 0 on success or -ENODATA when one of the ACPI methods fails or 452 * returns a value that doesn't make sense. The memory locations pointed to by 453 * @d_max_p and @d_min_p are only modified on success. 454 */ 455 static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev, 456 u32 target_state, int *d_min_p, int *d_max_p) 457 { 458 char method[] = { '_', 'S', '0' + target_state, 'D', '\0' }; 459 acpi_handle handle = adev->handle; 460 unsigned long long ret; 461 int d_min, d_max; 462 bool wakeup = false; 463 acpi_status status; 464 465 /* 466 * If the system state is S0, the lowest power state the device can be 467 * in is D3cold, unless the device has _S0W and is supposed to signal 468 * wakeup, in which case the return value of _S0W has to be used as the 469 * lowest power state available to the device. 470 */ 471 d_min = ACPI_STATE_D0; 472 d_max = ACPI_STATE_D3_COLD; 473 474 /* 475 * If present, _SxD methods return the minimum D-state (highest power 476 * state) we can use for the corresponding S-states. Otherwise, the 477 * minimum D-state is D0 (ACPI 3.x). 478 */ 479 if (target_state > ACPI_STATE_S0) { 480 /* 481 * We rely on acpi_evaluate_integer() not clobbering the integer 482 * provided if AE_NOT_FOUND is returned. 483 */ 484 ret = d_min; 485 status = acpi_evaluate_integer(handle, method, NULL, &ret); 486 if ((ACPI_FAILURE(status) && status != AE_NOT_FOUND) 487 || ret > ACPI_STATE_D3_COLD) 488 return -ENODATA; 489 490 /* 491 * We need to handle legacy systems where D3hot and D3cold are 492 * the same and 3 is returned in both cases, so fall back to 493 * D3cold if D3hot is not a valid state. 494 */ 495 if (!adev->power.states[ret].flags.valid) { 496 if (ret == ACPI_STATE_D3_HOT) 497 ret = ACPI_STATE_D3_COLD; 498 else 499 return -ENODATA; 500 } 501 d_min = ret; 502 wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid 503 && adev->wakeup.sleep_state >= target_state; 504 } else if (dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) != 505 PM_QOS_FLAGS_NONE) { 506 wakeup = adev->wakeup.flags.valid; 507 } 508 509 /* 510 * If _PRW says we can wake up the system from the target sleep state, 511 * the D-state returned by _SxD is sufficient for that (we assume a 512 * wakeup-aware driver if wake is set). Still, if _SxW exists 513 * (ACPI 3.x), it should return the maximum (lowest power) D-state that 514 * can wake the system. _S0W may be valid, too. 515 */ 516 if (wakeup) { 517 method[3] = 'W'; 518 status = acpi_evaluate_integer(handle, method, NULL, &ret); 519 if (status == AE_NOT_FOUND) { 520 if (target_state > ACPI_STATE_S0) 521 d_max = d_min; 522 } else if (ACPI_SUCCESS(status) && ret <= ACPI_STATE_D3_COLD) { 523 /* Fall back to D3cold if ret is not a valid state. */ 524 if (!adev->power.states[ret].flags.valid) 525 ret = ACPI_STATE_D3_COLD; 526 527 d_max = ret > d_min ? ret : d_min; 528 } else { 529 return -ENODATA; 530 } 531 } 532 533 if (d_min_p) 534 *d_min_p = d_min; 535 536 if (d_max_p) 537 *d_max_p = d_max; 538 539 return 0; 540 } 541 542 /** 543 * acpi_pm_device_sleep_state - Get preferred power state of ACPI device. 544 * @dev: Device whose preferred target power state to return. 545 * @d_min_p: Location to store the upper limit of the allowed states range. 546 * @d_max_in: Deepest low-power state to take into consideration. 547 * Return value: Preferred power state of the device on success, -ENODEV 548 * if there's no 'struct acpi_device' for @dev, -EINVAL if @d_max_in is 549 * incorrect, or -ENODATA on ACPI method failure. 550 * 551 * The caller must ensure that @dev is valid before using this function. 552 */ 553 int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in) 554 { 555 acpi_handle handle = DEVICE_ACPI_HANDLE(dev); 556 struct acpi_device *adev; 557 int ret, d_min, d_max; 558 559 if (d_max_in < ACPI_STATE_D0 || d_max_in > ACPI_STATE_D3_COLD) 560 return -EINVAL; 561 562 if (d_max_in > ACPI_STATE_D3_HOT) { 563 enum pm_qos_flags_status stat; 564 565 stat = dev_pm_qos_flags(dev, PM_QOS_FLAG_NO_POWER_OFF); 566 if (stat == PM_QOS_FLAGS_ALL) 567 d_max_in = ACPI_STATE_D3_HOT; 568 } 569 570 if (!handle || acpi_bus_get_device(handle, &adev)) { 571 dev_dbg(dev, "ACPI handle without context in %s!\n", __func__); 572 return -ENODEV; 573 } 574 575 ret = acpi_dev_pm_get_state(dev, adev, acpi_target_system_state(), 576 &d_min, &d_max); 577 if (ret) 578 return ret; 579 580 if (d_max_in < d_min) 581 return -EINVAL; 582 583 if (d_max > d_max_in) { 584 for (d_max = d_max_in; d_max > d_min; d_max--) { 585 if (adev->power.states[d_max].flags.valid) 586 break; 587 } 588 } 589 590 if (d_min_p) 591 *d_min_p = d_min; 592 593 return d_max; 594 } 595 EXPORT_SYMBOL(acpi_pm_device_sleep_state); 596 597 #ifdef CONFIG_PM_RUNTIME 598 /** 599 * acpi_wakeup_device - Wakeup notification handler for ACPI devices. 600 * @handle: ACPI handle of the device the notification is for. 601 * @event: Type of the signaled event. 602 * @context: Device corresponding to @handle. 603 */ 604 static void acpi_wakeup_device(acpi_handle handle, u32 event, void *context) 605 { 606 struct device *dev = context; 607 608 if (event == ACPI_NOTIFY_DEVICE_WAKE && dev) { 609 pm_wakeup_event(dev, 0); 610 pm_runtime_resume(dev); 611 } 612 } 613 614 /** 615 * __acpi_device_run_wake - Enable/disable runtime remote wakeup for device. 616 * @adev: ACPI device to enable/disable the remote wakeup for. 617 * @enable: Whether to enable or disable the wakeup functionality. 618 * 619 * Enable/disable the GPE associated with @adev so that it can generate 620 * wakeup signals for the device in response to external (remote) events and 621 * enable/disable device wakeup power. 622 * 623 * Callers must ensure that @adev is a valid ACPI device node before executing 624 * this function. 625 */ 626 int __acpi_device_run_wake(struct acpi_device *adev, bool enable) 627 { 628 struct acpi_device_wakeup *wakeup = &adev->wakeup; 629 630 if (enable) { 631 acpi_status res; 632 int error; 633 634 error = acpi_enable_wakeup_device_power(adev, ACPI_STATE_S0); 635 if (error) 636 return error; 637 638 res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number); 639 if (ACPI_FAILURE(res)) { 640 acpi_disable_wakeup_device_power(adev); 641 return -EIO; 642 } 643 } else { 644 acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number); 645 acpi_disable_wakeup_device_power(adev); 646 } 647 return 0; 648 } 649 650 /** 651 * acpi_pm_device_run_wake - Enable/disable remote wakeup for given device. 652 * @dev: Device to enable/disable the platform to wake up. 653 * @enable: Whether to enable or disable the wakeup functionality. 654 */ 655 int acpi_pm_device_run_wake(struct device *phys_dev, bool enable) 656 { 657 struct acpi_device *adev; 658 acpi_handle handle; 659 660 if (!device_run_wake(phys_dev)) 661 return -EINVAL; 662 663 handle = DEVICE_ACPI_HANDLE(phys_dev); 664 if (!handle || acpi_bus_get_device(handle, &adev)) { 665 dev_dbg(phys_dev, "ACPI handle without context in %s!\n", 666 __func__); 667 return -ENODEV; 668 } 669 670 return __acpi_device_run_wake(adev, enable); 671 } 672 EXPORT_SYMBOL(acpi_pm_device_run_wake); 673 #else 674 static inline void acpi_wakeup_device(acpi_handle handle, u32 event, 675 void *context) {} 676 #endif /* CONFIG_PM_RUNTIME */ 677 678 #ifdef CONFIG_PM_SLEEP 679 /** 680 * __acpi_device_sleep_wake - Enable or disable device to wake up the system. 681 * @dev: Device to enable/desible to wake up the system. 682 * @target_state: System state the device is supposed to wake up from. 683 * @enable: Whether to enable or disable @dev to wake up the system. 684 */ 685 int __acpi_device_sleep_wake(struct acpi_device *adev, u32 target_state, 686 bool enable) 687 { 688 return enable ? 689 acpi_enable_wakeup_device_power(adev, target_state) : 690 acpi_disable_wakeup_device_power(adev); 691 } 692 693 /** 694 * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system. 695 * @dev: Device to enable/desible to wake up the system from sleep states. 696 * @enable: Whether to enable or disable @dev to wake up the system. 697 */ 698 int acpi_pm_device_sleep_wake(struct device *dev, bool enable) 699 { 700 acpi_handle handle; 701 struct acpi_device *adev; 702 int error; 703 704 if (!device_can_wakeup(dev)) 705 return -EINVAL; 706 707 handle = DEVICE_ACPI_HANDLE(dev); 708 if (!handle || acpi_bus_get_device(handle, &adev)) { 709 dev_dbg(dev, "ACPI handle without context in %s!\n", __func__); 710 return -ENODEV; 711 } 712 713 error = __acpi_device_sleep_wake(adev, acpi_target_system_state(), 714 enable); 715 if (!error) 716 dev_info(dev, "System wakeup %s by ACPI\n", 717 enable ? "enabled" : "disabled"); 718 719 return error; 720 } 721 #endif /* CONFIG_PM_SLEEP */ 722 723 /** 724 * acpi_dev_pm_get_node - Get ACPI device node for the given physical device. 725 * @dev: Device to get the ACPI node for. 726 */ 727 struct acpi_device *acpi_dev_pm_get_node(struct device *dev) 728 { 729 acpi_handle handle = DEVICE_ACPI_HANDLE(dev); 730 struct acpi_device *adev; 731 732 return handle && !acpi_bus_get_device(handle, &adev) ? adev : NULL; 733 } 734 735 /** 736 * acpi_dev_pm_low_power - Put ACPI device into a low-power state. 737 * @dev: Device to put into a low-power state. 738 * @adev: ACPI device node corresponding to @dev. 739 * @system_state: System state to choose the device state for. 740 */ 741 static int acpi_dev_pm_low_power(struct device *dev, struct acpi_device *adev, 742 u32 system_state) 743 { 744 int ret, state; 745 746 if (!acpi_device_power_manageable(adev)) 747 return 0; 748 749 ret = acpi_dev_pm_get_state(dev, adev, system_state, NULL, &state); 750 return ret ? ret : acpi_device_set_power(adev, state); 751 } 752 753 /** 754 * acpi_dev_pm_full_power - Put ACPI device into the full-power state. 755 * @adev: ACPI device node to put into the full-power state. 756 */ 757 static int acpi_dev_pm_full_power(struct acpi_device *adev) 758 { 759 return acpi_device_power_manageable(adev) ? 760 acpi_device_set_power(adev, ACPI_STATE_D0) : 0; 761 } 762 763 #ifdef CONFIG_PM_RUNTIME 764 /** 765 * acpi_dev_runtime_suspend - Put device into a low-power state using ACPI. 766 * @dev: Device to put into a low-power state. 767 * 768 * Put the given device into a runtime low-power state using the standard ACPI 769 * mechanism. Set up remote wakeup if desired, choose the state to put the 770 * device into (this checks if remote wakeup is expected to work too), and set 771 * the power state of the device. 772 */ 773 int acpi_dev_runtime_suspend(struct device *dev) 774 { 775 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 776 bool remote_wakeup; 777 int error; 778 779 if (!adev) 780 return 0; 781 782 remote_wakeup = dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) > 783 PM_QOS_FLAGS_NONE; 784 error = __acpi_device_run_wake(adev, remote_wakeup); 785 if (remote_wakeup && error) 786 return -EAGAIN; 787 788 error = acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); 789 if (error) 790 __acpi_device_run_wake(adev, false); 791 792 return error; 793 } 794 EXPORT_SYMBOL_GPL(acpi_dev_runtime_suspend); 795 796 /** 797 * acpi_dev_runtime_resume - Put device into the full-power state using ACPI. 798 * @dev: Device to put into the full-power state. 799 * 800 * Put the given device into the full-power state using the standard ACPI 801 * mechanism at run time. Set the power state of the device to ACPI D0 and 802 * disable remote wakeup. 803 */ 804 int acpi_dev_runtime_resume(struct device *dev) 805 { 806 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 807 int error; 808 809 if (!adev) 810 return 0; 811 812 error = acpi_dev_pm_full_power(adev); 813 __acpi_device_run_wake(adev, false); 814 return error; 815 } 816 EXPORT_SYMBOL_GPL(acpi_dev_runtime_resume); 817 818 /** 819 * acpi_subsys_runtime_suspend - Suspend device using ACPI. 820 * @dev: Device to suspend. 821 * 822 * Carry out the generic runtime suspend procedure for @dev and use ACPI to put 823 * it into a runtime low-power state. 824 */ 825 int acpi_subsys_runtime_suspend(struct device *dev) 826 { 827 int ret = pm_generic_runtime_suspend(dev); 828 return ret ? ret : acpi_dev_runtime_suspend(dev); 829 } 830 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_suspend); 831 832 /** 833 * acpi_subsys_runtime_resume - Resume device using ACPI. 834 * @dev: Device to Resume. 835 * 836 * Use ACPI to put the given device into the full-power state and carry out the 837 * generic runtime resume procedure for it. 838 */ 839 int acpi_subsys_runtime_resume(struct device *dev) 840 { 841 int ret = acpi_dev_runtime_resume(dev); 842 return ret ? ret : pm_generic_runtime_resume(dev); 843 } 844 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_resume); 845 #endif /* CONFIG_PM_RUNTIME */ 846 847 #ifdef CONFIG_PM_SLEEP 848 /** 849 * acpi_dev_suspend_late - Put device into a low-power state using ACPI. 850 * @dev: Device to put into a low-power state. 851 * 852 * Put the given device into a low-power state during system transition to a 853 * sleep state using the standard ACPI mechanism. Set up system wakeup if 854 * desired, choose the state to put the device into (this checks if system 855 * wakeup is expected to work too), and set the power state of the device. 856 */ 857 int acpi_dev_suspend_late(struct device *dev) 858 { 859 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 860 u32 target_state; 861 bool wakeup; 862 int error; 863 864 if (!adev) 865 return 0; 866 867 target_state = acpi_target_system_state(); 868 wakeup = device_may_wakeup(dev); 869 error = __acpi_device_sleep_wake(adev, target_state, wakeup); 870 if (wakeup && error) 871 return error; 872 873 error = acpi_dev_pm_low_power(dev, adev, target_state); 874 if (error) 875 __acpi_device_sleep_wake(adev, ACPI_STATE_UNKNOWN, false); 876 877 return error; 878 } 879 EXPORT_SYMBOL_GPL(acpi_dev_suspend_late); 880 881 /** 882 * acpi_dev_resume_early - Put device into the full-power state using ACPI. 883 * @dev: Device to put into the full-power state. 884 * 885 * Put the given device into the full-power state using the standard ACPI 886 * mechanism during system transition to the working state. Set the power 887 * state of the device to ACPI D0 and disable remote wakeup. 888 */ 889 int acpi_dev_resume_early(struct device *dev) 890 { 891 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 892 int error; 893 894 if (!adev) 895 return 0; 896 897 error = acpi_dev_pm_full_power(adev); 898 __acpi_device_sleep_wake(adev, ACPI_STATE_UNKNOWN, false); 899 return error; 900 } 901 EXPORT_SYMBOL_GPL(acpi_dev_resume_early); 902 903 /** 904 * acpi_subsys_prepare - Prepare device for system transition to a sleep state. 905 * @dev: Device to prepare. 906 */ 907 int acpi_subsys_prepare(struct device *dev) 908 { 909 /* 910 * Follow PCI and resume devices suspended at run time before running 911 * their system suspend callbacks. 912 */ 913 pm_runtime_resume(dev); 914 return pm_generic_prepare(dev); 915 } 916 EXPORT_SYMBOL_GPL(acpi_subsys_prepare); 917 918 /** 919 * acpi_subsys_suspend_late - Suspend device using ACPI. 920 * @dev: Device to suspend. 921 * 922 * Carry out the generic late suspend procedure for @dev and use ACPI to put 923 * it into a low-power state during system transition into a sleep state. 924 */ 925 int acpi_subsys_suspend_late(struct device *dev) 926 { 927 int ret = pm_generic_suspend_late(dev); 928 return ret ? ret : acpi_dev_suspend_late(dev); 929 } 930 EXPORT_SYMBOL_GPL(acpi_subsys_suspend_late); 931 932 /** 933 * acpi_subsys_resume_early - Resume device using ACPI. 934 * @dev: Device to Resume. 935 * 936 * Use ACPI to put the given device into the full-power state and carry out the 937 * generic early resume procedure for it during system transition into the 938 * working state. 939 */ 940 int acpi_subsys_resume_early(struct device *dev) 941 { 942 int ret = acpi_dev_resume_early(dev); 943 return ret ? ret : pm_generic_resume_early(dev); 944 } 945 EXPORT_SYMBOL_GPL(acpi_subsys_resume_early); 946 #endif /* CONFIG_PM_SLEEP */ 947 948 static struct dev_pm_domain acpi_general_pm_domain = { 949 .ops = { 950 #ifdef CONFIG_PM_RUNTIME 951 .runtime_suspend = acpi_subsys_runtime_suspend, 952 .runtime_resume = acpi_subsys_runtime_resume, 953 #endif 954 #ifdef CONFIG_PM_SLEEP 955 .prepare = acpi_subsys_prepare, 956 .suspend_late = acpi_subsys_suspend_late, 957 .resume_early = acpi_subsys_resume_early, 958 .poweroff_late = acpi_subsys_suspend_late, 959 .restore_early = acpi_subsys_resume_early, 960 #endif 961 }, 962 }; 963 964 /** 965 * acpi_dev_pm_attach - Prepare device for ACPI power management. 966 * @dev: Device to prepare. 967 * @power_on: Whether or not to power on the device. 968 * 969 * If @dev has a valid ACPI handle that has a valid struct acpi_device object 970 * attached to it, install a wakeup notification handler for the device and 971 * add it to the general ACPI PM domain. If @power_on is set, the device will 972 * be put into the ACPI D0 state before the function returns. 973 * 974 * This assumes that the @dev's bus type uses generic power management callbacks 975 * (or doesn't use any power management callbacks at all). 976 * 977 * Callers must ensure proper synchronization of this function with power 978 * management callbacks. 979 */ 980 int acpi_dev_pm_attach(struct device *dev, bool power_on) 981 { 982 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 983 984 if (!adev) 985 return -ENODEV; 986 987 if (dev->pm_domain) 988 return -EEXIST; 989 990 acpi_add_pm_notifier(adev, acpi_wakeup_device, dev); 991 dev->pm_domain = &acpi_general_pm_domain; 992 if (power_on) { 993 acpi_dev_pm_full_power(adev); 994 __acpi_device_run_wake(adev, false); 995 } 996 return 0; 997 } 998 EXPORT_SYMBOL_GPL(acpi_dev_pm_attach); 999 1000 /** 1001 * acpi_dev_pm_detach - Remove ACPI power management from the device. 1002 * @dev: Device to take care of. 1003 * @power_off: Whether or not to try to remove power from the device. 1004 * 1005 * Remove the device from the general ACPI PM domain and remove its wakeup 1006 * notifier. If @power_off is set, additionally remove power from the device if 1007 * possible. 1008 * 1009 * Callers must ensure proper synchronization of this function with power 1010 * management callbacks. 1011 */ 1012 void acpi_dev_pm_detach(struct device *dev, bool power_off) 1013 { 1014 struct acpi_device *adev = acpi_dev_pm_get_node(dev); 1015 1016 if (adev && dev->pm_domain == &acpi_general_pm_domain) { 1017 dev->pm_domain = NULL; 1018 acpi_remove_pm_notifier(adev, acpi_wakeup_device); 1019 if (power_off) { 1020 /* 1021 * If the device's PM QoS resume latency limit or flags 1022 * have been exposed to user space, they have to be 1023 * hidden at this point, so that they don't affect the 1024 * choice of the low-power state to put the device into. 1025 */ 1026 dev_pm_qos_hide_latency_limit(dev); 1027 dev_pm_qos_hide_flags(dev); 1028 __acpi_device_run_wake(adev, false); 1029 acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); 1030 } 1031 } 1032 } 1033 EXPORT_SYMBOL_GPL(acpi_dev_pm_detach); 1034 1035 /** 1036 * acpi_dev_pm_add_dependent - Add physical device depending for PM. 1037 * @handle: Handle of ACPI device node. 1038 * @depdev: Device depending on that node for PM. 1039 */ 1040 void acpi_dev_pm_add_dependent(acpi_handle handle, struct device *depdev) 1041 { 1042 struct acpi_device_physical_node *dep; 1043 struct acpi_device *adev; 1044 1045 if (!depdev || acpi_bus_get_device(handle, &adev)) 1046 return; 1047 1048 mutex_lock(&adev->physical_node_lock); 1049 1050 list_for_each_entry(dep, &adev->power_dependent, node) 1051 if (dep->dev == depdev) 1052 goto out; 1053 1054 dep = kzalloc(sizeof(*dep), GFP_KERNEL); 1055 if (dep) { 1056 dep->dev = depdev; 1057 list_add_tail(&dep->node, &adev->power_dependent); 1058 } 1059 1060 out: 1061 mutex_unlock(&adev->physical_node_lock); 1062 } 1063 EXPORT_SYMBOL_GPL(acpi_dev_pm_add_dependent); 1064 1065 /** 1066 * acpi_dev_pm_remove_dependent - Remove physical device depending for PM. 1067 * @handle: Handle of ACPI device node. 1068 * @depdev: Device depending on that node for PM. 1069 */ 1070 void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev) 1071 { 1072 struct acpi_device_physical_node *dep; 1073 struct acpi_device *adev; 1074 1075 if (!depdev || acpi_bus_get_device(handle, &adev)) 1076 return; 1077 1078 mutex_lock(&adev->physical_node_lock); 1079 1080 list_for_each_entry(dep, &adev->power_dependent, node) 1081 if (dep->dev == depdev) { 1082 list_del(&dep->node); 1083 kfree(dep); 1084 break; 1085 } 1086 1087 mutex_unlock(&adev->physical_node_lock); 1088 } 1089 EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent); 1090 #endif /* CONFIG_PM */ 1091