aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches-5.10/104-5-drivers-thermal-tsens-Fix-bug-in-sensor-enable-for-m.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ipq806x/patches-5.10/104-5-drivers-thermal-tsens-Fix-bug-in-sensor-enable-for-m.patch')
-rw-r--r--target/linux/ipq806x/patches-5.10/104-5-drivers-thermal-tsens-Fix-bug-in-sensor-enable-for-m.patch71
1 files changed, 71 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-5.10/104-5-drivers-thermal-tsens-Fix-bug-in-sensor-enable-for-m.patch b/target/linux/ipq806x/patches-5.10/104-5-drivers-thermal-tsens-Fix-bug-in-sensor-enable-for-m.patch
new file mode 100644
index 0000000000..4f8a6769a0
--- /dev/null
+++ b/target/linux/ipq806x/patches-5.10/104-5-drivers-thermal-tsens-Fix-bug-in-sensor-enable-for-m.patch
@@ -0,0 +1,71 @@
+From b3e8bd33b84a6b6c863bd1733bd15b5f1483b8ab Mon Sep 17 00:00:00 2001
+From: Ansuel Smith <ansuelsmth@gmail.com>
+Date: Wed, 25 Nov 2020 17:06:55 +0100
+Subject: [PATCH 05/10] drivers: thermal: tsens: Fix bug in sensor enable for
+ msm8960
+
+Device based on tsens VER_0 contains a hardware bug that results in some
+problem with sensor enablement. Sensor id 6-11 can't be enabled
+selectively and all of them must be enabled in one step.
+
+Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
+Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
+---
+ drivers/thermal/qcom/tsens-8960.c | 23 ++++++++++++++++++++---
+ 1 file changed, 20 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/thermal/qcom/tsens-8960.c b/drivers/thermal/qcom/tsens-8960.c
+index 86585f439985..95fcccafae14 100644
+--- a/drivers/thermal/qcom/tsens-8960.c
++++ b/drivers/thermal/qcom/tsens-8960.c
+@@ -27,9 +27,9 @@
+ #define EN BIT(0)
+ #define SW_RST BIT(1)
+ #define SENSOR0_EN BIT(3)
++#define MEASURE_PERIOD BIT(18)
+ #define SLP_CLK_ENA BIT(26)
+ #define SLP_CLK_ENA_8660 BIT(24)
+-#define MEASURE_PERIOD 1
+ #define SENSOR0_SHIFT 3
+
+ /* INT_STATUS_ADDR bitmasks */
+@@ -126,17 +126,34 @@ static int resume_8960(struct tsens_priv *priv)
+ static int enable_8960(struct tsens_priv *priv, int id)
+ {
+ int ret;
+- u32 reg, mask;
++ u32 reg, mask = BIT(id);
+
+ ret = regmap_read(priv->tm_map, CNTL_ADDR, &reg);
+ if (ret)
+ return ret;
+
+- mask = BIT(id + SENSOR0_SHIFT);
++ /* HARDWARE BUG:
++ * On platforms with more than 6 sensors, all remaining sensors
++ * must be enabled together, otherwise undefined results are expected.
++ * (Sensor 6-7 disabled, Sensor 3 disabled...) In the original driver,
++ * all the sensors are enabled in one step hence this bug is not
++ * triggered.
++ */
++ if (id > 5)
++ mask = GENMASK(10, 6);
++
++ mask <<= SENSOR0_SHIFT;
++
++ /* Sensors already enabled. Skip. */
++ if ((reg & mask) == mask)
++ return 0;
++
+ ret = regmap_write(priv->tm_map, CNTL_ADDR, reg | SW_RST);
+ if (ret)
+ return ret;
+
++ reg |= MEASURE_PERIOD;
++
+ if (priv->num_sensors > 1)
+ reg |= mask | SLP_CLK_ENA | EN;
+ else
+--
+2.30.2
+