1. 01 May, 2012 1 commit
  2. 01 Dec, 2011 1 commit
    • Rafael J. Wysocki's avatar
      PM / Runtime: Use device PM QoS constraints (v2) · 00dc9ad1
      Rafael J. Wysocki authored
      Make the runtime PM core use device PM QoS constraints to check if
      it is allowed to suspend a given device, so that an error code is
      returned if the device's own PM QoS constraint is negative or one of
      its children has already been suspended for too long.  If this is
      not the case, the maximum estimated time the device is allowed to be
      suspended, computed as the minimum of the device's PM QoS constraint
      and the PM QoS constraints of its children (reduced by the difference
      between the current time and their suspend times) is stored in a new
      device's PM field power.max_time_suspended_ns that can be used by
      the device's subsystem or PM domain to decide whether or not to put
      the device into lower-power (and presumably higher-latency) states
      later (if the constraint is 0, which means "no constraint", the
      power.max_time_suspended_ns is set to -1).
      
      Additionally, the time of execution of the subsystem-level
      .runtime_suspend() callback for the device is recorded in the new
      power.suspend_time field for later use by the device's subsystem or
      PM domain along with power.max_time_suspended_ns (it also is used
      by the core code when the device's parent is suspended).
      
      Introduce a new helper function,
      pm_runtime_update_max_time_suspended(), allowing subsystems and PM
      domains (or device drivers) to update the power.max_time_suspended_ns
      field, for example after changing the power state of a suspended
      device.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      00dc9ad1
  3. 17 Nov, 2011 1 commit
    • Rafael J. Wysocki's avatar
      PM Sleep: Do not extend wakeup paths to devices with ignore_children set · 8b258cc8
      Rafael J. Wysocki authored
      Commit 4ca46ff3 (PM / Sleep: Mark
      devices involved in wakeup signaling during suspend) introduced
      the power.wakeup_path field in struct dev_pm_info to mark devices
      whose children are enabled to wake up the system from sleep states,
      so that power domains containing the parents that provide their
      children with wakeup power and/or relay their wakeup signals are not
      turned off.  Unfortunately, that introduced a PM regression on SH7372
      whose power consumption in the system "memory sleep" state increased
      as a result of it, because it prevented the power domain containing
      the I2C controller from being turned off when some children of that
      controller were enabled to wake up the system, although the
      controller was not necessary for them to signal wakeup.
      
      To fix this issue use the observation that devices whose
      power.ignore_children flag is set for runtime PM should be treated
      analogously during system suspend.  Namely, they shouldn't be
      included in wakeup paths going through their children.  Since the
      SH7372 I2C controller's power.ignore_children flag is set, doing so
      will restore the previous behavior of that SOC.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      8b258cc8
  4. 31 Oct, 2011 1 commit
  5. 25 Aug, 2011 3 commits
  6. 12 Jul, 2011 1 commit
  7. 02 Jul, 2011 3 commits
    • Rafael J. Wysocki's avatar
      PM: Rename clock management functions · 3d5c3036
      Rafael J. Wysocki authored
      The common PM clock management functions may be used for system
      suspend/resume as well as for runtime PM, so rename them
      accordingly.  Modify kerneldoc comments describing these functions
      and kernel messages printed by them, so that they refer to power
      management in general rather that to runtime PM.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Reviewed-by: default avatarKevin Hilman <khilman@ti.com>
      3d5c3036
    • Rafael J. Wysocki's avatar
      PM: Allow the clocks management code to be used during system suspend · b7b95920
      Rafael J. Wysocki authored
      The common clocks management code in drivers/base/power/clock_ops.c
      is going to be used during system-wide power transitions as well as
      for runtime PM, so it shouldn't depend on CONFIG_PM_RUNTIME.
      However, the suspend/resume functions provided by it for
      CONFIG_PM_RUNTIME unset, to be used during system-wide power
      transitions, should not behave in the same way as their counterparts
      defined for CONFIG_PM_RUNTIME set, because in that case the clocks
      are managed differently at run time.
      
      The names of the functions still contain the word "runtime" after
      this change, but that is going to be modified by a separate patch
      later.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Reviewed-by: default avatarKevin Hilman <khilman@ti.com>
      b7b95920
    • Rafael J. Wysocki's avatar
      PM / Domains: Rename struct dev_power_domain to struct dev_pm_domain · 564b905a
      Rafael J. Wysocki authored
      The naming convention used by commit 7538e3db6e015e890825fbd9f86599b
      (PM: Add support for device power domains), which introduced the
      struct dev_power_domain type for representing device power domains,
      evidently confuses some developers who tend to think that objects
      of this type must correspond to "power domains" as defined by
      hardware, which is not the case.  Namely, at the kernel level, a
      struct dev_power_domain object can represent arbitrary set of devices
      that are mutually dependent power management-wise and need not belong
      to one hardware power domain.  To avoid that confusion, rename struct
      dev_power_domain to struct dev_pm_domain and rename the related
      pointers in struct device and struct pm_clk_notifier_block from
      pwr_domain to pm_domain.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: default avatarKevin Hilman <khilman@ti.com>
      564b905a
  8. 29 Apr, 2011 1 commit
  9. 14 Mar, 2011 1 commit
    • Rafael J. Wysocki's avatar
      PM: Do not create wakeup sysfs files for devices that cannot wake up · cb8f51bd
      Rafael J. Wysocki authored
      Currently, wakeup sysfs attributes are created for all devices,
      regardless of whether or not they are wakeup-capable.  This is
      excessive and complicates wakeup device identification from user
      space (i.e. to identify wakeup-capable devices user space has to read
      /sys/devices/.../power/wakeup for all devices and see if they are not
      empty).
      
      Fix this issue by avoiding to create wakeup sysfs files for devices
      that cannot wake up the system from sleep states (i.e. whose
      power.can_wakeup flags are unset during registration) and modify
      device_set_wakeup_capable() so that it adds (or removes) the relevant
      sysfs attributes if a device's wakeup capability status is changed.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      cb8f51bd
  10. 24 Dec, 2010 2 commits
    • Rafael J. Wysocki's avatar
      PM / Runtime: Generic resume shouldn't set RPM_ACTIVE unconditionally · 4b31db8a
      Rafael J. Wysocki authored
      The __pm_generic_resume() function changes the given device's runtime
      PM status to RPM_ACTIVE if its driver's callback returns 0, but it
      only should do that if the rumtime PM is enabled for the device.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      4b31db8a
    • Alan Stern's avatar
      PM / Runtime: Add synchronous runtime interface for interrupt handlers (v3) · c7b61de5
      Alan Stern authored
      This patch (as1431c) makes the synchronous runtime-PM interface
      suitable for use in interrupt handlers.  Subsystems can call the new
      pm_runtime_irq_safe() function to tell the PM core that a device's
      runtime_suspend and runtime_resume callbacks should be invoked with
      interrupts disabled and the spinlock held.  This permits the
      pm_runtime_get_sync() and the new pm_runtime_put_sync_suspend()
      routines to be called from within interrupt handlers.
      
      When a device is declared irq-safe in this way, the PM core increments
      the parent's usage count, so the parent will never be runtime
      suspended.  This prevents difficult situations in which an irq-safe
      device can't resume because it is forced to wait for its non-irq-safe
      parent.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      c7b61de5
  11. 16 Dec, 2010 1 commit
    • Rafael J. Wysocki's avatar
      PM / Runtime: Fix pm_runtime_suspended() · f08f5a0a
      Rafael J. Wysocki authored
      There are some situations (e.g. in __pm_generic_call()), where
      pm_runtime_suspended() is used to decide whether or not to execute
      a device's (system) ->suspend() callback.  The callback is not
      executed if pm_runtime_suspended() returns true, but it does so
      for devices that don't even support runtime PM, because the
      power.disable_depth device field is ignored by it.  This leads to
      problems (i.e. devices are not suspened when they should), so rework
      pm_runtime_suspended() so that it returns false if the device's
      power.disable_depth field is different from zero.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Cc: stable@kernel.org
      f08f5a0a
  12. 16 Oct, 2010 5 commits
    • Ming Lei's avatar
      PM: runtime: add missed pm_request_autosuspend · 5fc62aad
      Ming Lei authored
      The patch "PM / Runtime: Implement autosuspend support" introduces
      "autosuspend" facility for runtime PM, but misses helper function
      of pm_request_autosuspend, so add it.
      Signed-off-by: default avatarMing Lei <tom.leiming@gmail.com>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      5fc62aad
    • Alan Stern's avatar
      PM / Runtime: Implement autosuspend support · 15bcb91d
      Alan Stern authored
      This patch (as1427) implements the "autosuspend" facility for runtime
      PM.  A few new fields are added to the dev_pm_info structure and
      several new PM helper functions are defined, for telling the PM core
      whether or not a device uses autosuspend, for setting the autosuspend
      delay, and for marking periods of device activity.
      
      Drivers that do not want to use autosuspend can continue using the
      same helper functions as before; their behavior will not change.  In
      addition, drivers supporting autosuspend can also call the old helper
      functions to get the old behavior.
      
      The details are all explained in Documentation/power/runtime_pm.txt
      and Documentation/ABI/testing/sysfs-devices-power.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      15bcb91d
    • Alan Stern's avatar
      PM / Runtime: Add no_callbacks flag · 7490e442
      Alan Stern authored
      Some devices, such as USB interfaces, cannot be power-managed
      independently of their parents, i.e., they cannot be put in low power
      while the parent remains at full power.  This patch (as1425) creates a
      new "no_callbacks" flag, which tells the PM core not to invoke the
      runtime-PM callback routines for the such devices but instead to
      assume that the callbacks always succeed.  In addition, the
      non-debugging runtime-PM sysfs attributes for the devices are removed,
      since they are pretty much meaningless.
      
      The advantage of this scheme comes not so much from avoiding the
      callbacks themselves, but rather from the fact that without the need
      for a process context in which to run the callbacks, more work can be
      done in interrupt context.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      7490e442
    • Alan Stern's avatar
      PM / Runtime: Combine runtime PM entry points · 140a6c94
      Alan Stern authored
      This patch (as1424) combines the various public entry points for the
      runtime PM routines into three simple functions: one for idle, one for
      suspend, and one for resume.  A new bitflag specifies whether or not
      to increment or decrement the usage_count field.
      
      The new entry points are named __pm_runtime_idle,
      __pm_runtime_suspend, and __pm_runtime_resume, to reflect that they
      are trampolines.  Simultaneously, the corresponding internal routines
      are renamed to rpm_idle, rpm_suspend, and rpm_resume.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      140a6c94
    • Alan Stern's avatar
      PM / Runtime: Replace boolean arguments with bitflags · 3f9af051
      Alan Stern authored
      The "from_wq" argument in __pm_runtime_suspend() and
      __pm_runtime_resume() supposedly indicates whether or not the function
      was called by the PM workqueue thread, but in fact it isn't always
      used this way.  It really indicates whether or not the function should
      return early if the requested operation is already in progress.
      
      Along with this badly-named boolean argument, later patches in this
      series will add several other boolean arguments to these functions and
      others.  Therefore this patch (as1422) begins the conversion process
      by replacing from_wq with a bitflag argument.  The same bitflags are
      also used in __pm_runtime_get() and __pm_runtime_put(), where they
      indicate whether or not the operation should be asynchronous.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      3f9af051
  13. 10 May, 2010 1 commit
    • Rafael J. Wysocki's avatar
      i2c: Fix bus-level power management callbacks · 2f60ba70
      Rafael J. Wysocki authored
      There are three issues with the i2c bus type's power management
      callbacks at the moment.  First, they don't include any hibernate
      callbacks, although they should at least include the .restore()
      callback (there's no guarantee that the driver will be present in
      memory before loading the image kernel and we must restore the
      pre-hibernation state of the device).  Second, the "legacy"
      callbacks are not going to be invoked by the PM core since the bus
      type's pm object is not NULL.  Finally, the system sleep PM
      (ie. suspend/resume) callbacks don't check if the device has been
      already suspended at run time, in which case they should skip
      suspending it.  Also, it looks like the i2c bus type can use the
      generic subsystem-level runtime PM callbacks.
      
      For these reasons, rework the system sleep PM callbacks provided by
      the i2c bus type to handle hibernation correctly and to invoke the
      "legacy" callbacks for drivers that provide them.  In addition to
      that make the i2c bus type use the generic subsystem-level runtime
      PM callbacks.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
      Acked-by: default avatarJean Delvare <khali@linux-fr.org>
      2f60ba70
  14. 06 Mar, 2010 1 commit
    • Rafael J. Wysocki's avatar
      PM: Provide generic subsystem-level callbacks · d690b2cd
      Rafael J. Wysocki authored
      There are subsystems whose power management callbacks only need to
      invoke the callbacks provided by device drivers.  Still, their system
      sleep PM callbacks should play well with the runtime PM callbacks,
      so that devices suspended at run time can be left in that state for
      a system sleep transition.
      
      Provide a set of generic PM callbacks for such subsystems and
      define convenience macros for populating dev_pm_ops structures.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      d690b2cd
  15. 26 Feb, 2010 1 commit
  16. 06 Dec, 2009 1 commit
  17. 22 Aug, 2009 1 commit
    • Rafael J. Wysocki's avatar
      PM: Introduce core framework for run-time PM of I/O devices (rev. 17) · 5e928f77
      Rafael J. Wysocki authored
      Introduce a core framework for run-time power management of I/O
      devices.  Add device run-time PM fields to 'struct dev_pm_info'
      and device run-time PM callbacks to 'struct dev_pm_ops'.  Introduce
      a run-time PM workqueue and define some device run-time PM helper
      functions at the core level.  Document all these things.
      
      Special thanks to Alan Stern for his help with the design and
      multiple detailed reviews of the pereceding versions of this patch
      and to Magnus Damm for testing feedback.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: default avatarMagnus Damm <damm@igel.co.jp>
      5e928f77