thermal: Fix binding problem when there is thermal zone params
diff mbox

Message ID 1382090587-9602-1-git-send-email-wni@nvidia.com
State Changes Requested
Delegated to: Zhang Rui
Headers show

Commit Message

Wei Ni Oct. 18, 2013, 10:03 a.m. UTC
The thermal zone params can be used to set governor
to specific thermal governor for thermal zone device.
But if the thermal zone params has only governor name
without thermal bind params, then the thermal zone device
will not be binding to cooling device. Because tz->ops->bind
operator is not invoked in bind_tz() and bind_cdev() when
there is thermal zone params.

Signed-off-by: Wei Ni <wni@nvidia.com>
Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com>
---
 drivers/thermal/thermal_core.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Zhang Rui Nov. 6, 2013, 5:29 a.m. UTC | #1
On Fri, 2013-10-18 at 18:03 +0800, Wei Ni wrote:
> The thermal zone params can be used to set governor
> to specific thermal governor for thermal zone device.
> But if the thermal zone params has only governor name
> without thermal bind params, then the thermal zone device
> will not be binding to cooling device. Because tz->ops->bind
> operator is not invoked in bind_tz() and bind_cdev() when
> there is thermal zone params.
> 
> Signed-off-by: Wei Ni <wni@nvidia.com>
> Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com>
> ---
>  drivers/thermal/thermal_core.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 4962a6a..2ea41d3 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -247,7 +247,7 @@ static void bind_cdev(struct thermal_cooling_device *cdev)
>  		if (!pos->tzp && !pos->ops->bind)
>  			continue;
>  
> -		if (!pos->tzp && pos->ops->bind) {
> +		if (pos->ops->bind) {
>  			ret = pos->ops->bind(pos, cdev);
>  			if (ret)
>  				print_bind_err_msg(pos, cdev, ret);
IMO, we should also add
+		continue;
after binding with pos->ops->bind(), to void binding via pos->tzp->tbp
again, no?

thanks,
rui
> @@ -282,8 +282,8 @@ static void bind_tz(struct thermal_zone_device *tz)
>  
>  	mutex_lock(&thermal_list_lock);
>  
> -	/* If there is no platform data, try to use ops->bind */
> -	if (!tzp && tz->ops->bind) {
> +	/* If there is ops->bind, try to use ops->bind */
> +	if (tz->ops->bind) {
>  		list_for_each_entry(pos, &thermal_cdev_list, node) {
>  			ret = tz->ops->bind(tz, pos);
>  			if (ret)


--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Wei Ni Nov. 6, 2013, 6:04 a.m. UTC | #2
On 11/06/2013 01:29 PM, Zhang Rui wrote:
> On Fri, 2013-10-18 at 18:03 +0800, Wei Ni wrote:
>> @@ -247,7 +247,7 @@ static void bind_cdev(struct thermal_cooling_device *cdev)
>>  		if (!pos->tzp && !pos->ops->bind)
>>  			continue;
>>  
>> -		if (!pos->tzp && pos->ops->bind) {
>> +		if (pos->ops->bind) {
>>  			ret = pos->ops->bind(pos, cdev);
>>  			if (ret)
>>  				print_bind_err_msg(pos, cdev, ret);
> IMO, we should also add
> +		continue;
> after binding with pos->ops->bind(), to void binding via pos->tzp->tbp
> again, no?

Oh, yes, you are right. I will add it.

> 
> thanks,
> rui
>> @@ -282,8 +282,8 @@ static void bind_tz(struct thermal_zone_device *tz)
>>  
>>  	mutex_lock(&thermal_list_lock);
>>  
>> -	/* If there is no platform data, try to use ops->bind */
>> -	if (!tzp && tz->ops->bind) {
>> +	/* If there is ops->bind, try to use ops->bind */
>> +	if (tz->ops->bind) {
>>  		list_for_each_entry(pos, &thermal_cdev_list, node) {
>>  			ret = tz->ops->bind(tz, pos);
>>  			if (ret)
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 4962a6a..2ea41d3 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -247,7 +247,7 @@  static void bind_cdev(struct thermal_cooling_device *cdev)
 		if (!pos->tzp && !pos->ops->bind)
 			continue;
 
-		if (!pos->tzp && pos->ops->bind) {
+		if (pos->ops->bind) {
 			ret = pos->ops->bind(pos, cdev);
 			if (ret)
 				print_bind_err_msg(pos, cdev, ret);
@@ -282,8 +282,8 @@  static void bind_tz(struct thermal_zone_device *tz)
 
 	mutex_lock(&thermal_list_lock);
 
-	/* If there is no platform data, try to use ops->bind */
-	if (!tzp && tz->ops->bind) {
+	/* If there is ops->bind, try to use ops->bind */
+	if (tz->ops->bind) {
 		list_for_each_entry(pos, &thermal_cdev_list, node) {
 			ret = tz->ops->bind(tz, pos);
 			if (ret)