2 * OMAP5 thermal driver.
4 * Copyright (C) 2011-2012 Texas Instruments Inc.
6 * Eduardo Valentin <eduardo.valentin@ti.com>
8 * This software is licensed under the terms of the GNU General Public
9 * License version 2, as published by the Free Software Foundation, and
10 * may be copied, distributed, and modified under those terms.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
19 #include "omap-bandgap.h"
20 #include "omap-thermal.h"
23 * omap5430 has one instance of thermal sensor for MPU
24 * need to describe the individual bit fields
26 static struct temp_sensor_registers
27 omap5430_mpu_temp_sensor_registers = {
28 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_MPU_OFFSET,
29 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
30 .bgap_soc_mask = OMAP5430_BGAP_TEMP_SENSOR_SOC_MASK,
31 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
32 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
34 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
35 .mask_hot_mask = OMAP5430_MASK_HOT_MPU_MASK,
36 .mask_cold_mask = OMAP5430_MASK_COLD_MPU_MASK,
38 .bgap_mode_ctrl = OMAP5430_BGAP_COUNTER_MPU_OFFSET,
39 .mode_ctrl_mask = OMAP5430_REPEAT_MODE_MASK,
41 .bgap_counter = OMAP5430_BGAP_COUNTER_MPU_OFFSET,
42 .counter_mask = OMAP5430_COUNTER_MASK,
44 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_MPU_OFFSET,
45 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
46 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
48 .tshut_threshold = OMAP5430_BGAP_TSHUT_MPU_OFFSET,
49 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
50 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
52 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
53 .status_clean_stop_mask = 0x0,
54 .status_bgap_alert_mask = OMAP5430_BGAP_ALERT_MASK,
55 .status_hot_mask = OMAP5430_HOT_MPU_FLAG_MASK,
56 .status_cold_mask = OMAP5430_COLD_MPU_FLAG_MASK,
58 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_MPU,
62 * omap5430 has one instance of thermal sensor for GPU
63 * need to describe the individual bit fields
65 static struct temp_sensor_registers
66 omap5430_gpu_temp_sensor_registers = {
67 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_GPU_OFFSET,
68 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
69 .bgap_soc_mask = OMAP5430_BGAP_TEMP_SENSOR_SOC_MASK,
70 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
71 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
73 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
74 .mask_hot_mask = OMAP5430_MASK_HOT_MM_MASK,
75 .mask_cold_mask = OMAP5430_MASK_COLD_MM_MASK,
77 .bgap_mode_ctrl = OMAP5430_BGAP_COUNTER_GPU_OFFSET,
78 .mode_ctrl_mask = OMAP5430_REPEAT_MODE_MASK,
80 .bgap_counter = OMAP5430_BGAP_COUNTER_GPU_OFFSET,
81 .counter_mask = OMAP5430_COUNTER_MASK,
83 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_GPU_OFFSET,
84 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
85 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
87 .tshut_threshold = OMAP5430_BGAP_TSHUT_GPU_OFFSET,
88 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
89 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
91 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
92 .status_clean_stop_mask = 0x0,
93 .status_bgap_alert_mask = OMAP5430_BGAP_ALERT_MASK,
94 .status_hot_mask = OMAP5430_HOT_MM_FLAG_MASK,
95 .status_cold_mask = OMAP5430_COLD_MM_FLAG_MASK,
97 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_GPU,
101 * omap5430 has one instance of thermal sensor for CORE
102 * need to describe the individual bit fields
104 static struct temp_sensor_registers
105 omap5430_core_temp_sensor_registers = {
106 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_CORE_OFFSET,
107 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
108 .bgap_soc_mask = OMAP5430_BGAP_TEMP_SENSOR_SOC_MASK,
109 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
110 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
112 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
113 .mask_hot_mask = OMAP5430_MASK_HOT_CORE_MASK,
114 .mask_cold_mask = OMAP5430_MASK_COLD_CORE_MASK,
116 .bgap_mode_ctrl = OMAP5430_BGAP_COUNTER_CORE_OFFSET,
117 .mode_ctrl_mask = OMAP5430_REPEAT_MODE_MASK,
119 .bgap_counter = OMAP5430_BGAP_COUNTER_CORE_OFFSET,
120 .counter_mask = OMAP5430_COUNTER_MASK,
122 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_CORE_OFFSET,
123 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
124 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
126 .tshut_threshold = OMAP5430_BGAP_TSHUT_CORE_OFFSET,
127 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
128 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
130 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
131 .status_clean_stop_mask = 0x0,
132 .status_bgap_alert_mask = OMAP5430_BGAP_ALERT_MASK,
133 .status_hot_mask = OMAP5430_HOT_CORE_FLAG_MASK,
134 .status_cold_mask = OMAP5430_COLD_CORE_FLAG_MASK,
136 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_CORE,
139 /* Thresholds and limits for OMAP5430 MPU temperature sensor */
140 static struct temp_sensor_data omap5430_mpu_temp_sensor_data = {
141 .tshut_hot = OMAP5430_MPU_TSHUT_HOT,
142 .tshut_cold = OMAP5430_MPU_TSHUT_COLD,
143 .t_hot = OMAP5430_MPU_T_HOT,
144 .t_cold = OMAP5430_MPU_T_COLD,
145 .min_freq = OMAP5430_MPU_MIN_FREQ,
146 .max_freq = OMAP5430_MPU_MAX_FREQ,
147 .max_temp = OMAP5430_MPU_MAX_TEMP,
148 .min_temp = OMAP5430_MPU_MIN_TEMP,
149 .hyst_val = OMAP5430_MPU_HYST_VAL,
150 .adc_start_val = OMAP5430_ADC_START_VALUE,
151 .adc_end_val = OMAP5430_ADC_END_VALUE,
156 /* Thresholds and limits for OMAP5430 GPU temperature sensor */
157 static struct temp_sensor_data omap5430_gpu_temp_sensor_data = {
158 .tshut_hot = OMAP5430_GPU_TSHUT_HOT,
159 .tshut_cold = OMAP5430_GPU_TSHUT_COLD,
160 .t_hot = OMAP5430_GPU_T_HOT,
161 .t_cold = OMAP5430_GPU_T_COLD,
162 .min_freq = OMAP5430_GPU_MIN_FREQ,
163 .max_freq = OMAP5430_GPU_MAX_FREQ,
164 .max_temp = OMAP5430_GPU_MAX_TEMP,
165 .min_temp = OMAP5430_GPU_MIN_TEMP,
166 .hyst_val = OMAP5430_GPU_HYST_VAL,
167 .adc_start_val = OMAP5430_ADC_START_VALUE,
168 .adc_end_val = OMAP5430_ADC_END_VALUE,
173 /* Thresholds and limits for OMAP5430 CORE temperature sensor */
174 static struct temp_sensor_data omap5430_core_temp_sensor_data = {
175 .tshut_hot = OMAP5430_CORE_TSHUT_HOT,
176 .tshut_cold = OMAP5430_CORE_TSHUT_COLD,
177 .t_hot = OMAP5430_CORE_T_HOT,
178 .t_cold = OMAP5430_CORE_T_COLD,
179 .min_freq = OMAP5430_CORE_MIN_FREQ,
180 .max_freq = OMAP5430_CORE_MAX_FREQ,
181 .max_temp = OMAP5430_CORE_MAX_TEMP,
182 .min_temp = OMAP5430_CORE_MIN_TEMP,
183 .hyst_val = OMAP5430_CORE_HYST_VAL,
184 .adc_start_val = OMAP5430_ADC_START_VALUE,
185 .adc_end_val = OMAP5430_ADC_END_VALUE,
191 omap5430_adc_to_temp[OMAP5430_ADC_END_VALUE - OMAP5430_ADC_START_VALUE + 1] = {
192 -40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600,
193 -38200, -37800, -37300, -36800,
194 -36400, -36000, -35600, -35200, -34800, -34300, -33800, -33400, -33000,
196 -32200, -31800, -31300, -30800, -30400, -30000, -29600, -29200, -28700,
197 -28200, -27800, -27400, -27000, -26600, -26200, -25700, -25200, -24800,
198 -24400, -24000, -23600, -23200, -22700, -22200, -21800, -21400, -21000,
199 -20600, -20200, -19700, -19200, -9300, -18400, -18000, -17600, -17200,
200 -16700, -16200, -15800, -15400, -15000, -14600, -14200, -13700, -13200,
201 -12800, -12400, -12000, -11600, -11200, -10700, -10200, -9800, -9400,
203 -8600, -8200, -7700, -7200, -6800, -6400, -6000, -5600, -5200, -4800,
205 -3800, -3400, -3000, -2600, -2200, -1800, -1300, -800, -400, 0, 400,
207 1200, 1600, 2100, 2600, 3000, 3400, 3800, 4200, 4600, 5100, 5600, 6000,
208 6400, 6800, 7200, 7600, 8000, 8500, 9000, 9400, 9800, 10200, 10800,
210 11400, 11900, 12400, 12800, 13200, 13600, 14000, 14400, 14800, 15300,
212 16200, 16600, 17000, 17400, 17800, 18200, 18700, 19200, 19600, 20000,
214 20800, 21200, 21600, 22100, 22600, 23000, 23400, 23800, 24200, 24600,
216 25400, 25900, 26400, 26800, 27200, 27600, 28000, 28400, 28800, 29300,
218 30200, 30600, 31000, 31400, 31800, 32200, 32600, 33100, 33600, 34000,
220 34800, 35200, 35600, 36000, 36400, 36800, 37300, 37800, 38200, 38600,
222 39400, 39800, 40200, 40600, 41100, 41600, 42000, 42400, 42800, 43200,
224 44000, 44400, 44800, 45300, 45800, 46200, 46600, 47000, 47400, 47800,
226 48600, 49000, 49500, 50000, 50400, 50800, 51200, 51600, 52000, 52400,
228 53200, 53700, 54200, 54600, 55000, 55400, 55800, 56200, 56600, 57000,
230 57800, 58200, 58700, 59200, 59600, 60000, 60400, 60800, 61200, 61600,
232 62400, 62800, 63300, 63800, 64200, 64600, 65000, 65400, 65800, 66200,
234 67000, 67400, 67800, 68200, 68700, 69200, 69600, 70000, 70400, 70800,
236 71600, 72000, 72400, 72800, 73200, 73600, 74100, 74600, 75000, 75400,
238 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000, 79400, 79800,
240 80800, 81200, 81600, 82000, 82400, 82800, 83200, 83600, 84000, 84400,
242 85200, 85600, 86000, 86400, 86800, 87300, 87800, 88200, 88600, 89000,
244 89800, 90200, 90600, 91000, 91400, 91800, 92200, 92600, 93000, 93400,
246 94200, 94600, 95000, 95500, 96000, 96400, 96800, 97200, 97600, 98000,
248 98800, 99200, 99600, 100000, 100400, 100800, 101200, 101600, 102000,
250 102800, 103200, 103600, 104000, 104400, 104800, 105200, 105600, 106100,
251 106600, 107000, 107400, 107800, 108200, 108600, 109000, 109400, 109800,
252 110200, 110600, 111000, 111400, 111800, 112200, 112600, 113000, 113400,
253 113800, 114200, 114600, 115000, 115400, 115800, 116200, 116600, 117000,
254 117400, 117800, 118200, 118600, 119000, 119400, 119800, 120200, 120600,
255 121000, 121400, 121800, 122200, 122600, 123000, 123400, 123800, 124200,
256 124600, 124900, 125000, 125000, 125000, 125000,
259 const struct omap_bandgap_data omap5430_data = {
260 .features = OMAP_BANDGAP_FEATURE_TSHUT_CONFIG |
261 OMAP_BANDGAP_FEATURE_TALERT |
262 OMAP_BANDGAP_FEATURE_MODE_CONFIG |
263 OMAP_BANDGAP_FEATURE_COUNTER,
264 .fclock_name = "ts_clk_div_ck",
265 .div_ck_name = "ts_clk_div_ck",
266 .conv_table = omap5430_adc_to_temp,
267 .expose_sensor = omap_thermal_expose_sensor,
268 .remove_sensor = omap_thermal_remove_sensor,
271 .registers = &omap5430_mpu_temp_sensor_registers,
272 .ts_data = &omap5430_mpu_temp_sensor_data,
274 .register_cooling = omap_thermal_register_cpu_cooling,
275 .unregister_cooling = omap_thermal_unregister_cpu_cooling,
276 .slope = OMAP_GRADIENT_SLOPE_5430_CPU,
277 .constant = OMAP_GRADIENT_CONST_5430_CPU,
278 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_5430_CPU,
279 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_5430_CPU,
282 .registers = &omap5430_gpu_temp_sensor_registers,
283 .ts_data = &omap5430_gpu_temp_sensor_data,
285 .slope = OMAP_GRADIENT_SLOPE_5430_GPU,
286 .constant = OMAP_GRADIENT_CONST_5430_GPU,
287 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU,
288 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_5430_GPU,
291 .registers = &omap5430_core_temp_sensor_registers,
292 .ts_data = &omap5430_core_temp_sensor_data,