OSDN Git Service

regulator: add regulator_desc_list_voltage_linear_range
authorMatti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Thu, 14 Feb 2019 09:38:05 +0000 (11:38 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 14 Feb 2019 15:12:26 +0000 (15:12 +0000)
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: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Acked-by: Mark Brown <broonie@kernel.org>
Tested-by: Angus Ainslie <angus@akkea.ca>
Reviewed-by: Angus Ainslie <angus@akkea.ca>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/helpers.c
include/linux/regulator/driver.h

index 5686a13..68ac601 100644 (file)
@@ -594,28 +594,30 @@ int regulator_list_voltage_pickable_linear_range(struct regulator_dev *rdev,
 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
  *
  * 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,
+ * and selectors who have set linear_ranges in the regulator descriptor
+ * 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,
-                                       unsigned int selector)
+int regulator_desc_list_voltage_linear_range(const struct regulator_desc *desc,
+                                            unsigned int selector)
 {
        const struct regulator_linear_range *range;
        int i;
 
-       if (!rdev->desc->n_linear_ranges) {
-               BUG_ON(!rdev->desc->n_linear_ranges);
+       if (!desc->n_linear_ranges) {
+               BUG_ON(!desc->n_linear_ranges);
                return -EINVAL;
        }
 
-       for (i = 0; i < rdev->desc->n_linear_ranges; i++) {
-               range = &rdev->desc->linear_ranges[i];
+       for (i = 0; i < desc->n_linear_ranges; i++) {
+               range = &desc->linear_ranges[i];
 
                if (!(selector >= range->min_sel &&
                      selector <= range->max_sel))
@@ -628,6 +630,23 @@ int regulator_list_voltage_linear_range(struct regulator_dev *rdev,
 
        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);
 
 /**
index 7f8345b..05efe2b 100644 (file)
@@ -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_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