lkml.org 
[lkml]   [2018]   [Apr]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 8/8] drm/arm/malidp: Added the late system pm functions
    Date
    malidp_pm_suspend_late checks if the runtime status is not suspended
    and if so, invokes malidp_runtime_pm_suspend which disables the
    display engine/core interrupts and the clocks. It sets the runtime status
    as suspended.

    The difference between suspend() and suspend_late() is as follows:-
    1. suspend() makes the device quiescent. In our case, we invoke the DRM
    helper which disables the CRTC. This would have invoked runtime pm
    suspend but the system suspend process disables runtime pm.
    2. suspend_late() It continues the suspend operations of the drm device
    which was started by suspend(). In our case, it performs the same functionality
    as runtime_suspend().

    The complimentary functions are resume() and resume_early(). In the case of
    resume_early(), we invoke malidp_runtime_pm_resume() which enables the clocks
    and the interrupts. It sets the runtime status as active. If the device was
    in runtime suspend mode before system suspend was called, pm_runtime_work()
    will put the device back in runtime suspended mode( after the complete system
    has been resumed).

    Signed-off-by: Ayan Kumar Halder <ayan.halder@arm.com>

    ---
    Changes in v2:-
    - Removed the change id and modified the commit message
    ---
    drivers/gpu/drm/arm/malidp_drv.c | 17 +++++++++++++++++
    1 file changed, 17 insertions(+)

    diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
    index bd44a6d..f6124d8 100644
    --- a/drivers/gpu/drm/arm/malidp_drv.c
    +++ b/drivers/gpu/drm/arm/malidp_drv.c
    @@ -766,8 +766,25 @@ static int __maybe_unused malidp_pm_resume(struct device *dev)
    return 0;
    }

    +static int __maybe_unused malidp_pm_suspend_late(struct device *dev)
    +{
    + if (!pm_runtime_status_suspended(dev)) {
    + malidp_runtime_pm_suspend(dev);
    + pm_runtime_set_suspended(dev);
    + }
    + return 0;
    +}
    +
    +static int __maybe_unused malidp_pm_resume_early(struct device *dev)
    +{
    + malidp_runtime_pm_resume(dev);
    + pm_runtime_set_active(dev);
    + return 0;
    +}
    +
    static const struct dev_pm_ops malidp_pm_ops = {
    SET_SYSTEM_SLEEP_PM_OPS(malidp_pm_suspend, malidp_pm_resume) \
    + SET_LATE_SYSTEM_SLEEP_PM_OPS(malidp_pm_suspend_late, malidp_pm_resume_early) \
    SET_RUNTIME_PM_OPS(malidp_runtime_pm_suspend, malidp_runtime_pm_resume, NULL)
    };

    --
    2.7.4
    \
     
     \ /
      Last update: 2018-04-23 16:52    [W:3.173 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site