1 From b3e8bd33b84a6b6c863bd1733bd15b5f1483b8ab Mon Sep 17 00:00:00 2001
2 From: Ansuel Smith <ansuelsmth@gmail.com>
3 Date: Wed, 25 Nov 2020 17:06:55 +0100
4 Subject: [PATCH 05/10] drivers: thermal: tsens: Fix bug in sensor enable for
7 Device based on tsens VER_0 contains a hardware bug that results in some
8 problem with sensor enablement. Sensor id 6-11 can't be enabled
9 selectively and all of them must be enabled in one step.
11 Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
12 Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
14 drivers/thermal/qcom/tsens-8960.c | 23 ++++++++++++++++++++---
15 1 file changed, 20 insertions(+), 3 deletions(-)
17 diff --git a/drivers/thermal/qcom/tsens-8960.c b/drivers/thermal/qcom/tsens-8960.c
18 index 86585f439985..95fcccafae14 100644
19 --- a/drivers/thermal/qcom/tsens-8960.c
20 +++ b/drivers/thermal/qcom/tsens-8960.c
24 #define SENSOR0_EN BIT(3)
25 +#define MEASURE_PERIOD BIT(18)
26 #define SLP_CLK_ENA BIT(26)
27 #define SLP_CLK_ENA_8660 BIT(24)
28 -#define MEASURE_PERIOD 1
29 #define SENSOR0_SHIFT 3
31 /* INT_STATUS_ADDR bitmasks */
32 @@ -126,17 +126,34 @@ static int resume_8960(struct tsens_priv *priv)
33 static int enable_8960(struct tsens_priv *priv, int id)
37 + u32 reg, mask = BIT(id);
39 ret = regmap_read(priv->tm_map, CNTL_ADDR, ®);
43 - mask = BIT(id + SENSOR0_SHIFT);
45 + * On platforms with more than 6 sensors, all remaining sensors
46 + * must be enabled together, otherwise undefined results are expected.
47 + * (Sensor 6-7 disabled, Sensor 3 disabled...) In the original driver,
48 + * all the sensors are enabled in one step hence this bug is not
52 + mask = GENMASK(10, 6);
54 + mask <<= SENSOR0_SHIFT;
56 + /* Sensors already enabled. Skip. */
57 + if ((reg & mask) == mask)
60 ret = regmap_write(priv->tm_map, CNTL_ADDR, reg | SW_RST);
64 + reg |= MEASURE_PERIOD;
66 if (priv->num_sensors > 1)
67 reg |= mask | SLP_CLK_ENA | EN;