mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
regulator: core: Allow specific minimal selector for starting linear mapping
Some drivers (at least 3 drivers) have such variant of linear mapping that the first few selectors are invalid and the reset are linear mapping. Let's support this case in core. This patch adds linear_min_sel in struct regulator_desc, so we can allow specific minimal selector for starting linear mapping. Then extends regulator_[map|list]_voltage_linear() to support this feature. Note that for selectors less than min_linear_index, we need count them to n_voltages so regulator_list_voltage() won't fail while checking the boundary for selector before calling list_voltage callback. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
9489e9dcae
commit
33234e791d
2 changed files with 8 additions and 0 deletions
|
@ -1897,6 +1897,10 @@ int regulator_list_voltage_linear(struct regulator_dev *rdev,
|
|||
{
|
||||
if (selector >= rdev->desc->n_voltages)
|
||||
return -EINVAL;
|
||||
if (selector < rdev->desc->linear_min_sel)
|
||||
return 0;
|
||||
|
||||
selector -= rdev->desc->linear_min_sel;
|
||||
|
||||
return rdev->desc->min_uV + (rdev->desc->uV_step * selector);
|
||||
}
|
||||
|
@ -2120,6 +2124,8 @@ int regulator_map_voltage_linear(struct regulator_dev *rdev,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret += rdev->desc->linear_min_sel;
|
||||
|
||||
/* Map back into a voltage to verify we're still in bounds */
|
||||
voltage = rdev->desc->ops->list_voltage(rdev, ret);
|
||||
if (voltage < min_uV || voltage > max_uV)
|
||||
|
|
|
@ -185,6 +185,7 @@ enum regulator_type {
|
|||
*
|
||||
* @min_uV: Voltage given by the lowest selector (if linear mapping)
|
||||
* @uV_step: Voltage increase with each selector (if linear mapping)
|
||||
* @linear_min_sel: Minimal selector for starting linear mapping
|
||||
* @ramp_delay: Time to settle down after voltage change (unit: uV/us)
|
||||
* @volt_table: Voltage mapping table (if table based mapping)
|
||||
*
|
||||
|
@ -207,6 +208,7 @@ struct regulator_desc {
|
|||
|
||||
unsigned int min_uV;
|
||||
unsigned int uV_step;
|
||||
unsigned int linear_min_sel;
|
||||
unsigned int ramp_delay;
|
||||
|
||||
const unsigned int *volt_table;
|
||||
|
|
Loading…
Reference in a new issue