linux/drivers/acpi/device_pm.c
<<
>>
Prefs
   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
  38ACPI_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 */
  44const 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 */
  71int 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
 136static 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 */
 157int 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}
 236EXPORT_SYMBOL(acpi_device_set_power);
 237
 238int 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}
 256EXPORT_SYMBOL(acpi_bus_set_power);
 257
 258int 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 */
 301int 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
 313int 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}
 349EXPORT_SYMBOL_GPL(acpi_bus_update_power);
 350
 351bool 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}
 359EXPORT_SYMBOL(acpi_bus_power_manageable);
 360
 361#ifdef CONFIG_PM
 362static 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 */
 374acpi_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 */
 401acpi_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
 424bool 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}
 432EXPORT_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 */
 455static 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 */
 553int 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}
 595EXPORT_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 */
 604static 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 */
 626int __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 */
 655int 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}
 672EXPORT_SYMBOL(acpi_pm_device_run_wake);
 673#else
 674static 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 */
 685int __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 */
 698int 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 */
 727struct 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 */
 741static 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 */
 757static 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 */
 773int 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}
 794EXPORT_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 */
 804int 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}
 816EXPORT_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 */
 825int 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}
 830EXPORT_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 */
 839int 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}
 844EXPORT_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 */
 857int 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}
 879EXPORT_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 */
 889int 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}
 901EXPORT_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 */
 907int 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}
 916EXPORT_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 */
 925int 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}
 930EXPORT_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 */
 940int 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}
 945EXPORT_SYMBOL_GPL(acpi_subsys_resume_early);
 946#endif /* CONFIG_PM_SLEEP */
 947
 948static 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 */
 980int 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}
 998EXPORT_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 */
1012void 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}
1033EXPORT_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 */
1040void 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}
1063EXPORT_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 */
1070void 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}
1089EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent);
1090#endif /* CONFIG_PM */
1091
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.