diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 54a05b8f6f95..44158e9b86ec 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1195,10 +1195,13 @@ static int set_machine_constraints(struct regulator_dev *rdev, * and we have control then make sure it is enabled. */ if (rdev->constraints->always_on || rdev->constraints->boot_on) { - ret = _regulator_do_enable(rdev); - if (ret < 0 && ret != -EINVAL) { - rdev_err(rdev, "failed to enable\n"); - return ret; + /* The regulator may on if it's not switchable or left on */ + if (!_regulator_is_enabled(rdev)) { + ret = _regulator_do_enable(rdev); + if (ret < 0 && ret != -EINVAL) { + rdev_err(rdev, "failed to enable\n"); + return ret; + } } }