• Marek Vasut's avatar
    pwm: sysfs: Do not apply state to already disabled PWMs · 38ba8359
    Marek Vasut authored
    If the PWM is exported but not enabled, do not call pwm_class_apply_state().
    First of all, in this case, period may still be unconfigured and this would
    make pwm_class_apply_state() return -EINVAL, and then suspend would fail.
    Second, it makes little sense to apply state onto PWM that is not enabled
    before suspend.
    
    Failing case:
    "
    $ echo 1 > /sys/class/pwm/pwmchip4/export
    $ echo mem > /sys/power/state
    ...
    pwm pwmchip4: PM: dpm_run_callback(): pwm_class_suspend+0x1/0xa8 returns -22
    pwm pwmchip4: PM: failed to suspend: error -22
    PM: Some devices failed to suspend, or early wake event detected
    "
    
    Working case:
    "
    $ echo 1 > /sys/class/pwm/pwmchip4/export
    $ echo 100 > /sys/class/pwm/pwmchip4/pwm1/period
    $ echo 10 > /sys/class/pwm/pwmchip4/pwm1/duty_cycle
    $ echo mem > /sys/power/state
    ...
    "
    
    Do not call pwm_class_apply_state() in case the PWM is disabled
    to fix this issue.
    
    Fixes: 7fd4edc5 ("pwm: sysfs: Add suspend/resume support")
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Fixes: ef2bf499 ("pwm: Improve args checking in pwm_apply_state()")
    Reviewed-by: default avatarBrian Norris <briannorris@chromium.org>
    Reviewed-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
    38ba8359
sysfs.c 11.7 KB