diff options
-rw-r--r-- | drivers/thermal/samsung/exynos_thermal_common.c | 2 | ||||
-rw-r--r-- | drivers/thermal/samsung/exynos_tmu.c | 12 | ||||
-rw-r--r-- | drivers/thermal/samsung/exynos_tmu.h | 7 | ||||
-rw-r--r-- | drivers/thermal/samsung/exynos_tmu_data.c | 30 | ||||
-rw-r--r-- | drivers/thermal/samsung/exynos_tmu_data.h | 13 | ||||
-rw-r--r-- | drivers/thermal/thermal_hwmon.c | 2 | ||||
-rw-r--r-- | drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 1 |
7 files changed, 52 insertions, 15 deletions
diff --git a/drivers/thermal/samsung/exynos_thermal_common.c b/drivers/thermal/samsung/exynos_thermal_common.c index f10a6ad37c06..c2301da08ac7 100644 --- a/drivers/thermal/samsung/exynos_thermal_common.c +++ b/drivers/thermal/samsung/exynos_thermal_common.c | |||
@@ -310,8 +310,6 @@ void exynos_report_trigger(struct thermal_sensor_conf *conf) | |||
310 | } | 310 | } |
311 | 311 | ||
312 | th_zone = conf->pzone_data; | 312 | th_zone = conf->pzone_data; |
313 | if (th_zone->therm_dev) | ||
314 | return; | ||
315 | 313 | ||
316 | if (th_zone->bind == false) { | 314 | if (th_zone->bind == false) { |
317 | for (i = 0; i < th_zone->cool_dev_size; i++) { | 315 | for (i = 0; i < th_zone->cool_dev_size; i++) { |
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index b43afda8acd1..32f38b90c4f6 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c | |||
@@ -317,6 +317,9 @@ static void exynos_tmu_control(struct platform_device *pdev, bool on) | |||
317 | 317 | ||
318 | con = readl(data->base + reg->tmu_ctrl); | 318 | con = readl(data->base + reg->tmu_ctrl); |
319 | 319 | ||
320 | if (pdata->test_mux) | ||
321 | con |= (pdata->test_mux << reg->test_mux_addr_shift); | ||
322 | |||
320 | if (pdata->reference_voltage) { | 323 | if (pdata->reference_voltage) { |
321 | con &= ~(reg->buf_vref_sel_mask << reg->buf_vref_sel_shift); | 324 | con &= ~(reg->buf_vref_sel_mask << reg->buf_vref_sel_shift); |
322 | con |= pdata->reference_voltage << reg->buf_vref_sel_shift; | 325 | con |= pdata->reference_voltage << reg->buf_vref_sel_shift; |
@@ -488,7 +491,7 @@ static const struct of_device_id exynos_tmu_match[] = { | |||
488 | }, | 491 | }, |
489 | { | 492 | { |
490 | .compatible = "samsung,exynos4412-tmu", | 493 | .compatible = "samsung,exynos4412-tmu", |
491 | .data = (void *)EXYNOS5250_TMU_DRV_DATA, | 494 | .data = (void *)EXYNOS4412_TMU_DRV_DATA, |
492 | }, | 495 | }, |
493 | { | 496 | { |
494 | .compatible = "samsung,exynos5250-tmu", | 497 | .compatible = "samsung,exynos5250-tmu", |
@@ -629,9 +632,10 @@ static int exynos_tmu_probe(struct platform_device *pdev) | |||
629 | if (ret) | 632 | if (ret) |
630 | return ret; | 633 | return ret; |
631 | 634 | ||
632 | if (pdata->type == SOC_ARCH_EXYNOS || | 635 | if (pdata->type == SOC_ARCH_EXYNOS4210 || |
633 | pdata->type == SOC_ARCH_EXYNOS4210 || | 636 | pdata->type == SOC_ARCH_EXYNOS4412 || |
634 | pdata->type == SOC_ARCH_EXYNOS5440) | 637 | pdata->type == SOC_ARCH_EXYNOS5250 || |
638 | pdata->type == SOC_ARCH_EXYNOS5440) | ||
635 | data->soc = pdata->type; | 639 | data->soc = pdata->type; |
636 | else { | 640 | else { |
637 | ret = -EINVAL; | 641 | ret = -EINVAL; |
diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h index b364c9eee701..3fb65547e64c 100644 --- a/drivers/thermal/samsung/exynos_tmu.h +++ b/drivers/thermal/samsung/exynos_tmu.h | |||
@@ -41,7 +41,8 @@ enum calibration_mode { | |||
41 | 41 | ||
42 | enum soc_type { | 42 | enum soc_type { |
43 | SOC_ARCH_EXYNOS4210 = 1, | 43 | SOC_ARCH_EXYNOS4210 = 1, |
44 | SOC_ARCH_EXYNOS, | 44 | SOC_ARCH_EXYNOS4412, |
45 | SOC_ARCH_EXYNOS5250, | ||
45 | SOC_ARCH_EXYNOS5440, | 46 | SOC_ARCH_EXYNOS5440, |
46 | }; | 47 | }; |
47 | 48 | ||
@@ -84,6 +85,7 @@ enum soc_type { | |||
84 | * @triminfo_reload_shift: shift of triminfo reload enable bit in triminfo_ctrl | 85 | * @triminfo_reload_shift: shift of triminfo reload enable bit in triminfo_ctrl |
85 | reg. | 86 | reg. |
86 | * @tmu_ctrl: TMU main controller register. | 87 | * @tmu_ctrl: TMU main controller register. |
88 | * @test_mux_addr_shift: shift bits of test mux address. | ||
87 | * @buf_vref_sel_shift: shift bits of reference voltage in tmu_ctrl register. | 89 | * @buf_vref_sel_shift: shift bits of reference voltage in tmu_ctrl register. |
88 | * @buf_vref_sel_mask: mask bits of reference voltage in tmu_ctrl register. | 90 | * @buf_vref_sel_mask: mask bits of reference voltage in tmu_ctrl register. |
89 | * @therm_trip_mode_shift: shift bits of tripping mode in tmu_ctrl register. | 91 | * @therm_trip_mode_shift: shift bits of tripping mode in tmu_ctrl register. |
@@ -150,6 +152,7 @@ struct exynos_tmu_registers { | |||
150 | u32 triminfo_reload_shift; | 152 | u32 triminfo_reload_shift; |
151 | 153 | ||
152 | u32 tmu_ctrl; | 154 | u32 tmu_ctrl; |
155 | u32 test_mux_addr_shift; | ||
153 | u32 buf_vref_sel_shift; | 156 | u32 buf_vref_sel_shift; |
154 | u32 buf_vref_sel_mask; | 157 | u32 buf_vref_sel_mask; |
155 | u32 therm_trip_mode_shift; | 158 | u32 therm_trip_mode_shift; |
@@ -257,6 +260,7 @@ struct exynos_tmu_registers { | |||
257 | * @first_point_trim: temp value of the first point trimming | 260 | * @first_point_trim: temp value of the first point trimming |
258 | * @second_point_trim: temp value of the second point trimming | 261 | * @second_point_trim: temp value of the second point trimming |
259 | * @default_temp_offset: default temperature offset in case of no trimming | 262 | * @default_temp_offset: default temperature offset in case of no trimming |
263 | * @test_mux; information if SoC supports test MUX | ||
260 | * @cal_type: calibration type for temperature | 264 | * @cal_type: calibration type for temperature |
261 | * @cal_mode: calibration mode for temperature | 265 | * @cal_mode: calibration mode for temperature |
262 | * @freq_clip_table: Table representing frequency reduction percentage. | 266 | * @freq_clip_table: Table representing frequency reduction percentage. |
@@ -286,6 +290,7 @@ struct exynos_tmu_platform_data { | |||
286 | u8 first_point_trim; | 290 | u8 first_point_trim; |
287 | u8 second_point_trim; | 291 | u8 second_point_trim; |
288 | u8 default_temp_offset; | 292 | u8 default_temp_offset; |
293 | u8 test_mux; | ||
289 | 294 | ||
290 | enum calibration_type cal_type; | 295 | enum calibration_type cal_type; |
291 | enum calibration_mode cal_mode; | 296 | enum calibration_mode cal_mode; |
diff --git a/drivers/thermal/samsung/exynos_tmu_data.c b/drivers/thermal/samsung/exynos_tmu_data.c index 9002499c1f69..073c292baa53 100644 --- a/drivers/thermal/samsung/exynos_tmu_data.c +++ b/drivers/thermal/samsung/exynos_tmu_data.c | |||
@@ -90,14 +90,15 @@ struct exynos_tmu_init_data const exynos4210_default_tmu_data = { | |||
90 | }; | 90 | }; |
91 | #endif | 91 | #endif |
92 | 92 | ||
93 | #if defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412) | 93 | #if defined(CONFIG_SOC_EXYNOS4412) || defined(CONFIG_SOC_EXYNOS5250) |
94 | static const struct exynos_tmu_registers exynos5250_tmu_registers = { | 94 | static const struct exynos_tmu_registers exynos4412_tmu_registers = { |
95 | .triminfo_data = EXYNOS_TMU_REG_TRIMINFO, | 95 | .triminfo_data = EXYNOS_TMU_REG_TRIMINFO, |
96 | .triminfo_25_shift = EXYNOS_TRIMINFO_25_SHIFT, | 96 | .triminfo_25_shift = EXYNOS_TRIMINFO_25_SHIFT, |
97 | .triminfo_85_shift = EXYNOS_TRIMINFO_85_SHIFT, | 97 | .triminfo_85_shift = EXYNOS_TRIMINFO_85_SHIFT, |
98 | .triminfo_ctrl = EXYNOS_TMU_TRIMINFO_CON, | 98 | .triminfo_ctrl = EXYNOS_TMU_TRIMINFO_CON, |
99 | .triminfo_reload_shift = EXYNOS_TRIMINFO_RELOAD_SHIFT, | 99 | .triminfo_reload_shift = EXYNOS_TRIMINFO_RELOAD_SHIFT, |
100 | .tmu_ctrl = EXYNOS_TMU_REG_CONTROL, | 100 | .tmu_ctrl = EXYNOS_TMU_REG_CONTROL, |
101 | .test_mux_addr_shift = EXYNOS4412_MUX_ADDR_SHIFT, | ||
101 | .buf_vref_sel_shift = EXYNOS_TMU_REF_VOLTAGE_SHIFT, | 102 | .buf_vref_sel_shift = EXYNOS_TMU_REF_VOLTAGE_SHIFT, |
102 | .buf_vref_sel_mask = EXYNOS_TMU_REF_VOLTAGE_MASK, | 103 | .buf_vref_sel_mask = EXYNOS_TMU_REF_VOLTAGE_MASK, |
103 | .therm_trip_mode_shift = EXYNOS_TMU_TRIP_MODE_SHIFT, | 104 | .therm_trip_mode_shift = EXYNOS_TMU_TRIP_MODE_SHIFT, |
@@ -128,7 +129,7 @@ static const struct exynos_tmu_registers exynos5250_tmu_registers = { | |||
128 | .emul_time_mask = EXYNOS_EMUL_TIME_MASK, | 129 | .emul_time_mask = EXYNOS_EMUL_TIME_MASK, |
129 | }; | 130 | }; |
130 | 131 | ||
131 | #define EXYNOS5250_TMU_DATA \ | 132 | #define EXYNOS4412_TMU_DATA \ |
132 | .threshold_falling = 10, \ | 133 | .threshold_falling = 10, \ |
133 | .trigger_levels[0] = 85, \ | 134 | .trigger_levels[0] = 85, \ |
134 | .trigger_levels[1] = 103, \ | 135 | .trigger_levels[1] = 103, \ |
@@ -162,15 +163,32 @@ static const struct exynos_tmu_registers exynos5250_tmu_registers = { | |||
162 | .temp_level = 103, \ | 163 | .temp_level = 103, \ |
163 | }, \ | 164 | }, \ |
164 | .freq_tab_count = 2, \ | 165 | .freq_tab_count = 2, \ |
165 | .type = SOC_ARCH_EXYNOS, \ | 166 | .registers = &exynos4412_tmu_registers, \ |
166 | .registers = &exynos5250_tmu_registers, \ | ||
167 | .features = (TMU_SUPPORT_EMULATION | TMU_SUPPORT_TRIM_RELOAD | \ | 167 | .features = (TMU_SUPPORT_EMULATION | TMU_SUPPORT_TRIM_RELOAD | \ |
168 | TMU_SUPPORT_FALLING_TRIP | TMU_SUPPORT_READY_STATUS | \ | 168 | TMU_SUPPORT_FALLING_TRIP | TMU_SUPPORT_READY_STATUS | \ |
169 | TMU_SUPPORT_EMUL_TIME) | 169 | TMU_SUPPORT_EMUL_TIME) |
170 | #endif | ||
170 | 171 | ||
172 | #if defined(CONFIG_SOC_EXYNOS4412) | ||
173 | struct exynos_tmu_init_data const exynos4412_default_tmu_data = { | ||
174 | .tmu_data = { | ||
175 | { | ||
176 | EXYNOS4412_TMU_DATA, | ||
177 | .type = SOC_ARCH_EXYNOS4412, | ||
178 | .test_mux = EXYNOS4412_MUX_ADDR_VALUE, | ||
179 | }, | ||
180 | }, | ||
181 | .tmu_count = 1, | ||
182 | }; | ||
183 | #endif | ||
184 | |||
185 | #if defined(CONFIG_SOC_EXYNOS5250) | ||
171 | struct exynos_tmu_init_data const exynos5250_default_tmu_data = { | 186 | struct exynos_tmu_init_data const exynos5250_default_tmu_data = { |
172 | .tmu_data = { | 187 | .tmu_data = { |
173 | { EXYNOS5250_TMU_DATA }, | 188 | { |
189 | EXYNOS4412_TMU_DATA, | ||
190 | .type = SOC_ARCH_EXYNOS5250, | ||
191 | }, | ||
174 | }, | 192 | }, |
175 | .tmu_count = 1, | 193 | .tmu_count = 1, |
176 | }; | 194 | }; |
diff --git a/drivers/thermal/samsung/exynos_tmu_data.h b/drivers/thermal/samsung/exynos_tmu_data.h index dc7feb51099b..a1ea19d9e0a6 100644 --- a/drivers/thermal/samsung/exynos_tmu_data.h +++ b/drivers/thermal/samsung/exynos_tmu_data.h | |||
@@ -95,6 +95,10 @@ | |||
95 | 95 | ||
96 | #define EXYNOS_MAX_TRIGGER_PER_REG 4 | 96 | #define EXYNOS_MAX_TRIGGER_PER_REG 4 |
97 | 97 | ||
98 | /* Exynos4412 specific */ | ||
99 | #define EXYNOS4412_MUX_ADDR_VALUE 6 | ||
100 | #define EXYNOS4412_MUX_ADDR_SHIFT 20 | ||
101 | |||
98 | /*exynos5440 specific registers*/ | 102 | /*exynos5440 specific registers*/ |
99 | #define EXYNOS5440_TMU_S0_7_TRIM 0x000 | 103 | #define EXYNOS5440_TMU_S0_7_TRIM 0x000 |
100 | #define EXYNOS5440_TMU_S0_7_CTRL 0x020 | 104 | #define EXYNOS5440_TMU_S0_7_CTRL 0x020 |
@@ -138,7 +142,14 @@ extern struct exynos_tmu_init_data const exynos4210_default_tmu_data; | |||
138 | #define EXYNOS4210_TMU_DRV_DATA (NULL) | 142 | #define EXYNOS4210_TMU_DRV_DATA (NULL) |
139 | #endif | 143 | #endif |
140 | 144 | ||
141 | #if (defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412)) | 145 | #if defined(CONFIG_SOC_EXYNOS4412) |
146 | extern struct exynos_tmu_init_data const exynos4412_default_tmu_data; | ||
147 | #define EXYNOS4412_TMU_DRV_DATA (&exynos4412_default_tmu_data) | ||
148 | #else | ||
149 | #define EXYNOS4412_TMU_DRV_DATA (NULL) | ||
150 | #endif | ||
151 | |||
152 | #if defined(CONFIG_SOC_EXYNOS5250) | ||
142 | extern struct exynos_tmu_init_data const exynos5250_default_tmu_data; | 153 | extern struct exynos_tmu_init_data const exynos5250_default_tmu_data; |
143 | #define EXYNOS5250_TMU_DRV_DATA (&exynos5250_default_tmu_data) | 154 | #define EXYNOS5250_TMU_DRV_DATA (&exynos5250_default_tmu_data) |
144 | #else | 155 | #else |
diff --git a/drivers/thermal/thermal_hwmon.c b/drivers/thermal/thermal_hwmon.c index eeef0e2498ca..fdb07199d9c2 100644 --- a/drivers/thermal/thermal_hwmon.c +++ b/drivers/thermal/thermal_hwmon.c | |||
@@ -159,7 +159,7 @@ int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) | |||
159 | 159 | ||
160 | INIT_LIST_HEAD(&hwmon->tz_list); | 160 | INIT_LIST_HEAD(&hwmon->tz_list); |
161 | strlcpy(hwmon->type, tz->type, THERMAL_NAME_LENGTH); | 161 | strlcpy(hwmon->type, tz->type, THERMAL_NAME_LENGTH); |
162 | hwmon->device = hwmon_device_register(&tz->device); | 162 | hwmon->device = hwmon_device_register(NULL); |
163 | if (IS_ERR(hwmon->device)) { | 163 | if (IS_ERR(hwmon->device)) { |
164 | result = PTR_ERR(hwmon->device); | 164 | result = PTR_ERR(hwmon->device); |
165 | goto free_mem; | 165 | goto free_mem; |
diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c index 4f8b9af54a5a..5a47cc8c8f85 100644 --- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c +++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c | |||
@@ -110,6 +110,7 @@ static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal, | |||
110 | } else { | 110 | } else { |
111 | dev_err(bgp->dev, | 111 | dev_err(bgp->dev, |
112 | "Failed to read PCB state. Using defaults\n"); | 112 | "Failed to read PCB state. Using defaults\n"); |
113 | ret = 0; | ||
113 | } | 114 | } |
114 | } | 115 | } |
115 | *temp = ti_thermal_hotspot_temperature(tmp, slope, constant); | 116 | *temp = ti_thermal_hotspot_temperature(tmp, slope, constant); |