aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch
diff options
context:
space:
mode:
authorAnsuel Smith <ansuelsmth@gmail.com>2021-03-01 01:02:09 +0100
committerPetr Štetiar <ynezz@true.cz>2021-05-07 07:05:16 +0200
commit96f10c9d7a88717e84782449122b958e5a15eddd (patch)
tree0ff7840551fe6546f21ab100344224246746292e /target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch
parentd53be2a2e98129ecf32009893ec46b1ce644721a (diff)
downloadupstream-96f10c9d7a88717e84782449122b958e5a15eddd.tar.gz
upstream-96f10c9d7a88717e84782449122b958e5a15eddd.tar.bz2
upstream-96f10c9d7a88717e84782449122b958e5a15eddd.zip
ipq806x: use newer tsens patch
Use improved tsens patch proposed upstream. Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Diffstat (limited to 'target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch')
-rw-r--r--target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch114
1 files changed, 114 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch b/target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch
new file mode 100644
index 0000000000..657f8b801b
--- /dev/null
+++ b/target/linux/ipq806x/patches-5.10/104-6-drivers-thermal-tsens-Replace-custom-8960-apis-with-.patch
@@ -0,0 +1,114 @@
+From 1ff9f982051759e0387e8c7e793b49c48eae291d Mon Sep 17 00:00:00 2001
+From: Ansuel Smith <ansuelsmth@gmail.com>
+Date: Wed, 25 Nov 2020 17:11:05 +0100
+Subject: [PATCH 06/10] drivers: thermal: tsens: Replace custom 8960 apis with
+ generic apis
+
+Rework calibrate function to use common function. Derive the offset from
+a missing hardcoded slope table and the data from the nvmem calib
+efuses.
+Drop custom get_temp function and use generic api.
+
+Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
+Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
+---
+ drivers/thermal/qcom/tsens-8960.c | 56 +++++++++----------------------
+ 1 file changed, 15 insertions(+), 41 deletions(-)
+
+diff --git a/drivers/thermal/qcom/tsens-8960.c b/drivers/thermal/qcom/tsens-8960.c
+index 95fcccafae14..9cc8a7dd23ae 100644
+--- a/drivers/thermal/qcom/tsens-8960.c
++++ b/drivers/thermal/qcom/tsens-8960.c
+@@ -67,6 +67,13 @@
+ #define S9_STATUS_OFF 0x3674
+ #define S10_STATUS_OFF 0x3678
+
++/* Original slope - 200 to compensate mC to C inaccuracy */
++static u32 tsens_msm8960_slope[] = {
++ 976, 976, 954, 976,
++ 911, 932, 932, 999,
++ 932, 999, 932
++ };
++
+ static int suspend_8960(struct tsens_priv *priv)
+ {
+ int ret;
+@@ -194,9 +201,7 @@ static int calibrate_8960(struct tsens_priv *priv)
+ {
+ int i;
+ char *data;
+-
+- ssize_t num_read = priv->num_sensors;
+- struct tsens_sensor *s = priv->sensor;
++ u32 p1[11];
+
+ data = qfprom_read(priv->dev, "calib");
+ if (IS_ERR(data))
+@@ -204,49 +209,18 @@ static int calibrate_8960(struct tsens_priv *priv)
+ if (IS_ERR(data))
+ return PTR_ERR(data);
+
+- for (i = 0; i < num_read; i++, s++)
+- s->offset = data[i];
++ for (i = 0; i < priv->num_sensors; i++) {
++ p1[i] = data[i];
++ priv->sensor[i].slope = tsens_msm8960_slope[i];
++ }
++
++ compute_intercept_slope(priv, p1, NULL, ONE_PT_CALIB);
+
+ kfree(data);
+
+ return 0;
+ }
+
+-/* Temperature on y axis and ADC-code on x-axis */
+-static inline int code_to_mdegC(u32 adc_code, const struct tsens_sensor *s)
+-{
+- int slope, offset;
+-
+- slope = thermal_zone_get_slope(s->tzd);
+- offset = CAL_MDEGC - slope * s->offset;
+-
+- return adc_code * slope + offset;
+-}
+-
+-static int get_temp_8960(const struct tsens_sensor *s, int *temp)
+-{
+- int ret;
+- u32 code, trdy;
+- struct tsens_priv *priv = s->priv;
+- unsigned long timeout;
+-
+- timeout = jiffies + usecs_to_jiffies(TIMEOUT_US);
+- do {
+- ret = regmap_read(priv->tm_map, INT_STATUS_ADDR, &trdy);
+- if (ret)
+- return ret;
+- if (!(trdy & TRDY_MASK))
+- continue;
+- ret = regmap_read(priv->tm_map, s->status, &code);
+- if (ret)
+- return ret;
+- *temp = code_to_mdegC(code, s);
+- return 0;
+- } while (time_before(jiffies, timeout));
+-
+- return -ETIMEDOUT;
+-}
+-
+ static struct tsens_features tsens_8960_feat = {
+ .ver_major = VER_0,
+ .crit_int = 0,
+@@ -315,7 +289,7 @@ static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS] = {
+ static const struct tsens_ops ops_8960 = {
+ .init = init_common,
+ .calibrate = calibrate_8960,
+- .get_temp = get_temp_8960,
++ .get_temp = get_temp_common,
+ .enable = enable_8960,
+ .disable = disable_8960,
+ .suspend = suspend_8960,
+--
+2.30.2
+