Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1531928 > unrolled thread

[PATCH V5 10/10] PM / OPP: Don't assume platform doesn't have regulators

Started byViresh Kumar <viresh.kumar@linaro.org>
First post2016-11-29 07:40 +0100
Last post2016-11-29 07:40 +0100
Articles 1 — 1 participant

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH V5 10/10] PM / OPP: Don't assume platform doesn't have regulators Viresh Kumar <viresh.kumar@linaro.org> - 2016-11-29 07:40 +0100

#1531928 — [PATCH V5 10/10] PM / OPP: Don't assume platform doesn't have regulators

FromViresh Kumar <viresh.kumar@linaro.org>
Date2016-11-29 07:40 +0100
Subject[PATCH V5 10/10] PM / OPP: Don't assume platform doesn't have regulators
Message-ID<sIKf8-4JS-17@gated-at.bofh.it>
If the regulators aren't set explicitly by the platform, the OPP core
assumes that the platform doesn't have any regulator and uses the
clk-only callback.

If the platform failed to register a regulator with the core, then this
can turn out to be a dangerous assumption as the OPP core will try to
change clk without changing regulators.

Handle that properly by making sure that the DT didn't have any entries
for supply voltages as well.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
---
 drivers/base/power/opp/core.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index 3c9f223709ab..f7a5fb4dbf11 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -748,7 +748,20 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
 
 	/* Only frequency scaling */
 	if (!regulators) {
+		unsigned long u_volt = opp->supplies[0].u_volt;
+
 		rcu_read_unlock();
+
+		/*
+		 * DT contained supply ratings? Consider platform failed to set
+		 * regulators.
+		 */
+		if (unlikely(u_volt)) {
+			dev_err(dev, "%s: Regulator not registered with OPP core\n",
+				__func__);
+			return -EINVAL;
+		}
+
 		return _generic_set_opp_clk_only(dev, clk, old_freq, freq);
 	}
 
-- 
2.7.1.410.g6faf27b

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web