1
2
3
4
5
6
7
8
9
10 #include "ti-thermal.h"
11 #include "ti-bandgap.h"
12 #include "omap5xxx-bandgap.h"
13
14
15
16
17
18
19
20
21
22 static struct temp_sensor_registers
23 omap5430_mpu_temp_sensor_registers = {
24 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_MPU_OFFSET,
25 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
26 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
27 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
28
29 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
30 .mask_hot_mask = OMAP5430_MASK_HOT_MPU_MASK,
31 .mask_cold_mask = OMAP5430_MASK_COLD_MPU_MASK,
32 .mask_counter_delay_mask = OMAP5430_MASK_COUNTER_DELAY_MASK,
33 .mask_freeze_mask = OMAP5430_MASK_FREEZE_MPU_MASK,
34
35 .bgap_counter = OMAP5430_BGAP_CTRL_OFFSET,
36 .counter_mask = OMAP5430_COUNTER_MASK,
37
38 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_MPU_OFFSET,
39 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
40 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
41
42 .tshut_threshold = OMAP5430_BGAP_TSHUT_MPU_OFFSET,
43 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
44 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
45
46 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
47 .status_hot_mask = OMAP5430_HOT_MPU_FLAG_MASK,
48 .status_cold_mask = OMAP5430_COLD_MPU_FLAG_MASK,
49
50 .ctrl_dtemp_1 = OMAP5430_BGAP_DTEMP_MPU_1_OFFSET,
51 .ctrl_dtemp_2 = OMAP5430_BGAP_DTEMP_MPU_2_OFFSET,
52 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_MPU,
53 };
54
55
56
57
58 static struct temp_sensor_registers
59 omap5430_gpu_temp_sensor_registers = {
60 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_GPU_OFFSET,
61 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
62 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
63 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
64
65 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
66 .mask_hot_mask = OMAP5430_MASK_HOT_GPU_MASK,
67 .mask_cold_mask = OMAP5430_MASK_COLD_GPU_MASK,
68 .mask_counter_delay_mask = OMAP5430_MASK_COUNTER_DELAY_MASK,
69 .mask_freeze_mask = OMAP5430_MASK_FREEZE_GPU_MASK,
70
71 .bgap_counter = OMAP5430_BGAP_CTRL_OFFSET,
72 .counter_mask = OMAP5430_COUNTER_MASK,
73
74 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_GPU_OFFSET,
75 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
76 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
77
78 .tshut_threshold = OMAP5430_BGAP_TSHUT_GPU_OFFSET,
79 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
80 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
81
82 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
83 .status_hot_mask = OMAP5430_HOT_GPU_FLAG_MASK,
84 .status_cold_mask = OMAP5430_COLD_GPU_FLAG_MASK,
85
86 .ctrl_dtemp_1 = OMAP5430_BGAP_DTEMP_GPU_1_OFFSET,
87 .ctrl_dtemp_2 = OMAP5430_BGAP_DTEMP_GPU_2_OFFSET,
88
89 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_GPU,
90 };
91
92
93
94
95 static struct temp_sensor_registers
96 omap5430_core_temp_sensor_registers = {
97 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_CORE_OFFSET,
98 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
99 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
100 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
101
102 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
103 .mask_hot_mask = OMAP5430_MASK_HOT_CORE_MASK,
104 .mask_cold_mask = OMAP5430_MASK_COLD_CORE_MASK,
105 .mask_counter_delay_mask = OMAP5430_MASK_COUNTER_DELAY_MASK,
106 .mask_freeze_mask = OMAP5430_MASK_FREEZE_CORE_MASK,
107
108 .bgap_counter = OMAP5430_BGAP_CTRL_OFFSET,
109 .counter_mask = OMAP5430_COUNTER_MASK,
110
111 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_CORE_OFFSET,
112 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
113 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
114
115 .tshut_threshold = OMAP5430_BGAP_TSHUT_CORE_OFFSET,
116 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
117 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
118
119 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
120 .status_hot_mask = OMAP5430_HOT_CORE_FLAG_MASK,
121 .status_cold_mask = OMAP5430_COLD_CORE_FLAG_MASK,
122
123 .ctrl_dtemp_1 = OMAP5430_BGAP_DTEMP_CORE_1_OFFSET,
124 .ctrl_dtemp_2 = OMAP5430_BGAP_DTEMP_CORE_2_OFFSET,
125
126 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_CORE,
127 };
128
129
130 static struct temp_sensor_data omap5430_mpu_temp_sensor_data = {
131 .tshut_hot = OMAP5430_MPU_TSHUT_HOT,
132 .tshut_cold = OMAP5430_MPU_TSHUT_COLD,
133 .t_hot = OMAP5430_MPU_T_HOT,
134 .t_cold = OMAP5430_MPU_T_COLD,
135 .min_freq = OMAP5430_MPU_MIN_FREQ,
136 .max_freq = OMAP5430_MPU_MAX_FREQ,
137 };
138
139
140 static struct temp_sensor_data omap5430_gpu_temp_sensor_data = {
141 .tshut_hot = OMAP5430_GPU_TSHUT_HOT,
142 .tshut_cold = OMAP5430_GPU_TSHUT_COLD,
143 .t_hot = OMAP5430_GPU_T_HOT,
144 .t_cold = OMAP5430_GPU_T_COLD,
145 .min_freq = OMAP5430_GPU_MIN_FREQ,
146 .max_freq = OMAP5430_GPU_MAX_FREQ,
147 };
148
149
150 static struct temp_sensor_data omap5430_core_temp_sensor_data = {
151 .tshut_hot = OMAP5430_CORE_TSHUT_HOT,
152 .tshut_cold = OMAP5430_CORE_TSHUT_COLD,
153 .t_hot = OMAP5430_CORE_T_HOT,
154 .t_cold = OMAP5430_CORE_T_COLD,
155 .min_freq = OMAP5430_CORE_MIN_FREQ,
156 .max_freq = OMAP5430_CORE_MAX_FREQ,
157 };
158
159
160
161
162
163 static int
164 omap5430_adc_to_temp[
165 OMAP5430_ADC_END_VALUE - OMAP5430_ADC_START_VALUE + 1] = {
166
167 -40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
168 -37800,
169
170 -37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
171 -33400,
172
173 -33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
174 -29400,
175
176 -29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
177 -25000,
178
179 -24600, -24200, -23800, -23400, -23000, -22600, -22200, -21600, -21400,
180 -21000,
181
182 -20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
183 -16600,
184
185 -16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
186 -12500,
187
188 -11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
189 -8200,
190
191 -7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500, -3900,
192
193 -3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200, 200,
194
195 600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900, 4500,
196
197 5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200, 8600,
198
199 9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200, 12700,
200
201 13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600, 17000,
202
203 17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600, 21100,
204
205 21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000, 25400,
206
207 25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000, 29400,
208
209 29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400, 33800,
210
211 34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400, 37800,
212
213 38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400, 41800,
214
215 42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800, 46200,
216
217 46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800, 50200,
218
219 50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800, 54200,
220
221 54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200, 58600,
222
223 59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200, 62600,
224
225 63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200, 66600,
226
227 67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200, 70600,
228
229 71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600, 75000,
230
231 75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000,
232
233 79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600, 83000,
234
235 83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600, 87000,
236
237 87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600, 91000,
238
239 91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600, 95000,
240
241 95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000, 99400,
242
243 99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
244 103400,
245
246 103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
247 107400,
248
249 107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
250 111400,
251
252 111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
253 115400,
254
255 115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
256 119400,
257
258 119800, 120200, 120600, 121000, 121400, 121800, 122400, 122600, 123000,
259 123400,
260
261 123800, 124200, 124600, 124900, 125000, 125000,
262 };
263
264
265 const struct ti_bandgap_data omap5430_data = {
266 .features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
267 TI_BANDGAP_FEATURE_FREEZE_BIT |
268 TI_BANDGAP_FEATURE_TALERT |
269 TI_BANDGAP_FEATURE_COUNTER_DELAY |
270 TI_BANDGAP_FEATURE_HISTORY_BUFFER,
271 .fclock_name = "l3instr_ts_gclk_div",
272 .div_ck_name = "l3instr_ts_gclk_div",
273 .conv_table = omap5430_adc_to_temp,
274 .adc_start_val = OMAP5430_ADC_START_VALUE,
275 .adc_end_val = OMAP5430_ADC_END_VALUE,
276 .expose_sensor = ti_thermal_expose_sensor,
277 .remove_sensor = ti_thermal_remove_sensor,
278 .report_temperature = ti_thermal_report_sensor_temperature,
279 .sensors = {
280 {
281 .registers = &omap5430_mpu_temp_sensor_registers,
282 .ts_data = &omap5430_mpu_temp_sensor_data,
283 .domain = "cpu",
284 .register_cooling = ti_thermal_register_cpu_cooling,
285 .unregister_cooling = ti_thermal_unregister_cpu_cooling,
286 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_5430_CPU,
287 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_5430_CPU,
288 },
289 {
290 .registers = &omap5430_gpu_temp_sensor_registers,
291 .ts_data = &omap5430_gpu_temp_sensor_data,
292 .domain = "gpu",
293 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU,
294 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_5430_GPU,
295 },
296 {
297 .registers = &omap5430_core_temp_sensor_registers,
298 .ts_data = &omap5430_core_temp_sensor_data,
299 .domain = "core",
300 },
301 },
302 .sensor_count = 3,
303 };