diff mbox series

[v2] thermal: exynos: Reading temperature makes sense only when TMU is turned on

Message ID 20180227135205.16000-1-m.szyprowski@samsung.com
State Superseded
Headers show
Series [v2] thermal: exynos: Reading temperature makes sense only when TMU is turned on | expand

Commit Message

Marek Szyprowski Feb. 27, 2018, 1:52 p.m. UTC
When thermal sensor is not yet enabled, reading temperature might return
random value. This might even result in stopping system booting when such
temperature is higher than the critical value. Fix this by checking if TMU
has been actually enabled before reading the temperature.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

Fixes: 9e4249b40340 ("thermal: exynos: Fix first temperature read after registering sensor")
CC: stable@vger.kernel.org # v4.6+
---
This issue is there since commit 9e4249b40340 ("thermal: exynos: Fix
first temperature read after registering sensor"), but this patch applies
cleanly only to v4.6+ kernels.

This patch fixes booting of Exynos4210-based board with TMU enabled (for
example Samsung Trats board), which was broken since v4.4 kernel release.
---
 drivers/thermal/samsung/exynos_tmu.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

-- 
2.15.0

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Bartlomiej Zolnierkiewicz Feb. 27, 2018, 2:15 p.m. UTC | #1
On Tuesday, February 27, 2018 02:52:05 PM Marek Szyprowski wrote:
> When thermal sensor is not yet enabled, reading temperature might return

> random value. This might even result in stopping system booting when such

> temperature is higher than the critical value. Fix this by checking if TMU

> has been actually enabled before reading the temperature.

> 

> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

> Fixes: 9e4249b40340 ("thermal: exynos: Fix first temperature read after registering sensor")

> CC: stable@vger.kernel.org # v4.6+

> ---

> This issue is there since commit 9e4249b40340 ("thermal: exynos: Fix

> first temperature read after registering sensor"), but this patch applies

> cleanly only to v4.6+ kernels.

> 

> This patch fixes booting of Exynos4210-based board with TMU enabled (for

> example Samsung Trats board), which was broken since v4.4 kernel release.


The above sentence should be a part of the patch description.

Otherwise, it all looks good. Thanks for fixing the issue.

Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>


Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox series

Patch

diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index ed805c7c5ace..986cbd01aaaa 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -185,6 +185,7 @@ 
  * @regulator: pointer to the TMU regulator structure.
  * @reg_conf: pointer to structure to register with core thermal.
  * @ntrip: number of supported trip points.
+ * @enabled: current status of TMU device
  * @tmu_initialize: SoC specific TMU initialization method
  * @tmu_control: SoC specific TMU control method
  * @tmu_read: SoC specific TMU temperature read method
@@ -205,6 +206,7 @@  struct exynos_tmu_data {
 	struct regulator *regulator;
 	struct thermal_zone_device *tzd;
 	unsigned int ntrip;
+	bool enabled;
 
 	int (*tmu_initialize)(struct platform_device *pdev);
 	void (*tmu_control)(struct platform_device *pdev, bool on);
@@ -398,6 +400,7 @@  static void exynos_tmu_control(struct platform_device *pdev, bool on)
 	mutex_lock(&data->lock);
 	clk_enable(data->clk);
 	data->tmu_control(pdev, on);
+	data->enabled = on;
 	clk_disable(data->clk);
 	mutex_unlock(&data->lock);
 }
@@ -890,7 +893,7 @@  static int exynos_get_temp(void *p, int *temp)
 {
 	struct exynos_tmu_data *data = p;
 
-	if (!data || !data->tmu_read)
+	if (!data || !data->tmu_read || !data->enabled)
 		return -EINVAL;
 
 	mutex_lock(&data->lock);