summaryrefslogtreecommitdiff
path: root/drivers/regulator
diff options
context:
space:
mode:
authorAndré Draszik <andre.draszik@linaro.org>2026-01-22 15:43:44 +0000
committerMark Brown <broonie@kernel.org>2026-02-04 13:35:38 +0000
commit8f23cfbe4463c3de2e552aed106e179c0c932b6e (patch)
tree1b14264da744a62202384241595eff904bbace39 /drivers/regulator
parenta2b8b9f33ce30ab51b33b52dc52e55d6930b9a02 (diff)
regulator: s2mps11: refactor S2MPG10 ::set_voltage_time() for S2MPG11 reuse
The upcoming S2MPG11 support needs a similar, but different version of ::set_voltage_time(). For S2MPG10, the downwards and upwards ramps for a rail are at different offsets at the same bit positions, while for S2MPG11 the ramps are at the same offset at different bit positions. Refactor the existing version slightly to allow reuse. Signed-off-by: André Draszik <andre.draszik@linaro.org> Link: https://patch.msgid.link/20260122-s2mpg1x-regulators-v7-17-3b1f9831fffd@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator')
-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