UPSTREAM: regulator: core: Use parent voltage from the supply when bypassed
[firefly-linux-kernel-4.4.55.git] / drivers / regulator / core.c
index 34ae2745d3f3b44598632d2039740fc5dc24d47f..f87310970f1714b57ca6261be308325058e0060f 100644 (file)
@@ -3116,6 +3116,20 @@ EXPORT_SYMBOL_GPL(regulator_sync_voltage);
 static int _regulator_get_voltage(struct regulator_dev *rdev)
 {
        int sel, ret;
+       bool bypassed;
+
+       if (rdev->desc->ops->get_bypass) {
+               ret = rdev->desc->ops->get_bypass(rdev, &bypassed);
+               if (ret < 0)
+                       return ret;
+               if (bypassed) {
+                       /* if bypassed the regulator must have a supply */
+                       if (!rdev->supply)
+                               return -EINVAL;
+
+                       return _regulator_get_voltage(rdev->supply->rdev);
+               }
+       }
 
        if (rdev->desc->ops->get_voltage_sel) {
                sel = rdev->desc->ops->get_voltage_sel(rdev);