thermal: streamline get_trend callbacks
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 22 Jun 2016 08:42:03 +0000 (16:42 +0800)
committerZhang Rui <rui.zhang@intel.com>
Tue, 27 Sep 2016 06:02:16 +0000 (14:02 +0800)
The .get_trend callback in struct thermal_zone_device_ops has
the prototype:
        int (*get_trend) (struct thermal_zone_device *, int,
                          enum thermal_trend *);
whereas the .get_trend callback in struct thermal_zone_of_device_ops
has:
        int (*get_trend)(void *, long *);

Streamline both prototypes and add the trip argument to the OF callback
aswell and use enum thermal_trend * instead of an integer pointer.

While the OF prototype may be the better one, this should be decided at
framework level and not on OF level.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Eduardo Valentin <edubezval@gmail.com>
Cc: linux-pm@vger.kernel.org
Reviewed-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
drivers/thermal/of-thermal.c
drivers/thermal/qcom/tsens.c
drivers/thermal/qcom/tsens.h
drivers/thermal/ti-soc-thermal/ti-thermal-common.c
include/linux/thermal.h

index 2d2a06f155e2a08593369e1f76642f8fb49e783e..20822abc66824405ce5de43f541286e77f248b9e 100644 (file)
@@ -202,25 +202,11 @@ static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip,
                                enum thermal_trend *trend)
 {
        struct __thermal_zone *data = tz->devdata;
-       long dev_trend;
-       int r;
 
        if (!data->ops->get_trend)
                return -EINVAL;
 
-       r = data->ops->get_trend(data->sensor_data, &dev_trend);
-       if (r)
-               return r;
-
-       /* TODO: These intervals might have some thresholds, but in core code */
-       if (dev_trend > 0)
-               *trend = THERMAL_TREND_RAISING;
-       else if (dev_trend < 0)
-               *trend = THERMAL_TREND_DROPPING;
-       else
-               *trend = THERMAL_TREND_STABLE;
-
-       return 0;
+       return data->ops->get_trend(data->sensor_data, trip, trend);
 }
 
 static int of_thermal_bind(struct thermal_zone_device *thermal,
index b18227269286c905709f28cc1f26c1fa291a4329..446f70b5dbb2f12039b3b6126a75c8a9a7473ad2 100644 (file)
@@ -29,13 +29,13 @@ static int tsens_get_temp(void *data, int *temp)
        return tmdev->ops->get_temp(tmdev, s->id, temp);
 }
 
-static int tsens_get_trend(void *data, long *temp)
+static int tsens_get_trend(void *p, int trip, enum thermal_trend *trend)
 {
-       const struct tsens_sensor *s = data;
+       const struct tsens_sensor *s = p;
        struct tsens_device *tmdev = s->tmdev;
 
        if (tmdev->ops->get_trend)
-               return tmdev->ops->get_trend(tmdev, s->id, temp);
+               return  tmdev->ops->get_trend(tmdev, s->id, trend);
 
        return -ENOTSUPP;
 }
index b0f8c47ff9e2bfea227d00bf23a5dd6b6a63b910..911c1978892b3bf6797cf707f3d523ea9c50a628 100644 (file)
@@ -17,6 +17,8 @@
 #define ONE_PT_CALIB2          0x2
 #define TWO_PT_CALIB           0x3
 
+#include <linux/thermal.h>
+
 struct tsens_device;
 
 struct tsens_sensor {
@@ -50,7 +52,7 @@ struct tsens_ops {
        void (*disable)(struct tsens_device *);
        int (*suspend)(struct tsens_device *);
        int (*resume)(struct tsens_device *);
-       int (*get_trend)(struct tsens_device *, int, long *);
+       int (*get_trend)(struct tsens_device *, int, enum thermal_trend *);
 };
 
 /**
index 15c0a9ac2209eab4a19e358370f53bcf3288a5a5..4a6757ca78f056cc7858e861d0cd3fcd1fba83f2 100644 (file)
@@ -239,7 +239,7 @@ static int ti_thermal_get_trip_temp(struct thermal_zone_device *thermal,
        return 0;
 }
 
-static int __ti_thermal_get_trend(void *p, long *trend)
+static int __ti_thermal_get_trend(void *p, int trip, enum thermal_trend *trend)
 {
        struct ti_thermal_data *data = p;
        struct ti_bandgap *bgp;
@@ -252,22 +252,6 @@ static int __ti_thermal_get_trend(void *p, long *trend)
        if (ret)
                return ret;
 
-       *trend = tr;
-
-       return 0;
-}
-
-/* Get the temperature trend callback functions for thermal zone */
-static int ti_thermal_get_trend(struct thermal_zone_device *thermal,
-                               int trip, enum thermal_trend *trend)
-{
-       int ret;
-       long tr;
-
-       ret = __ti_thermal_get_trend(thermal->devdata, &tr);
-       if (ret)
-               return ret;
-
        if (tr > 0)
                *trend = THERMAL_TREND_RAISING;
        else if (tr < 0)
@@ -278,6 +262,13 @@ static int ti_thermal_get_trend(struct thermal_zone_device *thermal,
        return 0;
 }
 
+/* Get the temperature trend callback functions for thermal zone */
+static int ti_thermal_get_trend(struct thermal_zone_device *thermal,
+                               int trip, enum thermal_trend *trend)
+{
+       return __ti_thermal_get_trend(thermal->devdata, trip, trend);
+}
+
 /* Get critical temperature callback functions for thermal zone */
 static int ti_thermal_get_crit_temp(struct thermal_zone_device *thermal,
                                    int *temp)
index 20118b9ebeb7bb98c24663e695dd0bc0b3c03ed2..b3c16f06fdc40df5bebfdadc22c582fe504037aa 100644 (file)
@@ -350,7 +350,7 @@ struct thermal_genl_event {
  */
 struct thermal_zone_of_device_ops {
        int (*get_temp)(void *, int *);
-       int (*get_trend)(void *, long *);
+       int (*get_trend)(void *, int, enum thermal_trend *);
        int (*set_trips)(void *, int, int);
        int (*set_emul_temp)(void *, int);
        int (*set_trip_temp)(void *, int, int);