Skip to content

Commit

Permalink
opp: core: Revert "add regulators enable and disable"
Browse files Browse the repository at this point in the history
All the drivers, which use the OPP framework control regulators, which
are already enabled. Typically those regulators are also system critical,
due to providing power to CPU core or system buses. It turned out that
there are cases, where calling regulator_enable() on such boot-enabled
regulator has side-effects and might change its initial voltage due to
performing initial voltage balancing without all restrictions from the
consumers. Until this issue becomes finally solved in regulator core,
avoid calling regulator_enable()/disable() from the OPP framework.

This reverts commit 7f93ff7.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
  • Loading branch information
Marek Szyprowski authored and Viresh Kumar committed Oct 21, 2019
1 parent f2edbb6 commit 24957db
Showing 1 changed file with 3 additions and 13 deletions.
16 changes: 3 additions & 13 deletions drivers/opp/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1626,12 +1626,6 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev,
goto free_regulators;
}

ret = regulator_enable(reg);
if (ret < 0) {
regulator_put(reg);
goto free_regulators;
}

opp_table->regulators[i] = reg;
}

Expand All @@ -1645,10 +1639,8 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev,
return opp_table;

free_regulators:
while (i--) {
regulator_disable(opp_table->regulators[i]);
regulator_put(opp_table->regulators[i]);
}
while (i != 0)
regulator_put(opp_table->regulators[--i]);

kfree(opp_table->regulators);
opp_table->regulators = NULL;
Expand All @@ -1674,10 +1666,8 @@ void dev_pm_opp_put_regulators(struct opp_table *opp_table)
/* Make sure there are no concurrent readers while updating opp_table */
WARN_ON(!list_empty(&opp_table->opp_list));

for (i = opp_table->regulator_count - 1; i >= 0; i--) {
regulator_disable(opp_table->regulators[i]);
for (i = opp_table->regulator_count - 1; i >= 0; i--)
regulator_put(opp_table->regulators[i]);
}

_free_set_opp_data(opp_table);

Expand Down

0 comments on commit 24957db

Please sign in to comment.