• Hans de Goede's avatar
    pwm: lpss: Force runtime-resume on suspend on Cherry Trail · 4743765b
    Hans de Goede authored
    On Cherry Trail devices under Windows the PWM controller used for the
    backlight is considered part of the GPU even though it is part of the LPSS
    block and thus is an entirely different independent hardware unit.
    
    Because of this on Cherry Trail the GPU's (GFX0 ACPI node) _PS3 and _PS0
    methods save and restore the PWM controller registers.
    
    If userspace blanks the screen before suspending, such as e.g. GNOME
    does, then the PWM controller will be runtime-suspended when the suspend
    starts. This causes the GFX0 _PS? methods to save a value of 0xffffffff
    for the PWM control register and to restore this value on resume.
    
    0xffffffff is not a valid value for the register and writing this causes
    problems such as e.g. a flickering backlight.
    
    This commit adds a prepare method to the dev_pm_ops and makes it return 0
    on Cherry Trail devices forcing a runtime-resume before other device's
    suspend methods run. This fixes the reading and writing back of 0xffffffff.
    
    Since we now always runtime-resume the device on suspend, it will be
    resumed on resume too and we no longer need to check for the GFX0 _PS0
    method having resumed it underneath us, so this commit removes the now no
    longer necessary complete dev_pm_op.
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
    4743765b
pwm-lpss.h 1.13 KB