diff options
author | John Crispin <john@openwrt.org> | 2015-11-02 10:18:50 +0000 |
---|---|---|
committer | John Crispin <john@openwrt.org> | 2015-11-02 10:18:50 +0000 |
commit | 25afe99b31f4ef3d835f96545e370770c230ac44 (patch) | |
tree | 5dbe83834a0a67121c557b7549a13221317f07eb /target/linux/mediatek/patches/0017-thermal-Allow-sensor-ops-to-fail-with-ENOSYS.patch | |
parent | 12e0d2737f558e886cf698e939f1758ab6a64947 (diff) | |
download | mtk-20170518-25afe99b31f4ef3d835f96545e370770c230ac44.zip mtk-20170518-25afe99b31f4ef3d835f96545e370770c230ac44.tar.gz mtk-20170518-25afe99b31f4ef3d835f96545e370770c230ac44.tar.bz2 |
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>
SVN-Revision: 47354
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.patch | 90 |
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 0000000..f533a88 --- /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 + |