@@ -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);
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(-)