On Fri, Oct 30, 2020 at 11:48 AM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > As the comment above the code setting the DPM_FLAG_NO_DIRECT_COMPLETE > flag explains: > > /* > * On Cherry Trail devices the GFX0._PS0 AML checks if the controller > * is on and if it is not on it turns it on and restores what it > * believes is the correct state to the PWM controller. > * Because of this we must disallow direct-complete, which keeps the > * controller (runtime)suspended, on resume to avoid 2 issues: > * 1. The controller getting turned on without the linux-pm code > * knowing about this. On devices where the controller is unused > * this causes it to stay on during the next suspend causing high > * battery drain (because S0i3 is not reached) > * 2. The state restoring code unexpectedly messing with the controller > */ > > The pm-core must not skip resume to avoid the GFX0._PS0 AML code messing > with the PWM controller behind our back. But > leaving the controller > runtime-suspended (skipping runtime-resume + normal-suspend) during > suspend is fine. This paragraph is good to have in the comment of the code I think. > Set the DPM_FLAG_SMART_SUSPEND flag to allow this. > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/pwm/pwm-lpss-platform.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c > index ac33861edb48..38d17e2e2b4c 100644 > --- a/drivers/pwm/pwm-lpss-platform.c > +++ b/drivers/pwm/pwm-lpss-platform.c > @@ -71,7 +71,8 @@ static int pwm_lpss_probe_platform(struct platform_device *pdev) > * 2. The state restoring code unexpectedly messing with the controller > */ > if (info->other_devices_aml_touches_pwm_regs) > - dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE); > + dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE| > + DPM_FLAG_SMART_SUSPEND); > > pm_runtime_set_active(&pdev->dev); > pm_runtime_enable(&pdev->dev); > -- > 2.28.0 > -- With Best Regards, Andy Shevchenko