Subject: [PATCH 08/10] OPP: Add support for opp-suspend

From: [email-masked] (Stephen Boyd)
Date: Fri, 17 Jul 2015 12:22:43 -0700

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);
>   	}

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project