summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/s2mps11.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index 0b6b28ce6465..5e3584060547 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -566,26 +566,23 @@ static int s2mpg10_regulator_buck_enable_time(struct regulator_dev *rdev)
+ DIV_ROUND_UP(curr_uV, s2mpg10_desc->enable_ramp_rate));
}
-static int s2mpg10_regulator_buck_set_voltage_time(struct regulator_dev *rdev,
- int old_uV, int new_uV)
+static int s2mpg1x_regulator_buck_set_voltage_time(struct regulator_dev *rdev,
+ int old_uV, int new_uV,
+ unsigned int ramp_reg,
+ unsigned int ramp_mask)
{
- unsigned int ramp_reg, ramp_sel, ramp_rate;
+ unsigned int ramp_sel, ramp_rate;
int ret;
if (old_uV == new_uV)
return 0;
- ramp_reg = rdev->desc->ramp_reg;
- if (old_uV > new_uV)
- /* The downwards ramp is at a different offset. */
- ramp_reg += S2MPG10_PMIC_DVS_RAMP4 - S2MPG10_PMIC_DVS_RAMP1;
-
ret = regmap_read(rdev->regmap, ramp_reg, &ramp_sel);
if (ret)
return ret;
- ramp_sel &= rdev->desc->ramp_mask;
- ramp_sel >>= ffs(rdev->desc->ramp_mask) - 1;
+ ramp_sel &= ramp_mask;
+ ramp_sel >>= ffs(ramp_mask) - 1;
if (ramp_sel >= rdev->desc->n_ramp_values ||
!rdev->desc->ramp_delay_table)
return -EINVAL;
@@ -595,6 +592,21 @@ static int s2mpg10_regulator_buck_set_voltage_time(struct regulator_dev *rdev,
return DIV_ROUND_UP(abs(new_uV - old_uV), ramp_rate);
}
+static int s2mpg10_regulator_buck_set_voltage_time(struct regulator_dev *rdev,
+ int old_uV, int new_uV)
+{
+ unsigned int ramp_reg;
+
+ ramp_reg = rdev->desc->ramp_reg;
+ if (old_uV > new_uV)
+ /* The downwards ramp is at a different offset. */
+ ramp_reg += S2MPG10_PMIC_DVS_RAMP4 - S2MPG10_PMIC_DVS_RAMP1;
+
+ return s2mpg1x_regulator_buck_set_voltage_time(rdev, old_uV, new_uV,
+ ramp_reg,
+ rdev->desc->ramp_mask);
+}
+
/*
* We assign both, ::set_voltage_time() and ::set_voltage_time_sel(), because
* only if the latter is != NULL, the regulator core will call neither during