regulator: rk808: Support apply_bit for rk808_set_suspend_voltage_range
authorAlex Bee <knaerzche@gmail.com>
Tue, 16 Apr 2024 16:12:36 +0000 (18:12 +0200)
committerLee Jones <lee@kernel.org>
Fri, 3 May 2024 08:15:36 +0000 (09:15 +0100)
rk808_set_suspend_voltage_range currently does not account the existence of
apply_bit/apply_reg.

This adds support for those in same way it is done in
regulator_set_voltage_sel_regmap and is required for the upcoming RK816
support

Signed-off-by: Alex Bee <knaerzche@gmail.com>
Acked-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20240416161237.2500037-5-knaerzche@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/regulator/rk808-regulator.c

index d89ae7f16d7a0e1f8d8c0ec19e7ad7565e816858..a6a563e402d06c9b0af6b5aa43e446cff57eb3bc 100644 (file)
@@ -534,15 +534,25 @@ static int rk808_set_suspend_voltage_range(struct regulator_dev *rdev, int uv)
 {
        unsigned int reg;
        int sel = regulator_map_voltage_linear_range(rdev, uv, uv);
+       int ret;
 
        if (sel < 0)
                return -EINVAL;
 
        reg = rdev->desc->vsel_reg + RK808_SLP_REG_OFFSET;
 
-       return regmap_update_bits(rdev->regmap, reg,
-                                 rdev->desc->vsel_mask,
-                                 sel);
+       ret = regmap_update_bits(rdev->regmap, reg,
+                                rdev->desc->vsel_mask,
+                                sel);
+       if (ret)
+               return ret;
+
+       if (rdev->desc->apply_bit)
+               ret = regmap_update_bits(rdev->regmap, rdev->desc->apply_reg,
+                                        rdev->desc->apply_bit,
+                                        rdev->desc->apply_bit);
+
+       return ret;
 }
 
 static int rk805_set_suspend_enable(struct regulator_dev *rdev)