aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2015-11-02 10:18:50 +0000
committerJohn Crispin <blogic@openwrt.org>2015-11-02 10:18:50 +0000
commit20e347390b78de3f0a701e077aa1a69dd0977ec1 (patch)
treedd684baeca3d31c464be1095df76fb19a6e32f21 /target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch
parentcc6f9d1ab21bfe54f1f1193f3146da9444b42dde (diff)
downloadmaster-187ad058-20e347390b78de3f0a701e077aa1a69dd0977ec1.tar.gz
master-187ad058-20e347390b78de3f0a701e077aa1a69dd0977ec1.tar.bz2
master-187ad058-20e347390b78de3f0a701e077aa1a69dd0977ec1.zip
mediatek: add support for the new MT7623 Arm SoC
the support is still WIP. next steps are to make the pmic and ethernet work. this is the first commit to make sure nothing gets lost. Signed-off-by: John Crispin <blogic@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@47354 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch')
-rw-r--r--target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch b/target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch
new file mode 100644
index 0000000000..f533a88319
--- /dev/null
+++ b/target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch
@@ -0,0 +1,90 @@
+From 5b622cb2d6ff44b1fb0750beee61f93f2c00548a Mon Sep 17 00:00:00 2001
+From: Sascha Hauer <s.hauer@pengutronix.de>
+Date: Wed, 13 May 2015 10:52:36 +0200
+Subject: [PATCH 17/76] thermal: Allow sensor ops to fail with -ENOSYS
+
+The thermal core uses the existence of the .get_temp, .get_trend and
+.set_emul_temp to detect whether this operation exists and should be
+used or whether it should be emulated in software. This makes problems
+for of-thermal which has to modify the struct thermal_zone_device_ops
+during runtime whenever a sensor is registered or unregistered.
+
+Let the core test for -ENOSYS from these callbacks and treat it like
+if the callbacks were not present.
+
+This allows of-thermal to always set the sensor related callbacks and
+to make struct thermal_zone_device_ops const again.
+
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ drivers/thermal/thermal_core.c | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
+index 19da022..3d8f9f9 100644
+--- a/drivers/thermal/thermal_core.c
++++ b/drivers/thermal/thermal_core.c
+@@ -413,13 +413,16 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
+ */
+ int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
+ {
+- int ret = -EINVAL;
++ int ret;
+ int count;
+ int crit_temp = INT_MAX;
+ enum thermal_trip_type type;
+
+- if (!tz || IS_ERR(tz) || !tz->ops->get_temp)
+- goto exit;
++ if (!tz || IS_ERR(tz))
++ return -EINVAL;
++
++ if (!tz->ops->get_temp)
++ return -ENOSYS;
+
+ mutex_lock(&tz->lock);
+
+@@ -445,7 +448,7 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
+ }
+
+ mutex_unlock(&tz->lock);
+-exit:
++
+ return ret;
+ }
+ EXPORT_SYMBOL_GPL(thermal_zone_get_temp);
+@@ -454,10 +457,11 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
+ {
+ int temp, ret, count;
+
+- if (!tz->ops->get_temp)
++ ret = thermal_zone_get_temp(tz, &temp);
++
++ if (ret == -ENOSYS)
+ return;
+
+- ret = thermal_zone_get_temp(tz, &temp);
+ if (ret) {
+ if (ret != -EAGAIN)
+ dev_warn(&tz->device,
+@@ -783,10 +787,16 @@ emul_temp_store(struct device *dev, struct device_attribute *attr,
+ if (kstrtoul(buf, 10, &temperature))
+ return -EINVAL;
+
+- if (!tz->ops->set_emul_temp) {
++ if (tz->ops->set_emul_temp)
++ ret = tz->ops->set_emul_temp(tz, temperature);
++ else
++ ret = -ENOSYS;
++
++ if (ret == -ENOSYS) {
+ mutex_lock(&tz->lock);
+ tz->emul_temperature = temperature;
+ mutex_unlock(&tz->lock);
++ ret = 0;
+ } else {
+ ret = tz->ops->set_emul_temp(tz, temperature);
+ }
+--
+1.7.10.4
+