regulator: rt6160: Fix setting suspend voltage
authorAxel Lin <axel.lin@ingics.com>
Wed, 16 Jun 2021 01:18:16 +0000 (09:18 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 16 Jun 2021 14:41:16 +0000 (15:41 +0100)
The vsel active level is for the normal voltage, the opposite level is
the suspend voltage.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Reviewed-by: ChiYuan Huang <cy_huang@richtek.com>
Link: https://lore.kernel.org/r/20210616011816.3479406-1-axel.lin@ingics.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/rt6160-regulator.c

index ccd023da431887a241f4f2d0ac1a6e6dd3236135..5d7b0e7ad69afb7abe8f0c9f9aac75658863f723 100644 (file)
@@ -128,13 +128,19 @@ static unsigned int rt6160_get_mode(struct regulator_dev *rdev)
 static int rt6160_set_suspend_voltage(struct regulator_dev *rdev, int uV)
 {
        struct regmap *regmap = rdev_get_regmap(rdev);
+       unsigned int suspend_vsel_reg;
        int vsel;
 
        vsel = regulator_map_voltage_linear(rdev, uV, uV);
        if (vsel < 0)
                return vsel;
 
-       return regmap_update_bits(regmap, rdev->desc->vsel_reg,
+       if (rdev->desc->vsel_reg == RT6160_REG_VSELL)
+               suspend_vsel_reg = RT6160_REG_VSELH;
+       else
+               suspend_vsel_reg = RT6160_REG_VSELL;
+
+       return regmap_update_bits(regmap, suspend_vsel_reg,
                                  RT6160_VSEL_MASK, vsel);
 }