summaryrefslogtreecommitdiff
path: root/drivers/regulator/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/regulator/core.c')
-rw-r--r--drivers/regulator/core.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 7fd793d8536c..94b3fd891cac 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -3386,6 +3386,16 @@ static int _regulator_do_set_suspend_voltage(struct regulator_dev *rdev,
return 0;
}
+static bool _regulator_is_bypass(struct regulator_dev *rdev)
+{
+ bool bypassed = false;
+
+ if (rdev->desc->ops->get_bypass)
+ rdev->desc->ops->get_bypass(rdev, &bypassed);
+
+ return bypassed;
+}
+
static int regulator_set_voltage_unlocked(struct regulator *regulator,
int min_uV, int max_uV,
suspend_state_t state)
@@ -3455,8 +3465,9 @@ int regulator_set_voltage_rdev(struct regulator_dev *rdev, int min_uV,
if (rdev->supply &&
regulator_ops_is_valid(rdev->supply->rdev,
REGULATOR_CHANGE_VOLTAGE) &&
- (rdev->desc->min_dropout_uV || !(rdev->desc->ops->get_voltage ||
- rdev->desc->ops->get_voltage_sel))) {
+ (_regulator_is_bypass(rdev) || rdev->desc->min_dropout_uV ||
+ !(rdev->desc->ops->get_voltage ||
+ rdev->desc->ops->get_voltage_sel))) {
int current_supply_uV;
int selector;