mirror of https://gitee.com/openkylin/linux.git
Thermal: Introduce multiple cooling states support
This is because general active cooling devices, like fans, may have multiple speeds, which can be mapped to different cooling states. Signed-off-by: Zhang Rui <rui.zhang@intel.com> Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl> Reviewed-by: Valentin, Eduardo <eduardo.valentin@ti.com>
This commit is contained in:
parent
0d7614f09c
commit
e3f25e6e58
|
@ -1059,6 +1059,7 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
|
||||||
enum thermal_trip_type trip_type;
|
enum thermal_trip_type trip_type;
|
||||||
struct thermal_cooling_device_instance *instance;
|
struct thermal_cooling_device_instance *instance;
|
||||||
struct thermal_cooling_device *cdev;
|
struct thermal_cooling_device *cdev;
|
||||||
|
unsigned long cur_state, max_state;
|
||||||
|
|
||||||
mutex_lock(&tz->lock);
|
mutex_lock(&tz->lock);
|
||||||
|
|
||||||
|
@ -1098,10 +1099,17 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
|
||||||
|
|
||||||
cdev = instance->cdev;
|
cdev = instance->cdev;
|
||||||
|
|
||||||
|
cdev->ops->get_cur_state(cdev, &cur_state);
|
||||||
|
cdev->ops->get_max_state(cdev, &max_state);
|
||||||
|
|
||||||
if (temp >= trip_temp)
|
if (temp >= trip_temp)
|
||||||
cdev->ops->set_cur_state(cdev, 1);
|
cur_state = cur_state < max_state ?
|
||||||
|
(cur_state + 1) : max_state;
|
||||||
else
|
else
|
||||||
cdev->ops->set_cur_state(cdev, 0);
|
cur_state = cur_state > 0 ?
|
||||||
|
(cur_state - 1) : 0;
|
||||||
|
|
||||||
|
cdev->ops->set_cur_state(cdev, cur_state);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case THERMAL_TRIP_PASSIVE:
|
case THERMAL_TRIP_PASSIVE:
|
||||||
|
|
Loading…
Reference in New Issue