[PATCH 8/8] thermal: mediatek: use spinlock to protect PTPCORESEL

michael.kao
2019-05-02T10:43:15Z

The driver of thermal and svs will use the
same register for the project which should select
bank before reading sensor value.

Signed-off-by: Michael.Kao <michael.kao@mediatek.com>
---
drivers/thermal/mtk_thermal.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index d5c78b0..6d7e839 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -30,6 +30,7 @@
#include <linux/thermal.h>
#include <linux/reset.h>
#include <linux/types.h>
+#include <linux/power/mtk_svs.h>

/* AUXADC Registers */
#define AUXADC_CON1_SET_V 0x008
@@ -267,7 +268,7 @@ struct mtk_thermal {
struct clk *clk_peri_therm;
struct clk *clk_auxadc;
/* lock: for getting and putting banks */
- struct mutex lock;
+ unsigned long flags;

/* Calibration values */
s32 adc_ge;
@@ -566,7 +567,7 @@ static void mtk_thermal_get_bank(struct mtk_thermal_bank *bank)
u32 val;

if (mt->conf->need_switch_bank) {
- mutex_lock(&mt->lock);
+ mt->flags = claim_mtk_svs_lock();

val = readl(mt->thermal_base + PTPCORESEL);
val &= ~0xf;
@@ -586,7 +587,7 @@ static void mtk_thermal_put_bank(struct mtk_thermal_bank *bank)
struct mtk_thermal *mt = bank->mt;

if (mt->conf->need_switch_bank)
- mutex_unlock(&mt->lock);
+ release_mtk_svs_lock(mt->flags);
}

/**
@@ -941,8 +942,6 @@ static int mtk_thermal_probe(struct platform_device *pdev)
if (ret)
return ret;

- mutex_init(&mt->lock);
-
mt->dev = &pdev->dev;

auxadc = of_parse_phandle(np, "mediatek,auxadc", 0);
--
1.9.1