diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2015-09-22 09:35:31 -0700 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2015-11-02 11:11:13 +0800 |
commit | 18e6007743c642facbe737d0ea663856f28b50f6 (patch) | |
tree | 7d196ec45d84712dfd4c93eb4c2408a4a65df4c0 | |
parent | b7f73962f52687ccb6ab4b9f3667d27f7ddda1f4 (diff) |
PM / OPP: of_property_count_u32_elems() can return errors
of_property_count_u32_elems() will never return 0, but a -ve error value
of a positive count. And so the current !count check is wrong.
Also, a missing "opp-microvolt" property isn't a problem and so we need
to do of_find_property() separately to confirm that.
Fixes: 274659029c9d (PM / OPP: Add support to parse "operating-points-v2" bindings)
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
(cherry picked from commit 680168a58a9315e1301f4ebb062244470d4919b0)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
-rw-r--r-- | drivers/base/power/opp.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index 3df62dbcec3a..7417538482a6 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -894,10 +894,17 @@ static int opp_get_microvolt(struct dev_pm_opp *opp, struct device *dev) u32 microvolt[3] = {0}; int count, ret; - count = of_property_count_u32_elems(opp->np, "opp-microvolt"); - if (!count) + /* Missing property isn't a problem, but an invalid entry is */ + if (!of_find_property(opp->np, "opp-microvolt", NULL)) return 0; + count = of_property_count_u32_elems(opp->np, "opp-microvolt"); + if (count < 0) { + dev_err(dev, "%s: Invalid opp-microvolt property (%d)\n", + __func__, count); + return count; + } + /* There can be one or three elements here */ if (count != 1 && count != 3) { dev_err(dev, "%s: Invalid number of elements in opp-microvolt property (%d)\n", |