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/acpi.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 "internal.h" 32 33 #define _COMPONENT ACPI_POWER_COMPONENT 34 ACPI_MODULE_NAME("device_pm"); 35 36 /** 37 * acpi_power_state_string - String representation of ACPI device power state. 38 * @state: ACPI device power state to return the string representation of. 39 */ 40 const char *acpi_power_state_string(int state) 41 { 42 switch (state) { 43 case ACPI_STATE_D0: 44 return "D0"; 45 case ACPI_STATE_D1: 46 return "D1"; 47 case ACPI_STATE_D2: 48 return "D2"; 49 case ACPI_STATE_D3_HOT: 50 return "D3hot"; 51 case ACPI_STATE_D3_COLD: 52 return "D3cold"; 53 default: 54 return "(unknown)"; 55 } 56 } 57 58 /** 59 * acpi_device_get_power - Get power state of an ACPI device. 60 * @device: Device to get the power state of. 61 * @state: Place to store the power state of the device. 62 * 63 * This function does not update the device's power.state field, but it may 64 * update its parent's power.state field (when the parent's power state is 65 * unknown and the device's power state turns out to be D0). 66 */ 67 int acpi_device_get_power(struct acpi_device *device, int *state) 68 { 69 int result = ACPI_STATE_UNKNOWN; 70 71 if (!device || !state) 72 return -EINVAL; 73 74 if (!device->flags.power_manageable) { 75 /* TBD: Non-recursive algorithm for walking up hierarchy. */ 76 *state = device->parent ? 77 device->parent->power.state : ACPI_STATE_D0; 78 goto out; 79 } 80 81 /* 82 * Get the device's power state from power resources settings and _PSC, 83 * if available. 84 */ 85 if (device->power.flags.power_resources) { 86 int error = acpi_power_get_inferred_state(device, &result); 87 if (error) 88 return error; 89 } 90 if (device->power.flags.explicit_get) { 91 acpi_handle handle = device->handle; 92 unsigned long long psc; 93 acpi_status status; 94 95 status = acpi_evaluate_integer(handle, "_PSC", NULL, &psc); 96 if (ACPI_FAILURE(status)) 97 return -ENODEV; 98 99 /* 100 * The power resources settings may indicate a power state 101 * shallower than the actual power state of the device, because 102 * the same power resources may be referenced by other devices. 103 * 104 * For systems predating ACPI 4.0 we assume that D3hot is the 105 * deepest state that can be supported. 106 */ 107 if (psc > result && psc < ACPI_STATE_D3_COLD) 108 result = psc; 109 else if (result == ACPI_STATE_UNKNOWN) 110 result = psc > ACPI_STATE_D2 ? ACPI_STATE_D3_HOT : psc; 111 } 112 113 /* 114 * If we were unsure about the device parent's power state up to this 115 * point, the fact that the device is in D0 implies that the parent has 116 * to be in D0 too, except if ignore_parent is set. 117 */ 118 if (!device->power.flags.ignore_parent && device->parent 119 && device->parent->power.state == ACPI_STATE_UNKNOWN 120 && result == ACPI_STATE_D0) 121 device->parent->power.state = ACPI_STATE_D0; 122 123 *state = result; 124 125 out: 126 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is %s\n", 127 device->pnp.bus_id, acpi_power_state_string(*state))); 128 129 return 0; 130 } 131 132 static int acpi_dev_pm_explicit_set(struct acpi_device *adev, int state) 133 { 134 if (adev->power.states[state].flags.explicit_set) { 135 char method[5] = { '_', 'P', 'S', '0' + state, '\0' }; 136 acpi_status status; 137 138 status = acpi_evaluate_object(adev->handle, method, NULL, NULL); 139 if (ACPI_FAILURE(status)) 140 return -ENODEV; 141 } 142 return 0; 143 } 144 145 /** 146 * acpi_device_set_power - Set power state of an ACPI device. 147 * @device: Device to set the power state of. 148 * @state: New power state to set. 149 * 150 * Callers must ensure that the device is power manageable before using this 151 * function. 152 */ 153 int acpi_device_set_power(struct acpi_device *device, int state) 154 { 155 int target_state = state; 156 int result = 0; 157 158 if (!device || !device->flags.power_manageable 159 || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3_COLD)) 160 return -EINVAL; 161 162 /* Make sure this is a valid target state */ 163 164 if (state == device->power.state) { 165 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] already in %s\n", 166 device->pnp.bus_id, 167 acpi_power_state_string(state))); 168 return 0; 169 } 170 171 if (state == ACPI_STATE_D3_COLD) { 172 /* 173 * For transitions to D3cold we need to execute _PS3 and then 174 * possibly drop references to the power resources in use. 175 */ 176 state = ACPI_STATE_D3_HOT; 177 /* If _PR3 is not available, use D3hot as the target state. */ 178 if (!device->power.states[ACPI_STATE_D3_COLD].flags.valid) 179 target_state = state; 180 } else if (!device->power.states[state].flags.valid) { 181 dev_warn(&device->dev, "Power state %s not supported\n", 182 acpi_power_state_string(state)); 183 return -ENODEV; 184 } 185 186 if (!device->power.flags.ignore_parent && 187 device->parent && (state < device->parent->power.state)) { 188 dev_warn(&device->dev, 189 "Cannot transition to power state %s for parent in %s\n", 190 acpi_power_state_string(state), 191 acpi_power_state_string(device->parent->power.state)); 192 return -ENODEV; 193 } 194 195 /* 196 * Transition Power 197 * ---------------- 198 * In accordance with ACPI 6, _PSx is executed before manipulating power 199 * resources, unless the target state is D0, in which case _PS0 is 200 * supposed to be executed after turning the power resources on. 201 */ 202 if (state > ACPI_STATE_D0) { 203 /* 204 * According to ACPI 6, devices cannot go from lower-power 205 * (deeper) states to higher-power (shallower) states. 206 */ 207 if (state < device->power.state) { 208 dev_warn(&device->dev, "Cannot transition from %s to %s\n", 209 acpi_power_state_string(device->power.state), 210 acpi_power_state_string(state)); 211 return -ENODEV; 212 } 213 214 result = acpi_dev_pm_explicit_set(device, state); 215 if (result) 216 goto end; 217 218 if (device->power.flags.power_resources) 219 result = acpi_power_transition(device, target_state); 220 } else { 221 if (device->power.flags.power_resources) { 222 result = acpi_power_transition(device, ACPI_STATE_D0); 223 if (result) 224 goto end; 225 } 226 result = acpi_dev_pm_explicit_set(device, ACPI_STATE_D0); 227 } 228 229 end: 230 if (result) { 231 dev_warn(&device->dev, "Failed to change power state to %s\n", 232 acpi_power_state_string(state)); 233 } else { 234 device->power.state = target_state; 235 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 236 "Device [%s] transitioned to %s\n", 237 device->pnp.bus_id, 238 acpi_power_state_string(state))); 239 } 240 241 return result; 242 } 243 EXPORT_SYMBOL(acpi_device_set_power); 244 245 int acpi_bus_set_power(acpi_handle handle, int state) 246 { 247 struct acpi_device *device; 248 int result; 249 250 result = acpi_bus_get_device(handle, &device); 251 if (result) 252 return result; 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 if (!acpi_device_is_present(device)) 268 return -ENXIO; 269 270 result = acpi_device_get_power(device, &state); 271 if (result) 272 return result; 273 274 if (state < ACPI_STATE_D3_COLD && device->power.flags.power_resources) { 275 /* Reference count the power resources. */ 276 result = acpi_power_on_resources(device, state); 277 if (result) 278 return result; 279 280 if (state == ACPI_STATE_D0) { 281 /* 282 * If _PSC is not present and the state inferred from 283 * power resources appears to be D0, it still may be 284 * necessary to execute _PS0 at this point, because 285 * another device using the same power resources may 286 * have been put into D0 previously and that's why we 287 * see D0 here. 288 */ 289 result = acpi_dev_pm_explicit_set(device, state); 290 if (result) 291 return result; 292 } 293 } else if (state == ACPI_STATE_UNKNOWN) { 294 /* 295 * No power resources and missing _PSC? Cross fingers and make 296 * it D0 in hope that this is what the BIOS put the device into. 297 * [We tried to force D0 here by executing _PS0, but that broke 298 * Toshiba P870-303 in a nasty way.] 299 */ 300 state = ACPI_STATE_D0; 301 } 302 device->power.state = state; 303 return 0; 304 } 305 306 /** 307 * acpi_device_fix_up_power - Force device with missing _PSC into D0. 308 * @device: Device object whose power state is to be fixed up. 309 * 310 * Devices without power resources and _PSC, but having _PS0 and _PS3 defined, 311 * are assumed to be put into D0 by the BIOS. However, in some cases that may 312 * not be the case and this function should be used then. 313 */ 314 int acpi_device_fix_up_power(struct acpi_device *device) 315 { 316 int ret = 0; 317 318 if (!device->power.flags.power_resources 319 && !device->power.flags.explicit_get 320 && device->power.state == ACPI_STATE_D0) 321 ret = acpi_dev_pm_explicit_set(device, ACPI_STATE_D0); 322 323 return ret; 324 } 325 326 int acpi_device_update_power(struct acpi_device *device, int *state_p) 327 { 328 int state; 329 int result; 330 331 if (device->power.state == ACPI_STATE_UNKNOWN) { 332 result = acpi_bus_init_power(device); 333 if (!result && state_p) 334 *state_p = device->power.state; 335 336 return result; 337 } 338 339 result = acpi_device_get_power(device, &state); 340 if (result) 341 return result; 342 343 if (state == ACPI_STATE_UNKNOWN) { 344 state = ACPI_STATE_D0; 345 result = acpi_device_set_power(device, state); 346 if (result) 347 return result; 348 } else { 349 if (device->power.flags.power_resources) { 350 /* 351 * We don't need to really switch the state, bu we need 352 * to update the power resources' reference counters. 353 */ 354 result = acpi_power_transition(device, state); 355 if (result) 356 return result; 357 } 358 device->power.state = state; 359 } 360 if (state_p) 361 *state_p = state; 362 363 return 0; 364 } 365 EXPORT_SYMBOL_GPL(acpi_device_update_power); 366 367 int acpi_bus_update_power(acpi_handle handle, int *state_p) 368 { 369 struct acpi_device *device; 370 int result; 371 372 result = acpi_bus_get_device(handle, &device); 373 return result ? result : acpi_device_update_power(device, state_p); 374 } 375 EXPORT_SYMBOL_GPL(acpi_bus_update_power); 376 377 bool acpi_bus_power_manageable(acpi_handle handle) 378 { 379 struct acpi_device *device; 380 int result; 381 382 result = acpi_bus_get_device(handle, &device); 383 return result ? false : device->flags.power_manageable; 384 } 385 EXPORT_SYMBOL(acpi_bus_power_manageable); 386 387 #ifdef CONFIG_PM 388 static DEFINE_MUTEX(acpi_pm_notifier_lock); 389 390 static void acpi_pm_notify_handler(acpi_handle handle, u32 val, void *not_used) 391 { 392 struct acpi_device *adev; 393 394 if (val != ACPI_NOTIFY_DEVICE_WAKE) 395 return; 396 397 adev = acpi_bus_get_acpi_device(handle); 398 if (!adev) 399 return; 400 401 mutex_lock(&acpi_pm_notifier_lock); 402 403 if (adev->wakeup.flags.notifier_present) { 404 __pm_wakeup_event(adev->wakeup.ws, 0); 405 if (adev->wakeup.context.work.func) 406 queue_pm_work(&adev->wakeup.context.work); 407 } 408 409 mutex_unlock(&acpi_pm_notifier_lock); 410 411 acpi_bus_put_acpi_device(adev); 412 } 413 414 /** 415 * acpi_add_pm_notifier - Register PM notify handler for given ACPI device. 416 * @adev: ACPI device to add the notify handler for. 417 * @dev: Device to generate a wakeup event for while handling the notification. 418 * @work_func: Work function to execute when handling the notification. 419 * 420 * NOTE: @adev need not be a run-wake or wakeup device to be a valid source of 421 * PM wakeup events. For example, wakeup events may be generated for bridges 422 * if one of the devices below the bridge is signaling wakeup, even if the 423 * bridge itself doesn't have a wakeup GPE associated with it. 424 */ 425 acpi_status acpi_add_pm_notifier(struct acpi_device *adev, struct device *dev, 426 void (*work_func)(struct work_struct *work)) 427 { 428 acpi_status status = AE_ALREADY_EXISTS; 429 430 if (!dev && !work_func) 431 return AE_BAD_PARAMETER; 432 433 mutex_lock(&acpi_pm_notifier_lock); 434 435 if (adev->wakeup.flags.notifier_present) 436 goto out; 437 438 adev->wakeup.ws = wakeup_source_register(dev_name(&adev->dev)); 439 adev->wakeup.context.dev = dev; 440 if (work_func) 441 INIT_WORK(&adev->wakeup.context.work, work_func); 442 443 status = acpi_install_notify_handler(adev->handle, ACPI_SYSTEM_NOTIFY, 444 acpi_pm_notify_handler, NULL); 445 if (ACPI_FAILURE(status)) 446 goto out; 447 448 adev->wakeup.flags.notifier_present = true; 449 450 out: 451 mutex_unlock(&acpi_pm_notifier_lock); 452 return status; 453 } 454 455 /** 456 * acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device. 457 * @adev: ACPI device to remove the notifier from. 458 */ 459 acpi_status acpi_remove_pm_notifier(struct acpi_device *adev) 460 { 461 acpi_status status = AE_BAD_PARAMETER; 462 463 mutex_lock(&acpi_pm_notifier_lock); 464 465 if (!adev->wakeup.flags.notifier_present) 466 goto out; 467 468 status = acpi_remove_notify_handler(adev->handle, 469 ACPI_SYSTEM_NOTIFY, 470 acpi_pm_notify_handler); 471 if (ACPI_FAILURE(status)) 472 goto out; 473 474 if (adev->wakeup.context.work.func) { 475 cancel_work_sync(&adev->wakeup.context.work); 476 adev->wakeup.context.work.func = NULL; 477 } 478 adev->wakeup.context.dev = NULL; 479 wakeup_source_unregister(adev->wakeup.ws); 480 481 adev->wakeup.flags.notifier_present = false; 482 483 out: 484 mutex_unlock(&acpi_pm_notifier_lock); 485 return status; 486 } 487 488 bool acpi_bus_can_wakeup(acpi_handle handle) 489 { 490 struct acpi_device *device; 491 int result; 492 493 result = acpi_bus_get_device(handle, &device); 494 return result ? false : device->wakeup.flags.valid; 495 } 496 EXPORT_SYMBOL(acpi_bus_can_wakeup); 497 498 /** 499 * acpi_dev_pm_get_state - Get preferred power state of ACPI device. 500 * @dev: Device whose preferred target power state to return. 501 * @adev: ACPI device node corresponding to @dev. 502 * @target_state: System state to match the resultant device state. 503 * @d_min_p: Location to store the highest power state available to the device. 504 * @d_max_p: Location to store the lowest power state available to the device. 505 * 506 * Find the lowest power (highest number) and highest power (lowest number) ACPI 507 * device power states that the device can be in while the system is in the 508 * state represented by @target_state. Store the integer numbers representing 509 * those stats in the memory locations pointed to by @d_max_p and @d_min_p, 510 * respectively. 511 * 512 * Callers must ensure that @dev and @adev are valid pointers and that @adev 513 * actually corresponds to @dev before using this function. 514 * 515 * Returns 0 on success or -ENODATA when one of the ACPI methods fails or 516 * returns a value that doesn't make sense. The memory locations pointed to by 517 * @d_max_p and @d_min_p are only modified on success. 518 */ 519 static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev, 520 u32 target_state, int *d_min_p, int *d_max_p) 521 { 522 char method[] = { '_', 'S', '0' + target_state, 'D', '\0' }; 523 acpi_handle handle = adev->handle; 524 unsigned long long ret; 525 int d_min, d_max; 526 bool wakeup = false; 527 acpi_status status; 528 529 /* 530 * If the system state is S0, the lowest power state the device can be 531 * in is D3cold, unless the device has _S0W and is supposed to signal 532 * wakeup, in which case the return value of _S0W has to be used as the 533 * lowest power state available to the device. 534 */ 535 d_min = ACPI_STATE_D0; 536 d_max = ACPI_STATE_D3_COLD; 537 538 /* 539 * If present, _SxD methods return the minimum D-state (highest power 540 * state) we can use for the corresponding S-states. Otherwise, the 541 * minimum D-state is D0 (ACPI 3.x). 542 */ 543 if (target_state > ACPI_STATE_S0) { 544 /* 545 * We rely on acpi_evaluate_integer() not clobbering the integer 546 * provided if AE_NOT_FOUND is returned. 547 */ 548 ret = d_min; 549 status = acpi_evaluate_integer(handle, method, NULL, &ret); 550 if ((ACPI_FAILURE(status) && status != AE_NOT_FOUND) 551 || ret > ACPI_STATE_D3_COLD) 552 return -ENODATA; 553 554 /* 555 * We need to handle legacy systems where D3hot and D3cold are 556 * the same and 3 is returned in both cases, so fall back to 557 * D3cold if D3hot is not a valid state. 558 */ 559 if (!adev->power.states[ret].flags.valid) { 560 if (ret == ACPI_STATE_D3_HOT) 561 ret = ACPI_STATE_D3_COLD; 562 else 563 return -ENODATA; 564 } 565 d_min = ret; 566 wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid 567 && adev->wakeup.sleep_state >= target_state; 568 } else if (dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) != 569 PM_QOS_FLAGS_NONE) { 570 wakeup = adev->wakeup.flags.valid; 571 } 572 573 /* 574 * If _PRW says we can wake up the system from the target sleep state, 575 * the D-state returned by _SxD is sufficient for that (we assume a 576 * wakeup-aware driver if wake is set). Still, if _SxW exists 577 * (ACPI 3.x), it should return the maximum (lowest power) D-state that 578 * can wake the system. _S0W may be valid, too. 579 */ 580 if (wakeup) { 581 method[3] = 'W'; 582 status = acpi_evaluate_integer(handle, method, NULL, &ret); 583 if (status == AE_NOT_FOUND) { 584 if (target_state > ACPI_STATE_S0) 585 d_max = d_min; 586 } else if (ACPI_SUCCESS(status) && ret <= ACPI_STATE_D3_COLD) { 587 /* Fall back to D3cold if ret is not a valid state. */ 588 if (!adev->power.states[ret].flags.valid) 589 ret = ACPI_STATE_D3_COLD; 590 591 d_max = ret > d_min ? ret : d_min; 592 } else { 593 return -ENODATA; 594 } 595 } 596 597 if (d_min_p) 598 *d_min_p = d_min; 599 600 if (d_max_p) 601 *d_max_p = d_max; 602 603 return 0; 604 } 605 606 /** 607 * acpi_pm_device_sleep_state - Get preferred power state of ACPI device. 608 * @dev: Device whose preferred target power state to return. 609 * @d_min_p: Location to store the upper limit of the allowed states range. 610 * @d_max_in: Deepest low-power state to take into consideration. 611 * Return value: Preferred power state of the device on success, -ENODEV 612 * if there's no 'struct acpi_device' for @dev, -EINVAL if @d_max_in is 613 * incorrect, or -ENODATA on ACPI method failure. 614 * 615 * The caller must ensure that @dev is valid before using this function. 616 */ 617 int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in) 618 { 619 struct acpi_device *adev; 620 int ret, d_min, d_max; 621 622 if (d_max_in < ACPI_STATE_D0 || d_max_in > ACPI_STATE_D3_COLD) 623 return -EINVAL; 624 625 if (d_max_in > ACPI_STATE_D2) { 626 enum pm_qos_flags_status stat; 627 628 stat = dev_pm_qos_flags(dev, PM_QOS_FLAG_NO_POWER_OFF); 629 if (stat == PM_QOS_FLAGS_ALL) 630 d_max_in = ACPI_STATE_D2; 631 } 632 633 adev = ACPI_COMPANION(dev); 634 if (!adev) { 635 dev_dbg(dev, "ACPI companion missing in %s!\n", __func__); 636 return -ENODEV; 637 } 638 639 ret = acpi_dev_pm_get_state(dev, adev, acpi_target_system_state(), 640 &d_min, &d_max); 641 if (ret) 642 return ret; 643 644 if (d_max_in < d_min) 645 return -EINVAL; 646 647 if (d_max > d_max_in) { 648 for (d_max = d_max_in; d_max > d_min; d_max--) { 649 if (adev->power.states[d_max].flags.valid) 650 break; 651 } 652 } 653 654 if (d_min_p) 655 *d_min_p = d_min; 656 657 return d_max; 658 } 659 EXPORT_SYMBOL(acpi_pm_device_sleep_state); 660 661 /** 662 * acpi_pm_notify_work_func - ACPI devices wakeup notification work function. 663 * @work: Work item to handle. 664 */ 665 static void acpi_pm_notify_work_func(struct work_struct *work) 666 { 667 struct device *dev; 668 669 dev = container_of(work, struct acpi_device_wakeup_context, work)->dev; 670 if (dev) { 671 pm_wakeup_event(dev, 0); 672 pm_runtime_resume(dev); 673 } 674 } 675 676 /** 677 * acpi_device_wakeup - Enable/disable wakeup functionality for device. 678 * @adev: ACPI device to enable/disable wakeup functionality for. 679 * @target_state: State the system is transitioning into. 680 * @enable: Whether to enable or disable the wakeup functionality. 681 * 682 * Enable/disable the GPE associated with @adev so that it can generate 683 * wakeup signals for the device in response to external (remote) events and 684 * enable/disable device wakeup power. 685 * 686 * Callers must ensure that @adev is a valid ACPI device node before executing 687 * this function. 688 */ 689 static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state, 690 bool enable) 691 { 692 struct acpi_device_wakeup *wakeup = &adev->wakeup; 693 694 if (enable) { 695 acpi_status res; 696 int error; 697 698 error = acpi_enable_wakeup_device_power(adev, target_state); 699 if (error) 700 return error; 701 702 if (adev->wakeup.flags.enabled) 703 return 0; 704 705 res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number); 706 if (ACPI_SUCCESS(res)) { 707 adev->wakeup.flags.enabled = 1; 708 } else { 709 acpi_disable_wakeup_device_power(adev); 710 return -EIO; 711 } 712 } else { 713 if (adev->wakeup.flags.enabled) { 714 acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number); 715 adev->wakeup.flags.enabled = 0; 716 } 717 acpi_disable_wakeup_device_power(adev); 718 } 719 return 0; 720 } 721 722 /** 723 * acpi_pm_device_run_wake - Enable/disable remote wakeup for given device. 724 * @dev: Device to enable/disable the platform to wake up. 725 * @enable: Whether to enable or disable the wakeup functionality. 726 */ 727 int acpi_pm_device_run_wake(struct device *phys_dev, bool enable) 728 { 729 struct acpi_device *adev; 730 731 if (!device_run_wake(phys_dev)) 732 return -EINVAL; 733 734 adev = ACPI_COMPANION(phys_dev); 735 if (!adev) { 736 dev_dbg(phys_dev, "ACPI companion missing in %s!\n", __func__); 737 return -ENODEV; 738 } 739 740 return acpi_device_wakeup(adev, ACPI_STATE_S0, enable); 741 } 742 EXPORT_SYMBOL(acpi_pm_device_run_wake); 743 744 #ifdef CONFIG_PM_SLEEP 745 /** 746 * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system. 747 * @dev: Device to enable/desible to wake up the system from sleep states. 748 * @enable: Whether to enable or disable @dev to wake up the system. 749 */ 750 int acpi_pm_device_sleep_wake(struct device *dev, bool enable) 751 { 752 struct acpi_device *adev; 753 int error; 754 755 if (!device_can_wakeup(dev)) 756 return -EINVAL; 757 758 adev = ACPI_COMPANION(dev); 759 if (!adev) { 760 dev_dbg(dev, "ACPI companion missing in %s!\n", __func__); 761 return -ENODEV; 762 } 763 764 error = acpi_device_wakeup(adev, acpi_target_system_state(), enable); 765 if (!error) 766 dev_info(dev, "System wakeup %s by ACPI\n", 767 enable ? "enabled" : "disabled"); 768 769 return error; 770 } 771 #endif /* CONFIG_PM_SLEEP */ 772 773 /** 774 * acpi_dev_pm_low_power - Put ACPI device into a low-power state. 775 * @dev: Device to put into a low-power state. 776 * @adev: ACPI device node corresponding to @dev. 777 * @system_state: System state to choose the device state for. 778 */ 779 static int acpi_dev_pm_low_power(struct device *dev, struct acpi_device *adev, 780 u32 system_state) 781 { 782 int ret, state; 783 784 if (!acpi_device_power_manageable(adev)) 785 return 0; 786 787 ret = acpi_dev_pm_get_state(dev, adev, system_state, NULL, &state); 788 return ret ? ret : acpi_device_set_power(adev, state); 789 } 790 791 /** 792 * acpi_dev_pm_full_power - Put ACPI device into the full-power state. 793 * @adev: ACPI device node to put into the full-power state. 794 */ 795 static int acpi_dev_pm_full_power(struct acpi_device *adev) 796 { 797 return acpi_device_power_manageable(adev) ? 798 acpi_device_set_power(adev, ACPI_STATE_D0) : 0; 799 } 800 801 /** 802 * acpi_dev_runtime_suspend - Put device into a low-power state using ACPI. 803 * @dev: Device to put into a low-power state. 804 * 805 * Put the given device into a runtime low-power state using the standard ACPI 806 * mechanism. Set up remote wakeup if desired, choose the state to put the 807 * device into (this checks if remote wakeup is expected to work too), and set 808 * the power state of the device. 809 */ 810 int acpi_dev_runtime_suspend(struct device *dev) 811 { 812 struct acpi_device *adev = ACPI_COMPANION(dev); 813 bool remote_wakeup; 814 int error; 815 816 if (!adev) 817 return 0; 818 819 remote_wakeup = dev_pm_qos_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP) > 820 PM_QOS_FLAGS_NONE; 821 error = acpi_device_wakeup(adev, ACPI_STATE_S0, remote_wakeup); 822 if (remote_wakeup && error) 823 return -EAGAIN; 824 825 error = acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); 826 if (error) 827 acpi_device_wakeup(adev, ACPI_STATE_S0, false); 828 829 return error; 830 } 831 EXPORT_SYMBOL_GPL(acpi_dev_runtime_suspend); 832 833 /** 834 * acpi_dev_runtime_resume - Put device into the full-power state using ACPI. 835 * @dev: Device to put into the full-power state. 836 * 837 * Put the given device into the full-power state using the standard ACPI 838 * mechanism at run time. Set the power state of the device to ACPI D0 and 839 * disable remote wakeup. 840 */ 841 int acpi_dev_runtime_resume(struct device *dev) 842 { 843 struct acpi_device *adev = ACPI_COMPANION(dev); 844 int error; 845 846 if (!adev) 847 return 0; 848 849 error = acpi_dev_pm_full_power(adev); 850 acpi_device_wakeup(adev, ACPI_STATE_S0, false); 851 return error; 852 } 853 EXPORT_SYMBOL_GPL(acpi_dev_runtime_resume); 854 855 /** 856 * acpi_subsys_runtime_suspend - Suspend device using ACPI. 857 * @dev: Device to suspend. 858 * 859 * Carry out the generic runtime suspend procedure for @dev and use ACPI to put 860 * it into a runtime low-power state. 861 */ 862 int acpi_subsys_runtime_suspend(struct device *dev) 863 { 864 int ret = pm_generic_runtime_suspend(dev); 865 return ret ? ret : acpi_dev_runtime_suspend(dev); 866 } 867 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_suspend); 868 869 /** 870 * acpi_subsys_runtime_resume - Resume device using ACPI. 871 * @dev: Device to Resume. 872 * 873 * Use ACPI to put the given device into the full-power state and carry out the 874 * generic runtime resume procedure for it. 875 */ 876 int acpi_subsys_runtime_resume(struct device *dev) 877 { 878 int ret = acpi_dev_runtime_resume(dev); 879 return ret ? ret : pm_generic_runtime_resume(dev); 880 } 881 EXPORT_SYMBOL_GPL(acpi_subsys_runtime_resume); 882 883 #ifdef CONFIG_PM_SLEEP 884 /** 885 * acpi_dev_suspend_late - Put device into a low-power state using ACPI. 886 * @dev: Device to put into a low-power state. 887 * 888 * Put the given device into a low-power state during system transition to a 889 * sleep state using the standard ACPI mechanism. Set up system wakeup if 890 * desired, choose the state to put the device into (this checks if system 891 * wakeup is expected to work too), and set the power state of the device. 892 */ 893 int acpi_dev_suspend_late(struct device *dev) 894 { 895 struct acpi_device *adev = ACPI_COMPANION(dev); 896 u32 target_state; 897 bool wakeup; 898 int error; 899 900 if (!adev) 901 return 0; 902 903 target_state = acpi_target_system_state(); 904 wakeup = device_may_wakeup(dev) && acpi_device_can_wakeup(adev); 905 error = acpi_device_wakeup(adev, target_state, wakeup); 906 if (wakeup && error) 907 return error; 908 909 error = acpi_dev_pm_low_power(dev, adev, target_state); 910 if (error) 911 acpi_device_wakeup(adev, ACPI_STATE_UNKNOWN, false); 912 913 return error; 914 } 915 EXPORT_SYMBOL_GPL(acpi_dev_suspend_late); 916 917 /** 918 * acpi_dev_resume_early - Put device into the full-power state using ACPI. 919 * @dev: Device to put into the full-power state. 920 * 921 * Put the given device into the full-power state using the standard ACPI 922 * mechanism during system transition to the working state. Set the power 923 * state of the device to ACPI D0 and disable remote wakeup. 924 */ 925 int acpi_dev_resume_early(struct device *dev) 926 { 927 struct acpi_device *adev = ACPI_COMPANION(dev); 928 int error; 929 930 if (!adev) 931 return 0; 932 933 error = acpi_dev_pm_full_power(adev); 934 acpi_device_wakeup(adev, ACPI_STATE_UNKNOWN, false); 935 return error; 936 } 937 EXPORT_SYMBOL_GPL(acpi_dev_resume_early); 938 939 /** 940 * acpi_subsys_prepare - Prepare device for system transition to a sleep state. 941 * @dev: Device to prepare. 942 */ 943 int acpi_subsys_prepare(struct device *dev) 944 { 945 struct acpi_device *adev = ACPI_COMPANION(dev); 946 u32 sys_target; 947 int ret, state; 948 949 ret = pm_generic_prepare(dev); 950 if (ret < 0) 951 return ret; 952 953 if (!adev || !pm_runtime_suspended(dev) 954 || device_may_wakeup(dev) != !!adev->wakeup.prepare_count) 955 return 0; 956 957 sys_target = acpi_target_system_state(); 958 if (sys_target == ACPI_STATE_S0) 959 return 1; 960 961 if (adev->power.flags.dsw_present) 962 return 0; 963 964 ret = acpi_dev_pm_get_state(dev, adev, sys_target, NULL, &state); 965 return !ret && state == adev->power.state; 966 } 967 EXPORT_SYMBOL_GPL(acpi_subsys_prepare); 968 969 /** 970 * acpi_subsys_complete - Finalize device's resume during system resume. 971 * @dev: Device to handle. 972 */ 973 void acpi_subsys_complete(struct device *dev) 974 { 975 pm_generic_complete(dev); 976 /* 977 * If the device had been runtime-suspended before the system went into 978 * the sleep state it is going out of and it has never been resumed till 979 * now, resume it in case the firmware powered it up. 980 */ 981 if (dev->power.direct_complete) 982 pm_request_resume(dev); 983 } 984 EXPORT_SYMBOL_GPL(acpi_subsys_complete); 985 986 /** 987 * acpi_subsys_suspend - Run the device driver's suspend callback. 988 * @dev: Device to handle. 989 * 990 * Follow PCI and resume devices suspended at run time before running their 991 * system suspend callbacks. 992 */ 993 int acpi_subsys_suspend(struct device *dev) 994 { 995 pm_runtime_resume(dev); 996 return pm_generic_suspend(dev); 997 } 998 EXPORT_SYMBOL_GPL(acpi_subsys_suspend); 999 1000 /** 1001 * acpi_subsys_suspend_late - Suspend device using ACPI. 1002 * @dev: Device to suspend. 1003 * 1004 * Carry out the generic late suspend procedure for @dev and use ACPI to put 1005 * it into a low-power state during system transition into a sleep state. 1006 */ 1007 int acpi_subsys_suspend_late(struct device *dev) 1008 { 1009 int ret = pm_generic_suspend_late(dev); 1010 return ret ? ret : acpi_dev_suspend_late(dev); 1011 } 1012 EXPORT_SYMBOL_GPL(acpi_subsys_suspend_late); 1013 1014 /** 1015 * acpi_subsys_resume_early - Resume device using ACPI. 1016 * @dev: Device to Resume. 1017 * 1018 * Use ACPI to put the given device into the full-power state and carry out the 1019 * generic early resume procedure for it during system transition into the 1020 * working state. 1021 */ 1022 int acpi_subsys_resume_early(struct device *dev) 1023 { 1024 int ret = acpi_dev_resume_early(dev); 1025 return ret ? ret : pm_generic_resume_early(dev); 1026 } 1027 EXPORT_SYMBOL_GPL(acpi_subsys_resume_early); 1028 1029 /** 1030 * acpi_subsys_freeze - Run the device driver's freeze callback. 1031 * @dev: Device to handle. 1032 */ 1033 int acpi_subsys_freeze(struct device *dev) 1034 { 1035 /* 1036 * This used to be done in acpi_subsys_prepare() for all devices and 1037 * some drivers may depend on it, so do it here. Ideally, however, 1038 * runtime-suspended devices should not be touched during freeze/thaw 1039 * transitions. 1040 */ 1041 pm_runtime_resume(dev); 1042 return pm_generic_freeze(dev); 1043 } 1044 EXPORT_SYMBOL_GPL(acpi_subsys_freeze); 1045 1046 #endif /* CONFIG_PM_SLEEP */ 1047 1048 static struct dev_pm_domain acpi_general_pm_domain = { 1049 .ops = { 1050 .runtime_suspend = acpi_subsys_runtime_suspend, 1051 .runtime_resume = acpi_subsys_runtime_resume, 1052 #ifdef CONFIG_PM_SLEEP 1053 .prepare = acpi_subsys_prepare, 1054 .complete = acpi_subsys_complete, 1055 .suspend = acpi_subsys_suspend, 1056 .suspend_late = acpi_subsys_suspend_late, 1057 .resume_early = acpi_subsys_resume_early, 1058 .freeze = acpi_subsys_freeze, 1059 .poweroff = acpi_subsys_suspend, 1060 .poweroff_late = acpi_subsys_suspend_late, 1061 .restore_early = acpi_subsys_resume_early, 1062 #endif 1063 }, 1064 }; 1065 1066 /** 1067 * acpi_dev_pm_detach - Remove ACPI power management from the device. 1068 * @dev: Device to take care of. 1069 * @power_off: Whether or not to try to remove power from the device. 1070 * 1071 * Remove the device from the general ACPI PM domain and remove its wakeup 1072 * notifier. If @power_off is set, additionally remove power from the device if 1073 * possible. 1074 * 1075 * Callers must ensure proper synchronization of this function with power 1076 * management callbacks. 1077 */ 1078 static void acpi_dev_pm_detach(struct device *dev, bool power_off) 1079 { 1080 struct acpi_device *adev = ACPI_COMPANION(dev); 1081 1082 if (adev && dev->pm_domain == &acpi_general_pm_domain) { 1083 dev->pm_domain = NULL; 1084 acpi_remove_pm_notifier(adev); 1085 if (power_off) { 1086 /* 1087 * If the device's PM QoS resume latency limit or flags 1088 * have been exposed to user space, they have to be 1089 * hidden at this point, so that they don't affect the 1090 * choice of the low-power state to put the device into. 1091 */ 1092 dev_pm_qos_hide_latency_limit(dev); 1093 dev_pm_qos_hide_flags(dev); 1094 acpi_device_wakeup(adev, ACPI_STATE_S0, false); 1095 acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); 1096 } 1097 } 1098 } 1099 1100 /** 1101 * acpi_dev_pm_attach - Prepare device for ACPI power management. 1102 * @dev: Device to prepare. 1103 * @power_on: Whether or not to power on the device. 1104 * 1105 * If @dev has a valid ACPI handle that has a valid struct acpi_device object 1106 * attached to it, install a wakeup notification handler for the device and 1107 * add it to the general ACPI PM domain. If @power_on is set, the device will 1108 * be put into the ACPI D0 state before the function returns. 1109 * 1110 * This assumes that the @dev's bus type uses generic power management callbacks 1111 * (or doesn't use any power management callbacks at all). 1112 * 1113 * Callers must ensure proper synchronization of this function with power 1114 * management callbacks. 1115 */ 1116 int acpi_dev_pm_attach(struct device *dev, bool power_on) 1117 { 1118 struct acpi_device *adev = ACPI_COMPANION(dev); 1119 1120 if (!adev) 1121 return -ENODEV; 1122 1123 if (dev->pm_domain) 1124 return -EEXIST; 1125 1126 acpi_add_pm_notifier(adev, dev, acpi_pm_notify_work_func); 1127 dev->pm_domain = &acpi_general_pm_domain; 1128 if (power_on) { 1129 acpi_dev_pm_full_power(adev); 1130 acpi_device_wakeup(adev, ACPI_STATE_S0, false); 1131 } 1132 1133 dev->pm_domain->detach = acpi_dev_pm_detach; 1134 return 0; 1135 } 1136 EXPORT_SYMBOL_GPL(acpi_dev_pm_attach); 1137 #endif /* CONFIG_PM */ 1138