Commit e78eaf45 authored by Sascha Hauer's avatar Sascha Hauer Committed by Zhang Rui

thermal: streamline get_trend callbacks

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: default avatarSascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: default avatarCaesar 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: default avatarKeerthy <j-keerthy@ti.com>
Signed-off-by: default avatarEduardo Valentin <edubezval@gmail.com>
Signed-off-by: default avatarZhang Rui <rui.zhang@intel.com>
parent 826386e7
...@@ -202,25 +202,11 @@ static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip, ...@@ -202,25 +202,11 @@ static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip,
enum thermal_trend *trend) enum thermal_trend *trend)
{ {
struct __thermal_zone *data = tz->devdata; struct __thermal_zone *data = tz->devdata;
long dev_trend;
int r;
if (!data->ops->get_trend) if (!data->ops->get_trend)
return -EINVAL; return -EINVAL;
r = data->ops->get_trend(data->sensor_data, &dev_trend); return data->ops->get_trend(data->sensor_data, trip, 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;
} }
static int of_thermal_bind(struct thermal_zone_device *thermal, static int of_thermal_bind(struct thermal_zone_device *thermal,
......
...@@ -29,13 +29,13 @@ static int tsens_get_temp(void *data, int *temp) ...@@ -29,13 +29,13 @@ static int tsens_get_temp(void *data, int *temp)
return tmdev->ops->get_temp(tmdev, s->id, 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; struct tsens_device *tmdev = s->tmdev;
if (tmdev->ops->get_trend) 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; return -ENOTSUPP;
} }
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#define ONE_PT_CALIB2 0x2 #define ONE_PT_CALIB2 0x2
#define TWO_PT_CALIB 0x3 #define TWO_PT_CALIB 0x3
#include <linux/thermal.h>
struct tsens_device; struct tsens_device;
struct tsens_sensor { struct tsens_sensor {
...@@ -50,7 +52,7 @@ struct tsens_ops { ...@@ -50,7 +52,7 @@ struct tsens_ops {
void (*disable)(struct tsens_device *); void (*disable)(struct tsens_device *);
int (*suspend)(struct tsens_device *); int (*suspend)(struct tsens_device *);
int (*resume)(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 *);
}; };
/** /**
......
...@@ -239,7 +239,7 @@ static int ti_thermal_get_trip_temp(struct thermal_zone_device *thermal, ...@@ -239,7 +239,7 @@ static int ti_thermal_get_trip_temp(struct thermal_zone_device *thermal,
return 0; 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_thermal_data *data = p;
struct ti_bandgap *bgp; struct ti_bandgap *bgp;
...@@ -252,22 +252,6 @@ static int __ti_thermal_get_trend(void *p, long *trend) ...@@ -252,22 +252,6 @@ static int __ti_thermal_get_trend(void *p, long *trend)
if (ret) if (ret)
return 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) if (tr > 0)
*trend = THERMAL_TREND_RAISING; *trend = THERMAL_TREND_RAISING;
else if (tr < 0) else if (tr < 0)
...@@ -278,6 +262,13 @@ static int ti_thermal_get_trend(struct thermal_zone_device *thermal, ...@@ -278,6 +262,13 @@ static int ti_thermal_get_trend(struct thermal_zone_device *thermal,
return 0; 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 */ /* Get critical temperature callback functions for thermal zone */
static int ti_thermal_get_crit_temp(struct thermal_zone_device *thermal, static int ti_thermal_get_crit_temp(struct thermal_zone_device *thermal,
int *temp) int *temp)
......
...@@ -350,7 +350,7 @@ struct thermal_genl_event { ...@@ -350,7 +350,7 @@ struct thermal_genl_event {
*/ */
struct thermal_zone_of_device_ops { struct thermal_zone_of_device_ops {
int (*get_temp)(void *, int *); 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_trips)(void *, int, int);
int (*set_emul_temp)(void *, int); int (*set_emul_temp)(void *, int);
int (*set_trip_temp)(void *, int, int); int (*set_trip_temp)(void *, int, int);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment