• Magnus Damm's avatar
    sh: Runtime PM for SuperH Mobile platform bus devices · 6a93dde1
    Magnus Damm authored
    This patch is V3 of the SuperH Mobile Runtime PM platform bus
    implentation matching Rafael's Runtime PM v16.
    
    The code gets invoked from the SuperH specific Runtime PM
    platform bus functions that override the weak symbols for:
     - platform_pm_runtime_suspend()
     - platform_pm_runtime_resume()
     - platform_pm_runtime_idle()
    
    This Runtime PM implementation performs two levels of power
    management. At the time of platform bus runtime suspend the
    clock to the device is stopped instantly. Later on if all
    devices within the power domain has their clocks stopped
    then the device driver ->runtime_suspend() callbacks are
    used to save hardware register state for each device.
    
    Device driver ->runtime_suspend() calls are scheduled from
    cpuidle context using platform_pm_runtime_suspend_idle().
    When all devices have been fully suspended the processor
    is allowed to enter deep sleep from cpuidle.
    
    The runtime resume operation turns on clocks and also
    restores registers if needed. It is worth noting that the
    devices start in a suspended state and the device driver
    is responsible for calling runtime resume before accessing
    the actual hardware.
    
    In this particular platform bus implementation runtime
    resume is not allowed from interrupt context. Runtime
    suspend is however allowed from interrupt context as
    long as the synchronous functions are avoided.
    
    [ updated for v17 -- PFM. ]
    Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    6a93dde1
device.h 604 Bytes