|
@@ -438,6 +438,28 @@ static int exynos_tmu_read(struct exynos_tmu_data *data)
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_THERMAL_EMULATION
|
|
|
+static u32 get_emul_con_reg(struct exynos_tmu_data *data, unsigned int val,
|
|
|
+ unsigned long temp)
|
|
|
+{
|
|
|
+ struct exynos_tmu_platform_data *pdata = data->pdata;
|
|
|
+
|
|
|
+ if (temp) {
|
|
|
+ temp /= MCELSIUS;
|
|
|
+
|
|
|
+ if (TMU_SUPPORTS(pdata, EMUL_TIME)) {
|
|
|
+ val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT);
|
|
|
+ val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT);
|
|
|
+ }
|
|
|
+ val &= ~(EXYNOS_EMUL_DATA_MASK << EXYNOS_EMUL_DATA_SHIFT);
|
|
|
+ val |= (temp_to_code(data, temp) << EXYNOS_EMUL_DATA_SHIFT) |
|
|
|
+ EXYNOS_EMUL_ENABLE;
|
|
|
+ } else {
|
|
|
+ val &= ~EXYNOS_EMUL_ENABLE;
|
|
|
+ }
|
|
|
+
|
|
|
+ return val;
|
|
|
+}
|
|
|
+
|
|
|
static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
|
|
|
{
|
|
|
struct exynos_tmu_data *data = drv_data;
|
|
@@ -456,21 +478,7 @@ static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
|
|
|
clk_enable(data->clk);
|
|
|
|
|
|
val = readl(data->base + reg->emul_con);
|
|
|
-
|
|
|
- if (temp) {
|
|
|
- temp /= MCELSIUS;
|
|
|
-
|
|
|
- if (TMU_SUPPORTS(pdata, EMUL_TIME)) {
|
|
|
- val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT);
|
|
|
- val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT);
|
|
|
- }
|
|
|
- val &= ~(EXYNOS_EMUL_DATA_MASK << EXYNOS_EMUL_DATA_SHIFT);
|
|
|
- val |= (temp_to_code(data, temp) << EXYNOS_EMUL_DATA_SHIFT) |
|
|
|
- EXYNOS_EMUL_ENABLE;
|
|
|
- } else {
|
|
|
- val &= ~EXYNOS_EMUL_ENABLE;
|
|
|
- }
|
|
|
-
|
|
|
+ val = get_emul_con_reg(data, val, temp);
|
|
|
writel(val, data->base + reg->emul_con);
|
|
|
|
|
|
clk_disable(data->clk);
|