• Hans de Goede's avatar
    drm/gma500: Rewrite power management code · 672c4735
    Hans de Goede authored
    Rewrite the power.c code. For some reason this was doing locking +
    refcounting + state (suspended or not) bookkeeping all by itself.
    
    But there is no reason for this, this is all taken care of by
    the runtime-pm core, through pm_runtime_get()/_put().
    
    Besides this not being necessary the DIY code is also quite weird/
    buggy in some places. E.g. power_begin() would manually do a resume
    when not resumed already and force_on=true, followed by a
    pm_runtime_get(), which will cause a call to gma_power_resume() to
    get scheduled which would redo the entire resume again. Which can
    all be replaced by a single pm_runtime_get_sync() call.
    
    Note that this is just a cleanup, this does not actually fix
    the (disabled through #if 0) runtime-pm support. It does now call
    pm_runtime_enable(), but only after doing a pm_runtime_get() at
    probe-time, so the device is never runtime suspended.
    
    Doing this permanent get() + enable() instead of not calling
    enable() at all is necessary for the pm_runtime_get_if_in_use() call
    in gma_power_begin() to work properly.
    
    Note this also removes the gma_power_is_on() call a check like this
    without actually holding a reference is always racy, so it is a bad
    idea (and therefor has no pm_runtime_foo() equivalent).
    
    The 2 code paths which were using gma_power_is_on() are actually both
    guaranteed to only run when the device is powered-on so the 2 checks
    can simply be dropped.
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Acked-by: default avatarPatrik Jakobsson <patrik.r.jakobsson@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220909115646.99920-6-hdegoede@redhat.com
    672c4735
power.c 6.83 KB