regulator: core: Get voltage from parent if not available
authorJavier Martinez Canillas <javier.martinez@collabora.co.uk>
Tue, 29 Jul 2014 16:28:55 +0000 (18:28 +0200)
committerMark Brown <broonie@linaro.org>
Tue, 29 Jul 2014 18:24:43 +0000 (19:24 +0100)
Load switches are modeled as regulators but they just provide
the voltage of their parent input supply. So the drivers for
these switches usually don't provide a .get_voltage function
handler but there is code in the kernel that assumes that all
regulators should be able to provide its current voltage rail.

So, if the output voltage for a regulator is not available and
it has a parent supply, then pass the voltage of its parent.

Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/regulator/core.c

index b4902ab64abe99ba48e893f609a86b8b27295d46..57fe446fabce85601d458a65761783232c7cfbb0 100644 (file)
@@ -2620,6 +2620,8 @@ static int _regulator_get_voltage(struct regulator_dev *rdev)
                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 if (rdev->supply) {
+               ret = regulator_get_voltage(rdev->supply);
        } else {
                return -EINVAL;
        }