diff options
Diffstat (limited to 'drivers/thermal/thermal_helpers.c')
| -rw-r--r-- | drivers/thermal/thermal_helpers.c | 27 | 
1 files changed, 17 insertions, 10 deletions
| diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c index 7f50f412e02a..3edd047e144f 100644 --- a/drivers/thermal/thermal_helpers.c +++ b/drivers/thermal/thermal_helpers.c @@ -192,18 +192,11 @@ static void thermal_cdev_set_cur_state(struct thermal_cooling_device *cdev,  	thermal_cooling_device_stats_update(cdev, target);  } -void thermal_cdev_update(struct thermal_cooling_device *cdev) +void __thermal_cdev_update(struct thermal_cooling_device *cdev)  {  	struct thermal_instance *instance;  	unsigned long target = 0; -	mutex_lock(&cdev->lock); -	/* cooling device is updated*/ -	if (cdev->updated) { -		mutex_unlock(&cdev->lock); -		return; -	} -  	/* Make sure cdev enters the deepest cooling state */  	list_for_each_entry(instance, &cdev->thermal_instances, cdev_node) {  		dev_dbg(&cdev->device, "zone%d->target=%lu\n", @@ -216,11 +209,25 @@ void thermal_cdev_update(struct thermal_cooling_device *cdev)  	thermal_cdev_set_cur_state(cdev, target); -	cdev->updated = true; -	mutex_unlock(&cdev->lock);  	trace_cdev_update(cdev, target);  	dev_dbg(&cdev->device, "set to state %lu\n", target);  } + +/** + * thermal_cdev_update - update cooling device state if needed + * @cdev:	pointer to struct thermal_cooling_device + * + * Update the cooling device state if there is a need. + */ +void thermal_cdev_update(struct thermal_cooling_device *cdev) +{ +	mutex_lock(&cdev->lock); +	if (!cdev->updated) { +		__thermal_cdev_update(cdev); +		cdev->updated = true; +	} +	mutex_unlock(&cdev->lock); +}  EXPORT_SYMBOL(thermal_cdev_update);  /** | 
