Skip to content
  • Guenter Roeck's avatar
    hwmon: (max31790) Fix pwmX_enable attributes · 2e23607e
    Guenter Roeck authored
    
    
    [ Upstream commit 148c847c9e5a54b99850617bf9c143af9a344f92 ]
    
    pwmX_enable supports three possible values:
    
    0: Fan control disabled. Duty cycle is fixed to 0%
    1: Fan control enabled, pwm mode. Duty cycle is determined by
       values written into Target Duty Cycle registers.
    2: Fan control enabled, rpm mode
       Duty cycle is adjusted such that fan speed matches
       the values in Target Count registers
    
    The current code does not do this; instead, it mixes pwm control
    configuration with fan speed monitoring configuration. Worse, it
    reports that pwm control would be disabled (pwmX_enable==0) when
    it is in fact enabled in pwm mode. Part of the problem may be that
    the chip sets the "TACH input enable" bit on its own whenever the
    mode bit is set to RPM mode, but that doesn't mean that "TACH input
    enable" accurately reflects the pwm mode.
    
    Fix it up and only handle pwm control with the pwmX_enable attributes.
    In the documentation, clarify that disabling pwm control (pwmX_enable=0)
    sets the pwm duty cycle to 0%. In the code, explain why TACH_INPUT_EN
    is set together with RPM_MODE.
    
    While at it, only update the configuration register if the configuration
    has changed, and only update the cached configuration if updating the
    chip configuration was successful.
    
    Cc: Jan Kundrát <jan.kundrat@cesnet.cz>
    Cc: Václav Kubernát <kubernat@cesnet.cz>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Tested-by: default avatarVáclav Kubernát <kubernat@cesnet.cz>
    Reviewed-by: default avatarJan Kundrát <jan.kundrat@cesnet.cz>
    Link: https://lore.kernel.org/r/20210526154022.3223012-4-linux@roeck-us.net
    
    
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    2e23607e