summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Szyprowski <m.szyprowski@samsung.com>2019-10-17 06:27:58 -0400
committerViresh Kumar <viresh.kumar@linaro.org>2019-10-20 22:28:12 -0400
commit24957db1004353346583c9cc6d783db8f213e3ad (patch)
treec576ccf5b89f60d5eb625c91db12a63eac66916e
parentf2edbb6699b0bc6e4f789846b99007200546c6c2 (diff)
opp: core: Revert "add regulators enable and disable"
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 7f93ff73f7c8c8bfa6be33bcc16470b0b44682aa. 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>
-rw-r--r--drivers/opp/core.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 3b7ffd0234e9..9ff0538ee83a 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -1626,12 +1626,6 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev,
1626 goto free_regulators; 1626 goto free_regulators;
1627 } 1627 }
1628 1628
1629 ret = regulator_enable(reg);
1630 if (ret < 0) {
1631 regulator_put(reg);
1632 goto free_regulators;
1633 }
1634
1635 opp_table->regulators[i] = reg; 1629 opp_table->regulators[i] = reg;
1636 } 1630 }
1637 1631
@@ -1645,10 +1639,8 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev,
1645 return opp_table; 1639 return opp_table;
1646 1640
1647free_regulators: 1641free_regulators:
1648 while (i--) { 1642 while (i != 0)
1649 regulator_disable(opp_table->regulators[i]); 1643 regulator_put(opp_table->regulators[--i]);
1650 regulator_put(opp_table->regulators[i]);
1651 }
1652 1644
1653 kfree(opp_table->regulators); 1645 kfree(opp_table->regulators);
1654 opp_table->regulators = NULL; 1646 opp_table->regulators = NULL;
@@ -1674,10 +1666,8 @@ void dev_pm_opp_put_regulators(struct opp_table *opp_table)
1674 /* Make sure there are no concurrent readers while updating opp_table */ 1666 /* Make sure there are no concurrent readers while updating opp_table */
1675 WARN_ON(!list_empty(&opp_table->opp_list)); 1667 WARN_ON(!list_empty(&opp_table->opp_list));
1676 1668
1677 for (i = opp_table->regulator_count - 1; i >= 0; i--) { 1669 for (i = opp_table->regulator_count - 1; i >= 0; i--)
1678 regulator_disable(opp_table->regulators[i]);
1679 regulator_put(opp_table->regulators[i]); 1670 regulator_put(opp_table->regulators[i]);
1680 }
1681 1671
1682 _free_set_opp_data(opp_table); 1672 _free_set_opp_data(opp_table);
1683 1673