linux/drivers/base/power/sysfs.c
<<
>>
Prefs
   1/*
   2 * drivers/base/power/sysfs.c - sysfs entries for device PM
   3 */
   4
   5#include <linux/device.h>
   6#include <linux/string.h>
   7#include <linux/export.h>
   8#include <linux/pm_qos.h>
   9#include <linux/pm_runtime.h>
  10#include <linux/atomic.h>
  11#include <linux/jiffies.h>
  12#include "power.h"
  13
  14/*
  15 *      control - Report/change current runtime PM setting of the device
  16 *
  17 *      Runtime power management of a device can be blocked with the help of
  18 *      this attribute.  All devices have one of the following two values for
  19 *      the power/control file:
  20 *
  21 *       + "auto\n" to allow the device to be power managed at run time;
  22 *       + "on\n" to prevent the device from being power managed at run time;
  23 *
  24 *      The default for all devices is "auto", which means that devices may be
  25 *      subject to automatic power management, depending on their drivers.
  26 *      Changing this attribute to "on" prevents the driver from power managing
  27 *      the device at run time.  Doing that while the device is suspended causes
  28 *      it to be woken up.
  29 *
  30 *      wakeup - Report/change current wakeup option for device
  31 *
  32 *      Some devices support "wakeup" events, which are hardware signals
  33 *      used to activate devices from suspended or low power states.  Such
  34 *      devices have one of three values for the sysfs power/wakeup file:
  35 *
  36 *       + "enabled\n" to issue the events;
  37 *       + "disabled\n" not to do so; or
  38 *       + "\n" for temporary or permanent inability to issue wakeup.
  39 *
  40 *      (For example, unconfigured USB devices can't issue wakeups.)
  41 *
  42 *      Familiar examples of devices that can issue wakeup events include
  43 *      keyboards and mice (both PS2 and USB styles), power buttons, modems,
  44 *      "Wake-On-LAN" Ethernet links, GPIO lines, and more.  Some events
  45 *      will wake the entire system from a suspend state; others may just
  46 *      wake up the device (if the system as a whole is already active).
  47 *      Some wakeup events use normal IRQ lines; other use special out
  48 *      of band signaling.
  49 *
  50 *      It is the responsibility of device drivers to enable (or disable)
  51 *      wakeup signaling as part of changing device power states, respecting
  52 *      the policy choices provided through the driver model.
  53 *
  54 *      Devices may not be able to generate wakeup events from all power
  55 *      states.  Also, the events may be ignored in some configurations;
  56 *      for example, they might need help from other devices that aren't
  57 *      active, or which may have wakeup disabled.  Some drivers rely on
  58 *      wakeup events internally (unless they are disabled), keeping
  59 *      their hardware in low power modes whenever they're unused.  This
  60 *      saves runtime power, without requiring system-wide sleep states.
  61 *
  62 *      async - Report/change current async suspend setting for the device
  63 *
  64 *      Asynchronous suspend and resume of the device during system-wide power
  65 *      state transitions can be enabled by writing "enabled" to this file.
  66 *      Analogously, if "disabled" is written to this file, the device will be
  67 *      suspended and resumed synchronously.
  68 *
  69 *      All devices have one of the following two values for power/async:
  70 *
  71 *       + "enabled\n" to permit the asynchronous suspend/resume of the device;
  72 *       + "disabled\n" to forbid it;
  73 *
  74 *      NOTE: It generally is unsafe to permit the asynchronous suspend/resume
  75 *      of a device unless it is certain that all of the PM dependencies of the
  76 *      device are known to the PM core.  However, for some devices this
  77 *      attribute is set to "enabled" by bus type code or device drivers and in
  78 *      that cases it should be safe to leave the default value.
  79 *
  80 *      autosuspend_delay_ms - Report/change a device's autosuspend_delay value
  81 *
  82 *      Some drivers don't want to carry out a runtime suspend as soon as a
  83 *      device becomes idle; they want it always to remain idle for some period
  84 *      of time before suspending it.  This period is the autosuspend_delay
  85 *      value (expressed in milliseconds) and it can be controlled by the user.
  86 *      If the value is negative then the device will never be runtime
  87 *      suspended.
  88 *
  89 *      NOTE: The autosuspend_delay_ms attribute and the autosuspend_delay
  90 *      value are used only if the driver calls pm_runtime_use_autosuspend().
  91 *
  92 *      wakeup_count - Report the number of wakeup events related to the device
  93 */
  94
  95const char power_group_name[] = "power";
  96EXPORT_SYMBOL_GPL(power_group_name);
  97
  98static const char ctrl_auto[] = "auto";
  99static const char ctrl_on[] = "on";
 100
 101static ssize_t control_show(struct device *dev, struct device_attribute *attr,
 102                            char *buf)
 103{
 104        return sprintf(buf, "%s\n",
 105                                dev->power.runtime_auto ? ctrl_auto : ctrl_on);
 106}
 107
 108static ssize_t control_store(struct device * dev, struct device_attribute *attr,
 109                             const char * buf, size_t n)
 110{
 111        char *cp;
 112        int len = n;
 113
 114        cp = memchr(buf, '\n', n);
 115        if (cp)
 116                len = cp - buf;
 117        device_lock(dev);
 118        if (len == sizeof ctrl_auto - 1 && strncmp(buf, ctrl_auto, len) == 0)
 119                pm_runtime_allow(dev);
 120        else if (len == sizeof ctrl_on - 1 && strncmp(buf, ctrl_on, len) == 0)
 121                pm_runtime_forbid(dev);
 122        else
 123                n = -EINVAL;
 124        device_unlock(dev);
 125        return n;
 126}
 127
 128static DEVICE_ATTR(control, 0644, control_show, control_store);
 129
 130static ssize_t rtpm_active_time_show(struct device *dev,
 131                                struct device_attribute *attr, char *buf)
 132{
 133        int ret;
 134        spin_lock_irq(&dev->power.lock);
 135        update_pm_runtime_accounting(dev);
 136        ret = sprintf(buf, "%i\n", jiffies_to_msecs(dev->power.active_jiffies));
 137        spin_unlock_irq(&dev->power.lock);
 138        return ret;
 139}
 140
 141static DEVICE_ATTR(runtime_active_time, 0444, rtpm_active_time_show, NULL);
 142
 143static ssize_t rtpm_suspended_time_show(struct device *dev,
 144                                struct device_attribute *attr, char *buf)
 145{
 146        int ret;
 147        spin_lock_irq(&dev->power.lock);
 148        update_pm_runtime_accounting(dev);
 149        ret = sprintf(buf, "%i\n",
 150                jiffies_to_msecs(dev->power.suspended_jiffies));
 151        spin_unlock_irq(&dev->power.lock);
 152        return ret;
 153}
 154
 155static DEVICE_ATTR(runtime_suspended_time, 0444, rtpm_suspended_time_show, NULL);
 156
 157static ssize_t rtpm_status_show(struct device *dev,
 158                                struct device_attribute *attr, char *buf)
 159{
 160        const char *p;
 161
 162        if (dev->power.runtime_error) {
 163                p = "error\n";
 164        } else if (dev->power.disable_depth) {
 165                p = "unsupported\n";
 166        } else {
 167                switch (dev->power.runtime_status) {
 168                case RPM_SUSPENDED:
 169                        p = "suspended\n";
 170                        break;
 171                case RPM_SUSPENDING:
 172                        p = "suspending\n";
 173                        break;
 174                case RPM_RESUMING:
 175                        p = "resuming\n";
 176                        break;
 177                case RPM_ACTIVE:
 178                        p = "active\n";
 179                        break;
 180                default:
 181                        return -EIO;
 182                }
 183        }
 184        return sprintf(buf, p);
 185}
 186
 187static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL);
 188
 189static ssize_t autosuspend_delay_ms_show(struct device *dev,
 190                struct device_attribute *attr, char *buf)
 191{
 192        if (!dev->power.use_autosuspend)
 193                return -EIO;
 194        return sprintf(buf, "%d\n", dev->power.autosuspend_delay);
 195}
 196
 197static ssize_t autosuspend_delay_ms_store(struct device *dev,
 198                struct device_attribute *attr, const char *buf, size_t n)
 199{
 200        long delay;
 201
 202        if (!dev->power.use_autosuspend)
 203                return -EIO;
 204
 205        if (kstrtol(buf, 10, &delay) != 0 || delay != (int) delay)
 206                return -EINVAL;
 207
 208        device_lock(dev);
 209        pm_runtime_set_autosuspend_delay(dev, delay);
 210        device_unlock(dev);
 211        return n;
 212}
 213
 214static DEVICE_ATTR(autosuspend_delay_ms, 0644, autosuspend_delay_ms_show,
 215                autosuspend_delay_ms_store);
 216
 217static ssize_t pm_qos_resume_latency_show(struct device *dev,
 218                                          struct device_attribute *attr,
 219                                          char *buf)
 220{
 221        return sprintf(buf, "%d\n", dev_pm_qos_requested_resume_latency(dev));
 222}
 223
 224static ssize_t pm_qos_resume_latency_store(struct device *dev,
 225                                           struct device_attribute *attr,
 226                                           const char *buf, size_t n)
 227{
 228        s32 value;
 229        int ret;
 230
 231        if (kstrtos32(buf, 0, &value))
 232                return -EINVAL;
 233
 234        if (value < 0)
 235                return -EINVAL;
 236
 237        ret = dev_pm_qos_update_request(dev->power.qos->resume_latency_req,
 238                                        value);
 239        return ret < 0 ? ret : n;
 240}
 241
 242static DEVICE_ATTR(pm_qos_resume_latency_us, 0644,
 243                   pm_qos_resume_latency_show, pm_qos_resume_latency_store);
 244
 245static ssize_t pm_qos_latency_tolerance_show(struct device *dev,
 246                                             struct device_attribute *attr,
 247                                             char *buf)
 248{
 249        s32 value = dev_pm_qos_get_user_latency_tolerance(dev);
 250
 251        if (value < 0)
 252                return sprintf(buf, "auto\n");
 253        else if (value == PM_QOS_LATENCY_ANY)
 254                return sprintf(buf, "any\n");
 255
 256        return sprintf(buf, "%d\n", value);
 257}
 258
 259static ssize_t pm_qos_latency_tolerance_store(struct device *dev,
 260                                              struct device_attribute *attr,
 261                                              const char *buf, size_t n)
 262{
 263        s32 value;
 264        int ret;
 265
 266        if (kstrtos32(buf, 0, &value)) {
 267                if (!strcmp(buf, "auto") || !strcmp(buf, "auto\n"))
 268                        value = PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT;
 269                else if (!strcmp(buf, "any") || !strcmp(buf, "any\n"))
 270                        value = PM_QOS_LATENCY_ANY;
 271        }
 272        ret = dev_pm_qos_update_user_latency_tolerance(dev, value);
 273        return ret < 0 ? ret : n;
 274}
 275
 276static DEVICE_ATTR(pm_qos_latency_tolerance_us, 0644,
 277                   pm_qos_latency_tolerance_show, pm_qos_latency_tolerance_store);
 278
 279static ssize_t pm_qos_no_power_off_show(struct device *dev,
 280                                        struct device_attribute *attr,
 281                                        char *buf)
 282{
 283        return sprintf(buf, "%d\n", !!(dev_pm_qos_requested_flags(dev)
 284                                        & PM_QOS_FLAG_NO_POWER_OFF));
 285}
 286
 287static ssize_t pm_qos_no_power_off_store(struct device *dev,
 288                                         struct device_attribute *attr,
 289                                         const char *buf, size_t n)
 290{
 291        int ret;
 292
 293        if (kstrtoint(buf, 0, &ret))
 294                return -EINVAL;
 295
 296        if (ret != 0 && ret != 1)
 297                return -EINVAL;
 298
 299        ret = dev_pm_qos_update_flags(dev, PM_QOS_FLAG_NO_POWER_OFF, ret);
 300        return ret < 0 ? ret : n;
 301}
 302
 303static DEVICE_ATTR(pm_qos_no_power_off, 0644,
 304                   pm_qos_no_power_off_show, pm_qos_no_power_off_store);
 305
 306static ssize_t pm_qos_remote_wakeup_show(struct device *dev,
 307                                         struct device_attribute *attr,
 308                                         char *buf)
 309{
 310        return sprintf(buf, "%d\n", !!(dev_pm_qos_requested_flags(dev)
 311                                        & PM_QOS_FLAG_REMOTE_WAKEUP));
 312}
 313
 314static ssize_t pm_qos_remote_wakeup_store(struct device *dev,
 315                                          struct device_attribute *attr,
 316                                          const char *buf, size_t n)
 317{
 318        int ret;
 319
 320        if (kstrtoint(buf, 0, &ret))
 321                return -EINVAL;
 322
 323        if (ret != 0 && ret != 1)
 324                return -EINVAL;
 325
 326        ret = dev_pm_qos_update_flags(dev, PM_QOS_FLAG_REMOTE_WAKEUP, ret);
 327        return ret < 0 ? ret : n;
 328}
 329
 330static DEVICE_ATTR(pm_qos_remote_wakeup, 0644,
 331                   pm_qos_remote_wakeup_show, pm_qos_remote_wakeup_store);
 332
 333#ifdef CONFIG_PM_SLEEP
 334static const char _enabled[] = "enabled";
 335static const char _disabled[] = "disabled";
 336
 337static ssize_t
 338wake_show(struct device * dev, struct device_attribute *attr, char * buf)
 339{
 340        return sprintf(buf, "%s\n", device_can_wakeup(dev)
 341                ? (device_may_wakeup(dev) ? _enabled : _disabled)
 342                : "");
 343}
 344
 345static ssize_t
 346wake_store(struct device * dev, struct device_attribute *attr,
 347        const char * buf, size_t n)
 348{
 349        char *cp;
 350        int len = n;
 351
 352        if (!device_can_wakeup(dev))
 353                return -EINVAL;
 354
 355        cp = memchr(buf, '\n', n);
 356        if (cp)
 357                len = cp - buf;
 358        if (len == sizeof _enabled - 1
 359                        && strncmp(buf, _enabled, sizeof _enabled - 1) == 0)
 360                device_set_wakeup_enable(dev, 1);
 361        else if (len == sizeof _disabled - 1
 362                        && strncmp(buf, _disabled, sizeof _disabled - 1) == 0)
 363                device_set_wakeup_enable(dev, 0);
 364        else
 365                return -EINVAL;
 366        return n;
 367}
 368
 369static DEVICE_ATTR(wakeup, 0644, wake_show, wake_store);
 370
 371static ssize_t wakeup_count_show(struct device *dev,
 372                                struct device_attribute *attr, char *buf)
 373{
 374        unsigned long count = 0;
 375        bool enabled = false;
 376
 377        spin_lock_irq(&dev->power.lock);
 378        if (dev->power.wakeup) {
 379                count = dev->power.wakeup->event_count;
 380                enabled = true;
 381        }
 382        spin_unlock_irq(&dev->power.lock);
 383        return enabled ? sprintf(buf, "%lu\n", count) : sprintf(buf, "\n");
 384}
 385
 386static DEVICE_ATTR(wakeup_count, 0444, wakeup_count_show, NULL);
 387
 388static ssize_t wakeup_active_count_show(struct device *dev,
 389                                struct device_attribute *attr, char *buf)
 390{
 391        unsigned long count = 0;
 392        bool enabled = false;
 393
 394        spin_lock_irq(&dev->power.lock);
 395        if (dev->power.wakeup) {
 396                count = dev->power.wakeup->active_count;
 397                enabled = true;
 398        }
 399        spin_unlock_irq(&dev->power.lock);
 400        return enabled ? sprintf(buf, "%lu\n", count) : sprintf(buf, "\n");
 401}
 402
 403static DEVICE_ATTR(wakeup_active_count, 0444, wakeup_active_count_show, NULL);
 404
 405static ssize_t wakeup_abort_count_show(struct device *dev,
 406                                        struct device_attribute *attr,
 407                                        char *buf)
 408{
 409        unsigned long count = 0;
 410        bool enabled = false;
 411
 412        spin_lock_irq(&dev->power.lock);
 413        if (dev->power.wakeup) {
 414                count = dev->power.wakeup->wakeup_count;
 415                enabled = true;
 416        }
 417        spin_unlock_irq(&dev->power.lock);
 418        return enabled ? sprintf(buf, "%lu\n", count) : sprintf(buf, "\n");
 419}
 420
 421static DEVICE_ATTR(wakeup_abort_count, 0444, wakeup_abort_count_show, NULL);
 422
 423static ssize_t wakeup_expire_count_show(struct device *dev,
 424                                        struct device_attribute *attr,
 425                                        char *buf)
 426{
 427        unsigned long count = 0;
 428        bool enabled = false;
 429
 430        spin_lock_irq(&dev->power.lock);
 431        if (dev->power.wakeup) {
 432                count = dev->power.wakeup->expire_count;
 433                enabled = true;
 434        }
 435        spin_unlock_irq(&dev->power.lock);
 436        return enabled ? sprintf(buf, "%lu\n", count) : sprintf(buf, "\n");
 437}
 438
 439static DEVICE_ATTR(wakeup_expire_count, 0444, wakeup_expire_count_show, NULL);
 440
 441static ssize_t wakeup_active_show(struct device *dev,
 442                                struct device_attribute *attr, char *buf)
 443{
 444        unsigned int active = 0;
 445        bool enabled = false;
 446
 447        spin_lock_irq(&dev->power.lock);
 448        if (dev->power.wakeup) {
 449                active = dev->power.wakeup->active;
 450                enabled = true;
 451        }
 452        spin_unlock_irq(&dev->power.lock);
 453        return enabled ? sprintf(buf, "%u\n", active) : sprintf(buf, "\n");
 454}
 455
 456static DEVICE_ATTR(wakeup_active, 0444, wakeup_active_show, NULL);
 457
 458static ssize_t wakeup_total_time_show(struct device *dev,
 459                                struct device_attribute *attr, char *buf)
 460{
 461        s64 msec = 0;
 462        bool enabled = false;
 463
 464        spin_lock_irq(&dev->power.lock);
 465        if (dev->power.wakeup) {
 466                msec = ktime_to_ms(dev->power.wakeup->total_time);
 467                enabled = true;
 468        }
 469        spin_unlock_irq(&dev->power.lock);
 470        return enabled ? sprintf(buf, "%lld\n", msec) : sprintf(buf, "\n");
 471}
 472
 473static DEVICE_ATTR(wakeup_total_time_ms, 0444, wakeup_total_time_show, NULL);
 474
 475static ssize_t wakeup_max_time_show(struct device *dev,
 476                                struct device_attribute *attr, char *buf)
 477{
 478        s64 msec = 0;
 479        bool enabled = false;
 480
 481        spin_lock_irq(&dev->power.lock);
 482        if (dev->power.wakeup) {
 483                msec = ktime_to_ms(dev->power.wakeup->max_time);
 484                enabled = true;
 485        }
 486        spin_unlock_irq(&dev->power.lock);
 487        return enabled ? sprintf(buf, "%lld\n", msec) : sprintf(buf, "\n");
 488}
 489
 490static DEVICE_ATTR(wakeup_max_time_ms, 0444, wakeup_max_time_show, NULL);
 491
 492static ssize_t wakeup_last_time_show(struct device *dev,
 493                                struct device_attribute *attr, char *buf)
 494{
 495        s64 msec = 0;
 496        bool enabled = false;
 497
 498        spin_lock_irq(&dev->power.lock);
 499        if (dev->power.wakeup) {
 500                msec = ktime_to_ms(dev->power.wakeup->last_time);
 501                enabled = true;
 502        }
 503        spin_unlock_irq(&dev->power.lock);
 504        return enabled ? sprintf(buf, "%lld\n", msec) : sprintf(buf, "\n");
 505}
 506
 507static DEVICE_ATTR(wakeup_last_time_ms, 0444, wakeup_last_time_show, NULL);
 508
 509#ifdef CONFIG_PM_AUTOSLEEP
 510static ssize_t wakeup_prevent_sleep_time_show(struct device *dev,
 511                                              struct device_attribute *attr,
 512                                              char *buf)
 513{
 514        s64 msec = 0;
 515        bool enabled = false;
 516
 517        spin_lock_irq(&dev->power.lock);
 518        if (dev->power.wakeup) {
 519                msec = ktime_to_ms(dev->power.wakeup->prevent_sleep_time);
 520                enabled = true;
 521        }
 522        spin_unlock_irq(&dev->power.lock);
 523        return enabled ? sprintf(buf, "%lld\n", msec) : sprintf(buf, "\n");
 524}
 525
 526static DEVICE_ATTR(wakeup_prevent_sleep_time_ms, 0444,
 527                   wakeup_prevent_sleep_time_show, NULL);
 528#endif /* CONFIG_PM_AUTOSLEEP */
 529#endif /* CONFIG_PM_SLEEP */
 530
 531#ifdef CONFIG_PM_ADVANCED_DEBUG
 532static ssize_t rtpm_usagecount_show(struct device *dev,
 533                                    struct device_attribute *attr, char *buf)
 534{
 535        return sprintf(buf, "%d\n", atomic_read(&dev->power.usage_count));
 536}
 537
 538static ssize_t rtpm_children_show(struct device *dev,
 539                                  struct device_attribute *attr, char *buf)
 540{
 541        return sprintf(buf, "%d\n", dev->power.ignore_children ?
 542                0 : atomic_read(&dev->power.child_count));
 543}
 544
 545static ssize_t rtpm_enabled_show(struct device *dev,
 546                                 struct device_attribute *attr, char *buf)
 547{
 548        if ((dev->power.disable_depth) && (dev->power.runtime_auto == false))
 549                return sprintf(buf, "disabled & forbidden\n");
 550        else if (dev->power.disable_depth)
 551                return sprintf(buf, "disabled\n");
 552        else if (dev->power.runtime_auto == false)
 553                return sprintf(buf, "forbidden\n");
 554        return sprintf(buf, "enabled\n");
 555}
 556
 557static DEVICE_ATTR(runtime_usage, 0444, rtpm_usagecount_show, NULL);
 558static DEVICE_ATTR(runtime_active_kids, 0444, rtpm_children_show, NULL);
 559static DEVICE_ATTR(runtime_enabled, 0444, rtpm_enabled_show, NULL);
 560
 561#ifdef CONFIG_PM_SLEEP
 562static ssize_t async_show(struct device *dev, struct device_attribute *attr,
 563                          char *buf)
 564{
 565        return sprintf(buf, "%s\n",
 566                        device_async_suspend_enabled(dev) ?
 567                                _enabled : _disabled);
 568}
 569
 570static ssize_t async_store(struct device *dev, struct device_attribute *attr,
 571                           const char *buf, size_t n)
 572{
 573        char *cp;
 574        int len = n;
 575
 576        cp = memchr(buf, '\n', n);
 577        if (cp)
 578                len = cp - buf;
 579        if (len == sizeof _enabled - 1 && strncmp(buf, _enabled, len) == 0)
 580                device_enable_async_suspend(dev);
 581        else if (len == sizeof _disabled - 1 &&
 582                 strncmp(buf, _disabled, len) == 0)
 583                device_disable_async_suspend(dev);
 584        else
 585                return -EINVAL;
 586        return n;
 587}
 588
 589static DEVICE_ATTR(async, 0644, async_show, async_store);
 590
 591#endif /* CONFIG_PM_SLEEP */
 592#endif /* CONFIG_PM_ADVANCED_DEBUG */
 593
 594static struct attribute *power_attrs[] = {
 595#ifdef CONFIG_PM_ADVANCED_DEBUG
 596#ifdef CONFIG_PM_SLEEP
 597        &dev_attr_async.attr,
 598#endif
 599        &dev_attr_runtime_status.attr,
 600        &dev_attr_runtime_usage.attr,
 601        &dev_attr_runtime_active_kids.attr,
 602        &dev_attr_runtime_enabled.attr,
 603#endif /* CONFIG_PM_ADVANCED_DEBUG */
 604        NULL,
 605};
 606static struct attribute_group pm_attr_group = {
 607        .name   = power_group_name,
 608        .attrs  = power_attrs,
 609};
 610
 611static struct attribute *wakeup_attrs[] = {
 612#ifdef CONFIG_PM_SLEEP
 613        &dev_attr_wakeup.attr,
 614        &dev_attr_wakeup_count.attr,
 615        &dev_attr_wakeup_active_count.attr,
 616        &dev_attr_wakeup_abort_count.attr,
 617        &dev_attr_wakeup_expire_count.attr,
 618        &dev_attr_wakeup_active.attr,
 619        &dev_attr_wakeup_total_time_ms.attr,
 620        &dev_attr_wakeup_max_time_ms.attr,
 621        &dev_attr_wakeup_last_time_ms.attr,
 622#ifdef CONFIG_PM_AUTOSLEEP
 623        &dev_attr_wakeup_prevent_sleep_time_ms.attr,
 624#endif
 625#endif
 626        NULL,
 627};
 628static struct attribute_group pm_wakeup_attr_group = {
 629        .name   = power_group_name,
 630        .attrs  = wakeup_attrs,
 631};
 632
 633static struct attribute *runtime_attrs[] = {
 634#ifndef CONFIG_PM_ADVANCED_DEBUG
 635        &dev_attr_runtime_status.attr,
 636#endif
 637        &dev_attr_control.attr,
 638        &dev_attr_runtime_suspended_time.attr,
 639        &dev_attr_runtime_active_time.attr,
 640        &dev_attr_autosuspend_delay_ms.attr,
 641        NULL,
 642};
 643static struct attribute_group pm_runtime_attr_group = {
 644        .name   = power_group_name,
 645        .attrs  = runtime_attrs,
 646};
 647
 648static struct attribute *pm_qos_resume_latency_attrs[] = {
 649        &dev_attr_pm_qos_resume_latency_us.attr,
 650        NULL,
 651};
 652static struct attribute_group pm_qos_resume_latency_attr_group = {
 653        .name   = power_group_name,
 654        .attrs  = pm_qos_resume_latency_attrs,
 655};
 656
 657static struct attribute *pm_qos_latency_tolerance_attrs[] = {
 658        &dev_attr_pm_qos_latency_tolerance_us.attr,
 659        NULL,
 660};
 661static struct attribute_group pm_qos_latency_tolerance_attr_group = {
 662        .name   = power_group_name,
 663        .attrs  = pm_qos_latency_tolerance_attrs,
 664};
 665
 666static struct attribute *pm_qos_flags_attrs[] = {
 667        &dev_attr_pm_qos_no_power_off.attr,
 668        &dev_attr_pm_qos_remote_wakeup.attr,
 669        NULL,
 670};
 671static struct attribute_group pm_qos_flags_attr_group = {
 672        .name   = power_group_name,
 673        .attrs  = pm_qos_flags_attrs,
 674};
 675
 676int dpm_sysfs_add(struct device *dev)
 677{
 678        int rc;
 679
 680        rc = sysfs_create_group(&dev->kobj, &pm_attr_group);
 681        if (rc)
 682                return rc;
 683
 684        if (pm_runtime_callbacks_present(dev)) {
 685                rc = sysfs_merge_group(&dev->kobj, &pm_runtime_attr_group);
 686                if (rc)
 687                        goto err_out;
 688        }
 689        if (device_can_wakeup(dev)) {
 690                rc = sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group);
 691                if (rc)
 692                        goto err_runtime;
 693        }
 694        if (dev->power.set_latency_tolerance) {
 695                rc = sysfs_merge_group(&dev->kobj,
 696                                       &pm_qos_latency_tolerance_attr_group);
 697                if (rc)
 698                        goto err_wakeup;
 699        }
 700        return 0;
 701
 702 err_wakeup:
 703        sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group);
 704 err_runtime:
 705        sysfs_unmerge_group(&dev->kobj, &pm_runtime_attr_group);
 706 err_out:
 707        sysfs_remove_group(&dev->kobj, &pm_attr_group);
 708        return rc;
 709}
 710
 711int wakeup_sysfs_add(struct device *dev)
 712{
 713        return sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group);
 714}
 715
 716void wakeup_sysfs_remove(struct device *dev)
 717{
 718        sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group);
 719}
 720
 721int pm_qos_sysfs_add_resume_latency(struct device *dev)
 722{
 723        return sysfs_merge_group(&dev->kobj, &pm_qos_resume_latency_attr_group);
 724}
 725
 726void pm_qos_sysfs_remove_resume_latency(struct device *dev)
 727{
 728        sysfs_unmerge_group(&dev->kobj, &pm_qos_resume_latency_attr_group);
 729}
 730
 731int pm_qos_sysfs_add_flags(struct device *dev)
 732{
 733        return sysfs_merge_group(&dev->kobj, &pm_qos_flags_attr_group);
 734}
 735
 736void pm_qos_sysfs_remove_flags(struct device *dev)
 737{
 738        sysfs_unmerge_group(&dev->kobj, &pm_qos_flags_attr_group);
 739}
 740
 741int pm_qos_sysfs_add_latency_tolerance(struct device *dev)
 742{
 743        return sysfs_merge_group(&dev->kobj,
 744                                 &pm_qos_latency_tolerance_attr_group);
 745}
 746
 747void pm_qos_sysfs_remove_latency_tolerance(struct device *dev)
 748{
 749        sysfs_unmerge_group(&dev->kobj, &pm_qos_latency_tolerance_attr_group);
 750}
 751
 752void rpm_sysfs_remove(struct device *dev)
 753{
 754        sysfs_unmerge_group(&dev->kobj, &pm_runtime_attr_group);
 755}
 756
 757void dpm_sysfs_remove(struct device *dev)
 758{
 759        sysfs_unmerge_group(&dev->kobj, &pm_qos_latency_tolerance_attr_group);
 760        dev_pm_qos_constraints_destroy(dev);
 761        rpm_sysfs_remove(dev);
 762        sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group);
 763        sysfs_remove_group(&dev->kobj, &pm_attr_group);
 764}
 765