Commit 6a47b4da authored by Matti Vaittinen's avatar Matti Vaittinen Committed by Mark Brown

regulator: add regulator_desc_list_voltage_linear_range

Add regulator_desc_list_voltage_linear_range which can be used
by drivers for getting the voltages before regulator is registered.
This may be useful for drivers which need to fetch the voltage
selectors at device-tree parsing callback.
Signed-off-by: default avatarMatti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Acked-by: default avatarMark Brown <broonie@kernel.org>
Tested-by: default avatarAngus Ainslie <angus@akkea.ca>
Reviewed-by: default avatarAngus Ainslie <angus@akkea.ca>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f43d1b38
...@@ -594,28 +594,30 @@ int regulator_list_voltage_pickable_linear_range(struct regulator_dev *rdev, ...@@ -594,28 +594,30 @@ int regulator_list_voltage_pickable_linear_range(struct regulator_dev *rdev,
EXPORT_SYMBOL_GPL(regulator_list_voltage_pickable_linear_range); EXPORT_SYMBOL_GPL(regulator_list_voltage_pickable_linear_range);
/** /**
* regulator_list_voltage_linear_range - List voltages for linear ranges * regulator_desc_list_voltage_linear_range - List voltages for linear ranges
* *
* @rdev: Regulator device * @desc: Regulator desc for regulator which volatges are to be listed
* @selector: Selector to convert into a voltage * @selector: Selector to convert into a voltage
* *
* Regulators with a series of simple linear mappings between voltages * Regulators with a series of simple linear mappings between voltages
* and selectors can set linear_ranges in the regulator descriptor and * and selectors who have set linear_ranges in the regulator descriptor
* then use this function as their list_voltage() operation, * can use this function prior regulator registration to list voltages.
* This is useful when voltages need to be listed during device-tree
* parsing.
*/ */
int regulator_list_voltage_linear_range(struct regulator_dev *rdev, int regulator_desc_list_voltage_linear_range(const struct regulator_desc *desc,
unsigned int selector) unsigned int selector)
{ {
const struct regulator_linear_range *range; const struct regulator_linear_range *range;
int i; int i;
if (!rdev->desc->n_linear_ranges) { if (!desc->n_linear_ranges) {
BUG_ON(!rdev->desc->n_linear_ranges); BUG_ON(!desc->n_linear_ranges);
return -EINVAL; return -EINVAL;
} }
for (i = 0; i < rdev->desc->n_linear_ranges; i++) { for (i = 0; i < desc->n_linear_ranges; i++) {
range = &rdev->desc->linear_ranges[i]; range = &desc->linear_ranges[i];
if (!(selector >= range->min_sel && if (!(selector >= range->min_sel &&
selector <= range->max_sel)) selector <= range->max_sel))
...@@ -628,6 +630,23 @@ int regulator_list_voltage_linear_range(struct regulator_dev *rdev, ...@@ -628,6 +630,23 @@ int regulator_list_voltage_linear_range(struct regulator_dev *rdev,
return -EINVAL; return -EINVAL;
} }
EXPORT_SYMBOL_GPL(regulator_desc_list_voltage_linear_range);
/**
* regulator_list_voltage_linear_range - List voltages for linear ranges
*
* @rdev: Regulator device
* @selector: Selector to convert into a voltage
*
* Regulators with a series of simple linear mappings between voltages
* and selectors can set linear_ranges in the regulator descriptor and
* then use this function as their list_voltage() operation,
*/
int regulator_list_voltage_linear_range(struct regulator_dev *rdev,
unsigned int selector)
{
return regulator_desc_list_voltage_linear_range(rdev->desc, selector);
}
EXPORT_SYMBOL_GPL(regulator_list_voltage_linear_range); EXPORT_SYMBOL_GPL(regulator_list_voltage_linear_range);
/** /**
......
...@@ -539,4 +539,10 @@ void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); ...@@ -539,4 +539,10 @@ void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
void regulator_lock(struct regulator_dev *rdev); void regulator_lock(struct regulator_dev *rdev);
void regulator_unlock(struct regulator_dev *rdev); void regulator_unlock(struct regulator_dev *rdev);
/*
* Helper functions intended to be used by regulator drivers prior registering
* their regulators.
*/
int regulator_desc_list_voltage_linear_range(const struct regulator_desc *desc,
unsigned int selector);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment