regulator: core: provide fixed voltage in desc for single voltage rail
authorLaxman Dewangan <ldewangan@nvidia.com>
Tue, 10 Sep 2013 10:15:05 +0000 (15:45 +0530)
committerMark Brown <broonie@linaro.org>
Tue, 10 Sep 2013 17:19:52 +0000 (18:19 +0100)
If given rail has the single voltage (n_voltages = 1) then provide the
rail voltage through regulator descriptor so that core can use this
value for finding voltage.

This will avoid the implementation of the callback for get_voltage() or
list_voltage() callback on regulator driver.

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/regulator/core.c
include/linux/regulator/driver.h

index a01b8b3b70ca2fc3adb4e81d7f96358282115ba4..abc899ed1ebf12dc8a6640ef91d16d61d347fb27 100644 (file)
@@ -2489,6 +2489,8 @@ static int _regulator_get_voltage(struct regulator_dev *rdev)
                ret = rdev->desc->ops->get_voltage(rdev);
        } else if (rdev->desc->ops->list_voltage) {
                ret = rdev->desc->ops->list_voltage(rdev, 0);
+       } else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) {
+               ret = rdev->desc->fixed_uV;
        } else {
                return -EINVAL;
        }
@@ -3170,7 +3172,8 @@ static int add_regulator_attributes(struct regulator_dev *rdev)
        /* some attributes need specific methods to be displayed */
        if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) ||
            (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0) ||
-           (ops->list_voltage && ops->list_voltage(rdev, 0) >= 0)) {
+           (ops->list_voltage && ops->list_voltage(rdev, 0) >= 0) ||
+               (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1))) {
                status = device_create_file(dev, &dev_attr_microvolts);
                if (status < 0)
                        return status;
index 67e13aa5a4781d2c8fdfa8fc902d2bbc90f2a3a0..9e8241a9f28f3535d0b3397890cd57ae5745922b 100644 (file)
@@ -207,6 +207,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
+ * @fixed_uV: Fixed voltage of rails.
  * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
  * @volt_table: Voltage mapping table (if table based mapping)
  *
@@ -239,6 +240,7 @@ struct regulator_desc {
        unsigned int min_uV;
        unsigned int uV_step;
        unsigned int linear_min_sel;
+       int fixed_uV;
        unsigned int ramp_delay;
 
        const struct regulator_linear_range *linear_ranges;