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>
This commit is contained in:
André Draszik 2026-01-22 15:43:44 +00:00 committed by Mark Brown
parent a2b8b9f33c
commit 8f23cfbe44
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -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