]> git.karo-electronics.de Git - linux-beck.git/commitdiff
thermal: check validity get_trip_hyst function pointer in bang-bang governor
authorMichele Di Giorgio <michele.digiorgio@arm.com>
Wed, 11 May 2016 09:49:07 +0000 (10:49 +0100)
committerZhang Rui <rui.zhang@intel.com>
Mon, 16 May 2016 05:21:11 +0000 (13:21 +0800)
Bang-bang thermal governor uses trip point hysteresis to make decisions.
Hysteresis is a required property in the device tree for trip points, but it is
an optional thermal zone device operation. Hence, we need to check whether the
function pointer is valid or not.

If it is not available, we assume the hysteresis to be zero. Consequently, a
highly varying temperature will make the governor continuosly switch a cooling
device ON and OFF.

CC: Zhang Rui <rui.zhang@intel.com>
CC: Eduardo Valentin <edubezval@gmail.com>
CC: Peter Feuerer <peter@piie.net>
Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
drivers/thermal/gov_bang_bang.c

index 70836c5b89bc411d3a1b91ebea91c3b8f92b4dba..fc52016d4e85be590e15f4e1976b8378d2c456d2 100644 (file)
@@ -29,7 +29,13 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
        struct thermal_instance *instance;
 
        tz->ops->get_trip_temp(tz, trip, &trip_temp);
-       tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
+
+       if (!tz->ops->get_trip_hyst) {
+               pr_warn_once("Undefined get_trip_hyst for thermal zone %s - "
+                               "running with default hysteresis zero\n", tz->type);
+               trip_hyst = 0;
+       } else
+               tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
 
        dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n",
                                trip, trip_temp, tz->temperature,