OSDN Git Service

thermal: intel: quark_dts: Use generic trip points
authorDaniel Lezcano <daniel.lezcano@linaro.org>
Wed, 1 Feb 2023 22:36:16 +0000 (23:36 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 3 Feb 2023 13:49:26 +0000 (14:49 +0100)
Make the intel_quark_dts_thermal driver register an array of generic
trip points along with the thermal zone and drop the trip points
thermal zone callbacks that are not used any more from it.

Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/intel/intel_quark_dts_thermal.c

index 3eafc6b..97b843f 100644 (file)
@@ -84,6 +84,7 @@
 #define QRK_DTS_MASK_TP_THRES          0xFF
 #define QRK_DTS_SHIFT_TP               8
 #define QRK_DTS_ID_TP_CRITICAL         0
+#define QRK_DTS_ID_TP_HOT              1
 #define QRK_DTS_SAFE_TP_THRES          105
 
 /* Thermal Sensor Register Lock */
@@ -104,6 +105,7 @@ struct soc_sensor_entry {
        u32 store_ptps;
        u32 store_dts_enable;
        struct thermal_zone_device *tzone;
+       struct thermal_trip trips[QRK_MAX_DTS_TRIPS];
 };
 
 static struct soc_sensor_entry *soc_dts;
@@ -172,9 +174,9 @@ static int soc_dts_disable(struct thermal_zone_device *tzd)
        return ret;
 }
 
-static int _get_trip_temp(int trip, int *temp)
+static int get_trip_temp(int trip)
 {
-       int status;
+       int status, temp;
        u32 out;
 
        mutex_lock(&dts_update_mutex);
@@ -183,7 +185,7 @@ static int _get_trip_temp(int trip, int *temp)
        mutex_unlock(&dts_update_mutex);
 
        if (status)
-               return status;
+               return THERMAL_TEMP_INVALID;
 
        /*
         * Thermal Sensor Programmable Trip Point Register has 8-bit
@@ -191,21 +193,10 @@ static int _get_trip_temp(int trip, int *temp)
         * thresholds. The threshold value is always offset by its
         * temperature base (50 degree Celsius).
         */
-       *temp = (out >> (trip * QRK_DTS_SHIFT_TP)) & QRK_DTS_MASK_TP_THRES;
-       *temp -= QRK_DTS_TEMP_BASE;
+       temp = (out >> (trip * QRK_DTS_SHIFT_TP)) & QRK_DTS_MASK_TP_THRES;
+       temp -= QRK_DTS_TEMP_BASE;
 
-       return 0;
-}
-
-static inline int sys_get_trip_temp(struct thermal_zone_device *tzd,
-                               int trip, int *temp)
-{
-       return _get_trip_temp(trip, temp);
-}
-
-static inline int sys_get_crit_temp(struct thermal_zone_device *tzd, int *temp)
-{
-       return _get_trip_temp(QRK_DTS_ID_TP_CRITICAL, temp);
+       return temp;
 }
 
 static int update_trip_temp(struct soc_sensor_entry *aux_entry,
@@ -262,17 +253,6 @@ static inline int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
        return update_trip_temp(tzd->devdata, trip, temp);
 }
 
-static int sys_get_trip_type(struct thermal_zone_device *thermal,
-               int trip, enum thermal_trip_type *type)
-{
-       if (trip)
-               *type = THERMAL_TRIP_HOT;
-       else
-               *type = THERMAL_TRIP_CRITICAL;
-
-       return 0;
-}
-
 static int sys_get_curr_temp(struct thermal_zone_device *tzd,
                                int *temp)
 {
@@ -315,10 +295,7 @@ static int sys_change_mode(struct thermal_zone_device *tzd,
 
 static struct thermal_zone_device_ops tzone_ops = {
        .get_temp = sys_get_curr_temp,
-       .get_trip_temp = sys_get_trip_temp,
-       .get_trip_type = sys_get_trip_type,
        .set_trip_temp = sys_set_trip_temp,
-       .get_crit_temp = sys_get_crit_temp,
        .change_mode = sys_change_mode,
 };
 
@@ -385,10 +362,18 @@ static struct soc_sensor_entry *alloc_soc_dts(void)
                        goto err_ret;
        }
 
-       aux_entry->tzone = thermal_zone_device_register("quark_dts",
-                       QRK_MAX_DTS_TRIPS,
-                       wr_mask,
-                       aux_entry, &tzone_ops, NULL, 0, polling_delay);
+       aux_entry->trips[QRK_DTS_ID_TP_CRITICAL].temperature = get_trip_temp(QRK_DTS_ID_TP_CRITICAL);
+       aux_entry->trips[QRK_DTS_ID_TP_CRITICAL].type = THERMAL_TRIP_CRITICAL;
+
+       aux_entry->trips[QRK_DTS_ID_TP_HOT].temperature = get_trip_temp(QRK_DTS_ID_TP_HOT);
+       aux_entry->trips[QRK_DTS_ID_TP_HOT].type = THERMAL_TRIP_HOT;
+
+       aux_entry->tzone = thermal_zone_device_register_with_trips("quark_dts",
+                                                                  aux_entry->trips,
+                                                                  QRK_MAX_DTS_TRIPS,
+                                                                  wr_mask,
+                                                                  aux_entry, &tzone_ops,
+                                                                  NULL, 0, polling_delay);
        if (IS_ERR(aux_entry->tzone)) {
                err = PTR_ERR(aux_entry->tzone);
                goto err_ret;