• Thierry Reding's avatar
    hwmon: (pwm-fan) Set fan speed to 0 on suspend · 95dcd64b
    Thierry Reding authored
    Technically this is not required because disabling the PWM should be
    enough. However, when support for atomic operations was implemented in
    the PWM subsystem, only actual changes to the PWM channel are applied
    during pwm_config(), which means that during after resume from suspend
    the old settings won't be applied.
    
    One possible solution is for the PWM driver to implement its own PM
    operations such that settings from before suspend get applied on resume.
    This has the disadvantage of completely ignoring any particular ordering
    requirements that PWM user drivers might have, so it is best to leave it
    up to the user drivers to apply the settings that they want at the
    appropriate time.
    
    Another way to solve this would be to read back the current state of the
    PWM at the time of resume. That way, in case the configuration was lost
    during suspend, applying the old settings in PWM user drivers would
    actually get them applied because they differ from the current settings.
    However, not all PWM drivers support reading the hardware state, and not
    all hardware may support it.
    
    The best workaround at this point seems to be to let PWM user drivers
    tell the PWM subsystem that the PWM is turned off by, in addition to
    disabling it, also setting the duty cycle to 0. This causes the resume
    operation to apply a configuration that is different from the current
    configuration, resulting in the proper state from before suspend getting
    restored.
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    95dcd64b
pwm-fan.c 7.83 KB