• Stephen Boyd's avatar
    regulator: qcom_spmi: Include offset when translating voltages · ab953b9d
    Stephen Boyd authored
    This driver converts voltages from a non-linear range in hardware
    to a linear range in software and vice versa. During the
    conversion, we exclude certain voltages that are invalid to use
    because the software interface is more flexible than reality.
    
    For example, the FTSMPS2P5 regulators have a voltage range from
    80000uV to 1355000uV that software could support, but we only
    want to use the range of 350000uV to 1355000uV. If we don't
    account for the hw selectors between 80000uV and 350000uV we'll
    pick a hw selector of 0 to mean 350000uV when it really means
    80000uV. This can cause us to program voltages into the hardware
    that are significantly lower than what we're expecting.
    
    And when we read it back from the hardware we'll have the same
    problem, voltages that are in the invalid band will end up being
    calculated as some software selector that represents a larger
    voltage than what is programmed and the user will be confused.
    
    Fix all this by properly offsetting the software selector and hw
    selector when converting from one number space to another.
    
    Fixes: 1b5b1968 ("regulator: qcom_spmi: Only use selector based regulator ops")
    Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    ab953b9d
qcom_spmi-regulator.c 54.9 KB