diff options
author | Mark Brown <broonie@kernel.org> | 2016-05-13 14:22:55 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-05-13 14:22:55 +0100 |
commit | 75941a1ba32d36fe6230a6388f10c493b3f6232b (patch) | |
tree | 0c6ae59e3476eeda6109d460c7293f7c1e98932c /drivers/regulator | |
parent | 93878cd540500884b2ea428f620c8e1426fc4d6d (diff) | |
parent | fef95019016ac10e250d2c67a3c97af5797e3938 (diff) |
Merge remote-tracking branch 'regulator/topic/bypass' into regulator-next
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/core.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 6af38691ec48..0cbfd3feccef 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -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); |