On 06/15/2015 04:57 AM, Viresh Kumar wrote:
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index 6b554e417b1f..0022453e4b60 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -1218,6 +1219,8 @@ static int _of_init_opp_table_v2(struct device *dev, goto put_opp_np; if (!ret) {
const phandle *handle;
- if (!dev_opp) { dev_opp = _find_device_opp(dev); if (WARN_ON(!dev_opp))
@@ -1227,6 +1230,25 @@ static int _of_init_opp_table_v2(struct device *dev, dev_opp->np = opp_np; if (of_get_property(opp_np, "opp-shared", NULL)) dev_opp->shared_opp = true;
/* OPP to select on device suspend */
handle = of_get_property(opp_np, "opp-suspend", NULL);
if (handle) {
struct device_node *suspend_opp_np;
struct dev_pm_opp *opp;
suspend_opp_np = of_find_node_by_phandle(be32_to_cpup(handle));
Couldn't this be done with of_parse_phandle() instead? Otherwise the patch looks ok.
list_for_each_entry_rcu(opp, &dev_opp->opp_list, node)
if (opp->np == suspend_opp_np) {
dev_opp->suspend_opp = opp;
break;
}
if (!dev_opp->suspend_opp)
dev_err(dev, "%s: Invalid opp-suspend\n",
__func__);
} else { of_free_opp_table(dev); }}