diff options
Diffstat (limited to 'drivers/thermal/samsung/exynos_tmu.c')
-rw-r--r-- | drivers/thermal/samsung/exynos_tmu.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index fa33a485ee5b..401ec980c592 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c | |||
@@ -49,7 +49,6 @@ | |||
49 | #define EXYNOS_TMU_BUF_SLOPE_SEL_MASK 0xf | 49 | #define EXYNOS_TMU_BUF_SLOPE_SEL_MASK 0xf |
50 | #define EXYNOS_TMU_BUF_SLOPE_SEL_SHIFT 8 | 50 | #define EXYNOS_TMU_BUF_SLOPE_SEL_SHIFT 8 |
51 | #define EXYNOS_TMU_CORE_EN_SHIFT 0 | 51 | #define EXYNOS_TMU_CORE_EN_SHIFT 0 |
52 | #define EXYNOS_TMU_DEF_CODE_TO_TEMP_OFFSET 50 | ||
53 | 52 | ||
54 | /* Exynos4210 specific registers */ | 53 | /* Exynos4210 specific registers */ |
55 | #define EXYNOS4210_TMU_REG_THRESHOLD_TEMP 0x44 | 54 | #define EXYNOS4210_TMU_REG_THRESHOLD_TEMP 0x44 |
@@ -94,9 +93,6 @@ | |||
94 | #define EXYNOS_TMU_INTEN_FALL1_SHIFT 20 | 93 | #define EXYNOS_TMU_INTEN_FALL1_SHIFT 20 |
95 | #define EXYNOS_TMU_INTEN_FALL2_SHIFT 24 | 94 | #define EXYNOS_TMU_INTEN_FALL2_SHIFT 24 |
96 | 95 | ||
97 | #define EFUSE_MIN_VALUE 40 | ||
98 | #define EFUSE_MAX_VALUE 100 | ||
99 | |||
100 | #ifdef CONFIG_THERMAL_EMULATION | 96 | #ifdef CONFIG_THERMAL_EMULATION |
101 | #define EXYNOS_EMUL_TIME 0x57F0 | 97 | #define EXYNOS_EMUL_TIME 0x57F0 |
102 | #define EXYNOS_EMUL_TIME_MASK 0xffff | 98 | #define EXYNOS_EMUL_TIME_MASK 0xffff |
@@ -136,15 +132,16 @@ static int temp_to_code(struct exynos_tmu_data *data, u8 temp) | |||
136 | 132 | ||
137 | switch (pdata->cal_type) { | 133 | switch (pdata->cal_type) { |
138 | case TYPE_TWO_POINT_TRIMMING: | 134 | case TYPE_TWO_POINT_TRIMMING: |
139 | temp_code = (temp - 25) * | 135 | temp_code = (temp - pdata->first_point_trim) * |
140 | (data->temp_error2 - data->temp_error1) / | 136 | (data->temp_error2 - data->temp_error1) / |
141 | (85 - 25) + data->temp_error1; | 137 | (pdata->second_point_trim - pdata->first_point_trim) + |
138 | data->temp_error1; | ||
142 | break; | 139 | break; |
143 | case TYPE_ONE_POINT_TRIMMING: | 140 | case TYPE_ONE_POINT_TRIMMING: |
144 | temp_code = temp + data->temp_error1 - 25; | 141 | temp_code = temp + data->temp_error1 - pdata->first_point_trim; |
145 | break; | 142 | break; |
146 | default: | 143 | default: |
147 | temp_code = temp + EXYNOS_TMU_DEF_CODE_TO_TEMP_OFFSET; | 144 | temp_code = temp + pdata->default_temp_offset; |
148 | break; | 145 | break; |
149 | } | 146 | } |
150 | out: | 147 | out: |
@@ -169,14 +166,16 @@ static int code_to_temp(struct exynos_tmu_data *data, u8 temp_code) | |||
169 | 166 | ||
170 | switch (pdata->cal_type) { | 167 | switch (pdata->cal_type) { |
171 | case TYPE_TWO_POINT_TRIMMING: | 168 | case TYPE_TWO_POINT_TRIMMING: |
172 | temp = (temp_code - data->temp_error1) * (85 - 25) / | 169 | temp = (temp_code - data->temp_error1) * |
173 | (data->temp_error2 - data->temp_error1) + 25; | 170 | (pdata->second_point_trim - pdata->first_point_trim) / |
171 | (data->temp_error2 - data->temp_error1) + | ||
172 | pdata->first_point_trim; | ||
174 | break; | 173 | break; |
175 | case TYPE_ONE_POINT_TRIMMING: | 174 | case TYPE_ONE_POINT_TRIMMING: |
176 | temp = temp_code - data->temp_error1 + 25; | 175 | temp = temp_code - data->temp_error1 + pdata->first_point_trim; |
177 | break; | 176 | break; |
178 | default: | 177 | default: |
179 | temp = temp_code - EXYNOS_TMU_DEF_CODE_TO_TEMP_OFFSET; | 178 | temp = temp_code - pdata->default_temp_offset; |
180 | break; | 179 | break; |
181 | } | 180 | } |
182 | out: | 181 | out: |
@@ -209,8 +208,8 @@ static int exynos_tmu_initialize(struct platform_device *pdev) | |||
209 | data->temp_error1 = trim_info & EXYNOS_TMU_TRIM_TEMP_MASK; | 208 | data->temp_error1 = trim_info & EXYNOS_TMU_TRIM_TEMP_MASK; |
210 | data->temp_error2 = ((trim_info >> 8) & EXYNOS_TMU_TRIM_TEMP_MASK); | 209 | data->temp_error2 = ((trim_info >> 8) & EXYNOS_TMU_TRIM_TEMP_MASK); |
211 | 210 | ||
212 | if ((EFUSE_MIN_VALUE > data->temp_error1) || | 211 | if ((pdata->min_efuse_value > data->temp_error1) || |
213 | (data->temp_error1 > EFUSE_MAX_VALUE) || | 212 | (data->temp_error1 > pdata->max_efuse_value) || |
214 | (data->temp_error2 != 0)) | 213 | (data->temp_error2 != 0)) |
215 | data->temp_error1 = pdata->efuse_value; | 214 | data->temp_error1 = pdata->efuse_value; |
216 | 215 | ||
@@ -300,10 +299,10 @@ static void exynos_tmu_control(struct platform_device *pdev, bool on) | |||
300 | if (on) { | 299 | if (on) { |
301 | con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); | 300 | con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); |
302 | interrupt_en = | 301 | interrupt_en = |
303 | pdata->trigger_level3_en << EXYNOS_TMU_INTEN_RISE3_SHIFT | | 302 | pdata->trigger_enable[3] << EXYNOS_TMU_INTEN_RISE3_SHIFT | |
304 | pdata->trigger_level2_en << EXYNOS_TMU_INTEN_RISE2_SHIFT | | 303 | pdata->trigger_enable[2] << EXYNOS_TMU_INTEN_RISE2_SHIFT | |
305 | pdata->trigger_level1_en << EXYNOS_TMU_INTEN_RISE1_SHIFT | | 304 | pdata->trigger_enable[1] << EXYNOS_TMU_INTEN_RISE1_SHIFT | |
306 | pdata->trigger_level0_en << EXYNOS_TMU_INTEN_RISE0_SHIFT; | 305 | pdata->trigger_enable[0] << EXYNOS_TMU_INTEN_RISE0_SHIFT; |
307 | if (pdata->threshold_falling) | 306 | if (pdata->threshold_falling) |
308 | interrupt_en |= | 307 | interrupt_en |= |
309 | interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT; | 308 | interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT; |
@@ -533,9 +532,9 @@ static int exynos_tmu_probe(struct platform_device *pdev) | |||
533 | 532 | ||
534 | /* Register the sensor with thermal management interface */ | 533 | /* Register the sensor with thermal management interface */ |
535 | (&exynos_sensor_conf)->private_data = data; | 534 | (&exynos_sensor_conf)->private_data = data; |
536 | exynos_sensor_conf.trip_data.trip_count = pdata->trigger_level0_en + | 535 | exynos_sensor_conf.trip_data.trip_count = pdata->trigger_enable[0] + |
537 | pdata->trigger_level1_en + pdata->trigger_level2_en + | 536 | pdata->trigger_enable[1] + pdata->trigger_enable[2]+ |
538 | pdata->trigger_level3_en; | 537 | pdata->trigger_enable[3]; |
539 | 538 | ||
540 | for (i = 0; i < exynos_sensor_conf.trip_data.trip_count; i++) | 539 | for (i = 0; i < exynos_sensor_conf.trip_data.trip_count; i++) |
541 | exynos_sensor_conf.trip_data.trip_val[i] = | 540 | exynos_sensor_conf.trip_data.trip_val[i] = |