diff options
author | Lukasz Majewski <l.majewski@samsung.com> | 2014-12-08 12:04:21 -0500 |
---|---|---|
committer | Eduardo Valentin <edubezval@gmail.com> | 2014-12-08 20:10:00 -0500 |
commit | 184a4bf623fa587067851d25435fcb2f41de445b (patch) | |
tree | 98023bf8abd50b6672f3e4b0f34e9c41c7944456 | |
parent | ce8be7785922de0ef497b20384425ed04f674f9d (diff) |
thermal: of: Extend current of-thermal.c code to allow setting emulated temp
Before this change it was only possible to set get_temp() and get_trend()
methods to be used in the common code handling passing parameters via
device tree to "cpu-thermal" CPU thermal zone device.
Now it is possible to also set emulated value of temperature for debug
purposes.
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Acked-by: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
-rw-r--r-- | drivers/thermal/of-thermal.c | 24 | ||||
-rw-r--r-- | include/linux/thermal.h | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c index e062bf59ab6c..e145b66df444 100644 --- a/drivers/thermal/of-thermal.c +++ b/drivers/thermal/of-thermal.c | |||
@@ -161,6 +161,28 @@ of_thermal_get_trip_points(struct thermal_zone_device *tz) | |||
161 | } | 161 | } |
162 | EXPORT_SYMBOL_GPL(of_thermal_get_trip_points); | 162 | EXPORT_SYMBOL_GPL(of_thermal_get_trip_points); |
163 | 163 | ||
164 | /** | ||
165 | * of_thermal_set_emul_temp - function to set emulated temperature | ||
166 | * | ||
167 | * @tz: pointer to a thermal zone | ||
168 | * @temp: temperature to set | ||
169 | * | ||
170 | * This function gives the ability to set emulated value of temperature, | ||
171 | * which is handy for debugging | ||
172 | * | ||
173 | * Return: zero on success, error code otherwise | ||
174 | */ | ||
175 | static int of_thermal_set_emul_temp(struct thermal_zone_device *tz, | ||
176 | unsigned long temp) | ||
177 | { | ||
178 | struct __thermal_zone *data = tz->devdata; | ||
179 | |||
180 | if (!data->ops || !data->ops->set_emul_temp) | ||
181 | return -EINVAL; | ||
182 | |||
183 | return data->ops->set_emul_temp(data->sensor_data, temp); | ||
184 | } | ||
185 | |||
164 | static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip, | 186 | static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip, |
165 | enum thermal_trend *trend) | 187 | enum thermal_trend *trend) |
166 | { | 188 | { |
@@ -392,6 +414,7 @@ thermal_zone_of_add_sensor(struct device_node *zone, | |||
392 | 414 | ||
393 | tzd->ops->get_temp = of_thermal_get_temp; | 415 | tzd->ops->get_temp = of_thermal_get_temp; |
394 | tzd->ops->get_trend = of_thermal_get_trend; | 416 | tzd->ops->get_trend = of_thermal_get_trend; |
417 | tzd->ops->set_emul_temp = of_thermal_set_emul_temp; | ||
395 | mutex_unlock(&tzd->lock); | 418 | mutex_unlock(&tzd->lock); |
396 | 419 | ||
397 | return tzd; | 420 | return tzd; |
@@ -520,6 +543,7 @@ void thermal_zone_of_sensor_unregister(struct device *dev, | |||
520 | mutex_lock(&tzd->lock); | 543 | mutex_lock(&tzd->lock); |
521 | tzd->ops->get_temp = NULL; | 544 | tzd->ops->get_temp = NULL; |
522 | tzd->ops->get_trend = NULL; | 545 | tzd->ops->get_trend = NULL; |
546 | tzd->ops->set_emul_temp = NULL; | ||
523 | 547 | ||
524 | tz->ops = NULL; | 548 | tz->ops = NULL; |
525 | tz->sensor_data = NULL; | 549 | tz->sensor_data = NULL; |
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index b8d91efa854e..99be7fc79c3b 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
@@ -297,10 +297,13 @@ struct thermal_genl_event { | |||
297 | * | 297 | * |
298 | * Optional: | 298 | * Optional: |
299 | * @get_trend: a pointer to a function that reads the sensor temperature trend. | 299 | * @get_trend: a pointer to a function that reads the sensor temperature trend. |
300 | * @set_emul_temp: a pointer to a function that sets sensor emulated | ||
301 | * temperature. | ||
300 | */ | 302 | */ |
301 | struct thermal_zone_of_device_ops { | 303 | struct thermal_zone_of_device_ops { |
302 | int (*get_temp)(void *, long *); | 304 | int (*get_temp)(void *, long *); |
303 | int (*get_trend)(void *, long *); | 305 | int (*get_trend)(void *, long *); |
306 | int (*set_emul_temp)(void *, unsigned long); | ||
304 | }; | 307 | }; |
305 | 308 | ||
306 | /** | 309 | /** |