lkml.org 
[lkml]   [2020]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 12/72] regulator: pwm: Fix machine constraints application
    Date
    From: Vincent Whitchurch <vincent.whitchurch@axis.com>

    [ Upstream commit 59ae97a7a9e1499c2070e29841d1c4be4ae2994a ]

    If the zero duty cycle doesn't correspond to any voltage in the voltage
    table, the PWM regulator returns an -EINVAL from get_voltage_sel() which
    results in the core erroring out with a "failed to get the current
    voltage" and ending up not applying the machine constraints.

    Instead, return -ENOTRECOVERABLE which makes the core set the voltage
    since it's at an unknown value.

    For example, with this device tree:

    fooregulator {
    compatible = "pwm-regulator";
    pwms = <&foopwm 0 100000>;
    regulator-min-microvolt = <2250000>;
    regulator-max-microvolt = <2250000>;
    regulator-name = "fooregulator";
    regulator-always-on;
    regulator-boot-on;
    voltage-table = <2250000 30>;
    };

    Before this patch:

    fooregulator: failed to get the current voltage(-22)

    After this patch:

    fooregulator: Setting 2250000-2250000uV
    fooregulator: 2250 mV

    Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
    Link: https://lore.kernel.org/r/20200902130952.24880-1-vincent.whitchurch@axis.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/regulator/pwm-regulator.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c
    index e74e11101fc15..0a9d61a91f436 100644
    --- a/drivers/regulator/pwm-regulator.c
    +++ b/drivers/regulator/pwm-regulator.c
    @@ -279,7 +279,7 @@ static int pwm_regulator_init_table(struct platform_device *pdev,
    return ret;
    }

    - drvdata->state = -EINVAL;
    + drvdata->state = -ENOTRECOVERABLE;
    drvdata->duty_cycle_table = duty_cycle_table;
    drvdata->desc.ops = &pwm_regulator_voltage_table_ops;
    drvdata->desc.n_voltages = length / sizeof(*duty_cycle_table);
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-21 18:49    [W:4.282 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site