2 * OMAP4 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 "ti-thermal.h"
20 #include "ti-bandgap.h"
21 #include "omap4xxx-bandgap.h"
24 * OMAP4430 has one instance of thermal sensor for MPU
25 * need to describe the individual bit fields
27 static struct temp_sensor_registers
28 omap4430_mpu_temp_sensor_registers = {
29 .temp_sensor_ctrl = OMAP4430_TEMP_SENSOR_CTRL_OFFSET,
30 .bgap_tempsoff_mask = OMAP4430_BGAP_TEMPSOFF_MASK,
31 .bgap_soc_mask = OMAP4430_BGAP_TEMP_SENSOR_SOC_MASK,
32 .bgap_eocz_mask = OMAP4430_BGAP_TEMP_SENSOR_EOCZ_MASK,
33 .bgap_dtemp_mask = OMAP4430_BGAP_TEMP_SENSOR_DTEMP_MASK,
35 .bgap_mode_ctrl = OMAP4430_TEMP_SENSOR_CTRL_OFFSET,
36 .mode_ctrl_mask = OMAP4430_SINGLE_MODE_MASK,
38 .bgap_efuse = OMAP4430_FUSE_OPP_BGAP,
41 /* Thresholds and limits for OMAP4430 MPU temperature sensor */
42 static struct temp_sensor_data omap4430_mpu_temp_sensor_data = {
43 .min_freq = OMAP4430_MIN_FREQ,
44 .max_freq = OMAP4430_MAX_FREQ,
45 .max_temp = OMAP4430_MAX_TEMP,
46 .min_temp = OMAP4430_MIN_TEMP,
47 .hyst_val = OMAP4430_HYST_VAL,
51 * Temperature values in milli degree celsius
52 * ADC code values from 13 to 107, see TRM
53 * "18.4.10.2.3 ADC Codes Versus Temperature".
56 omap4430_adc_to_temp[OMAP4430_ADC_END_VALUE - OMAP4430_ADC_START_VALUE + 1] = {
57 -40000, -38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000,
58 -22000, -20000, -18500, -17000, -15000, -13500, -12000, -10000, -8000,
59 -6500, -5000, -3500, -1500, 0, 2000, 3500, 5000, 6500, 8500, 10000,
60 12000, 13500, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28500,
61 30000, 32000, 33500, 35000, 37000, 38500, 40000, 42000, 43500, 45000,
62 47000, 48500, 50000, 52000, 53500, 55000, 57000, 58500, 60000, 62000,
63 64000, 66000, 68000, 70000, 71500, 73500, 75000, 77000, 78500, 80000,
64 82000, 83500, 85000, 87000, 88500, 90000, 92000, 93500, 95000, 97000,
65 98500, 100000, 102000, 103500, 105000, 107000, 109000, 111000, 113000,
66 115000, 117000, 118500, 120000, 122000, 123500, 125000,
70 const struct ti_bandgap_data omap4430_data = {
71 .features = TI_BANDGAP_FEATURE_MODE_CONFIG |
72 TI_BANDGAP_FEATURE_CLK_CTRL |
73 TI_BANDGAP_FEATURE_POWER_SWITCH,
74 .fclock_name = "bandgap_fclk",
75 .div_ck_name = "bandgap_fclk",
76 .conv_table = omap4430_adc_to_temp,
77 .adc_start_val = OMAP4430_ADC_START_VALUE,
78 .adc_end_val = OMAP4430_ADC_END_VALUE,
79 .expose_sensor = ti_thermal_expose_sensor,
80 .remove_sensor = ti_thermal_remove_sensor,
83 .registers = &omap4430_mpu_temp_sensor_registers,
84 .ts_data = &omap4430_mpu_temp_sensor_data,
86 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_4430,
87 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_4430,
88 .register_cooling = ti_thermal_register_cpu_cooling,
89 .unregister_cooling = ti_thermal_unregister_cpu_cooling,
95 * OMAP4460 has one instance of thermal sensor for MPU
96 * need to describe the individual bit fields
98 static struct temp_sensor_registers
99 omap4460_mpu_temp_sensor_registers = {
100 .temp_sensor_ctrl = OMAP4460_TEMP_SENSOR_CTRL_OFFSET,
101 .bgap_tempsoff_mask = OMAP4460_BGAP_TEMPSOFF_MASK,
102 .bgap_soc_mask = OMAP4460_BGAP_TEMP_SENSOR_SOC_MASK,
103 .bgap_eocz_mask = OMAP4460_BGAP_TEMP_SENSOR_EOCZ_MASK,
104 .bgap_dtemp_mask = OMAP4460_BGAP_TEMP_SENSOR_DTEMP_MASK,
106 .bgap_mask_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
107 .mask_hot_mask = OMAP4460_MASK_HOT_MASK,
108 .mask_cold_mask = OMAP4460_MASK_COLD_MASK,
110 .bgap_mode_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
111 .mode_ctrl_mask = OMAP4460_SINGLE_MODE_MASK,
113 .bgap_counter = OMAP4460_BGAP_COUNTER_OFFSET,
114 .counter_mask = OMAP4460_COUNTER_MASK,
116 .bgap_threshold = OMAP4460_BGAP_THRESHOLD_OFFSET,
117 .threshold_thot_mask = OMAP4460_T_HOT_MASK,
118 .threshold_tcold_mask = OMAP4460_T_COLD_MASK,
120 .tshut_threshold = OMAP4460_BGAP_TSHUT_OFFSET,
121 .tshut_hot_mask = OMAP4460_TSHUT_HOT_MASK,
122 .tshut_cold_mask = OMAP4460_TSHUT_COLD_MASK,
124 .bgap_status = OMAP4460_BGAP_STATUS_OFFSET,
125 .status_clean_stop_mask = OMAP4460_CLEAN_STOP_MASK,
126 .status_bgap_alert_mask = OMAP4460_BGAP_ALERT_MASK,
127 .status_hot_mask = OMAP4460_HOT_FLAG_MASK,
128 .status_cold_mask = OMAP4460_COLD_FLAG_MASK,
130 .bgap_efuse = OMAP4460_FUSE_OPP_BGAP,
133 /* Thresholds and limits for OMAP4460 MPU temperature sensor */
134 static struct temp_sensor_data omap4460_mpu_temp_sensor_data = {
135 .tshut_hot = OMAP4460_TSHUT_HOT,
136 .tshut_cold = OMAP4460_TSHUT_COLD,
137 .t_hot = OMAP4460_T_HOT,
138 .t_cold = OMAP4460_T_COLD,
139 .min_freq = OMAP4460_MIN_FREQ,
140 .max_freq = OMAP4460_MAX_FREQ,
141 .max_temp = OMAP4460_MAX_TEMP,
142 .min_temp = OMAP4460_MIN_TEMP,
143 .hyst_val = OMAP4460_HYST_VAL,
149 * Temperature values in milli degree celsius
150 * ADC code values from 530 to 923
153 omap4460_adc_to_temp[OMAP4460_ADC_END_VALUE - OMAP4460_ADC_START_VALUE + 1] = {
154 -40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
155 -37800, -37300, -36800, -36400, -36000, -35600, -35200, -34800,
156 -34300, -33800, -33400, -33000, -32600, -32200, -31800, -31300,
157 -30800, -30400, -30000, -29600, -29200, -28700, -28200, -27800,
158 -27400, -27000, -26600, -26200, -25700, -25200, -24800, -24400,
159 -24000, -23600, -23200, -22700, -22200, -21800, -21400, -21000,
160 -20600, -20200, -19700, -19200, -18800, -18400, -18000, -17600,
161 -17200, -16700, -16200, -15800, -15400, -15000, -14600, -14200,
162 -13700, -13200, -12800, -12400, -12000, -11600, -11200, -10700,
163 -10200, -9800, -9400, -9000, -8600, -8200, -7700, -7200, -6800,
164 -6400, -6000, -5600, -5200, -4800, -4300, -3800, -3400, -3000,
165 -2600, -2200, -1800, -1300, -800, -400, 0, 400, 800, 1200, 1600,
166 2100, 2600, 3000, 3400, 3800, 4200, 4600, 5100, 5600, 6000, 6400,
167 6800, 7200, 7600, 8000, 8500, 9000, 9400, 9800, 10200, 10600, 11000,
168 11400, 11900, 12400, 12800, 13200, 13600, 14000, 14400, 14800,
169 15300, 15800, 16200, 16600, 17000, 17400, 17800, 18200, 18700,
170 19200, 19600, 20000, 20400, 20800, 21200, 21600, 22100, 22600,
171 23000, 23400, 23800, 24200, 24600, 25000, 25400, 25900, 26400,
172 26800, 27200, 27600, 28000, 28400, 28800, 29300, 29800, 30200,
173 30600, 31000, 31400, 31800, 32200, 32600, 33100, 33600, 34000,
174 34400, 34800, 35200, 35600, 36000, 36400, 36800, 37300, 37800,
175 38200, 38600, 39000, 39400, 39800, 40200, 40600, 41100, 41600,
176 42000, 42400, 42800, 43200, 43600, 44000, 44400, 44800, 45300,
177 45800, 46200, 46600, 47000, 47400, 47800, 48200, 48600, 49000,
178 49500, 50000, 50400, 50800, 51200, 51600, 52000, 52400, 52800,
179 53200, 53700, 54200, 54600, 55000, 55400, 55800, 56200, 56600,
180 57000, 57400, 57800, 58200, 58700, 59200, 59600, 60000, 60400,
181 60800, 61200, 61600, 62000, 62400, 62800, 63300, 63800, 64200,
182 64600, 65000, 65400, 65800, 66200, 66600, 67000, 67400, 67800,
183 68200, 68700, 69200, 69600, 70000, 70400, 70800, 71200, 71600,
184 72000, 72400, 72800, 73200, 73600, 74100, 74600, 75000, 75400,
185 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000,
186 79400, 79800, 80300, 80800, 81200, 81600, 82000, 82400, 82800,
187 83200, 83600, 84000, 84400, 84800, 85200, 85600, 86000, 86400,
188 86800, 87300, 87800, 88200, 88600, 89000, 89400, 89800, 90200,
189 90600, 91000, 91400, 91800, 92200, 92600, 93000, 93400, 93800,
190 94200, 94600, 95000, 95500, 96000, 96400, 96800, 97200, 97600,
191 98000, 98400, 98800, 99200, 99600, 100000, 100400, 100800, 101200,
192 101600, 102000, 102400, 102800, 103200, 103600, 104000, 104400,
193 104800, 105200, 105600, 106100, 106600, 107000, 107400, 107800,
194 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
195 111400, 111800, 112200, 112600, 113000, 113400, 113800, 114200,
196 114600, 115000, 115400, 115800, 116200, 116600, 117000, 117400,
197 117800, 118200, 118600, 119000, 119400, 119800, 120200, 120600,
198 121000, 121400, 121800, 122200, 122600, 123000, 123400, 123800, 124200,
199 124600, 124900, 125000, 125000, 125000, 125000
203 const struct ti_bandgap_data omap4460_data = {
204 .features = TI_BANDGAP_FEATURE_TSHUT |
205 TI_BANDGAP_FEATURE_TSHUT_CONFIG |
206 TI_BANDGAP_FEATURE_TALERT |
207 TI_BANDGAP_FEATURE_MODE_CONFIG |
208 TI_BANDGAP_FEATURE_POWER_SWITCH |
209 TI_BANDGAP_FEATURE_CLK_CTRL |
210 TI_BANDGAP_FEATURE_COUNTER,
211 .fclock_name = "bandgap_ts_fclk",
212 .div_ck_name = "div_ts_ck",
213 .conv_table = omap4460_adc_to_temp,
214 .adc_start_val = OMAP4460_ADC_START_VALUE,
215 .adc_end_val = OMAP4460_ADC_END_VALUE,
216 .expose_sensor = ti_thermal_expose_sensor,
217 .remove_sensor = ti_thermal_remove_sensor,
218 .report_temperature = ti_thermal_report_sensor_temperature,
221 .registers = &omap4460_mpu_temp_sensor_registers,
222 .ts_data = &omap4460_mpu_temp_sensor_data,
224 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_4460,
225 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_4460,
226 .register_cooling = ti_thermal_register_cpu_cooling,
227 .unregister_cooling = ti_thermal_unregister_cpu_cooling,
234 const struct ti_bandgap_data omap4470_data = {
235 .features = TI_BANDGAP_FEATURE_TSHUT |
236 TI_BANDGAP_FEATURE_TSHUT_CONFIG |
237 TI_BANDGAP_FEATURE_TALERT |
238 TI_BANDGAP_FEATURE_MODE_CONFIG |
239 TI_BANDGAP_FEATURE_POWER_SWITCH |
240 TI_BANDGAP_FEATURE_CLK_CTRL |
241 TI_BANDGAP_FEATURE_COUNTER,
242 .fclock_name = "bandgap_ts_fclk",
243 .div_ck_name = "div_ts_ck",
244 .conv_table = omap4460_adc_to_temp,
245 .adc_start_val = OMAP4460_ADC_START_VALUE,
246 .adc_end_val = OMAP4460_ADC_END_VALUE,
247 .expose_sensor = ti_thermal_expose_sensor,
248 .remove_sensor = ti_thermal_remove_sensor,
249 .report_temperature = ti_thermal_report_sensor_temperature,
252 .registers = &omap4460_mpu_temp_sensor_registers,
253 .ts_data = &omap4460_mpu_temp_sensor_data,
255 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_4470,
256 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_4470,
257 .register_cooling = ti_thermal_register_cpu_cooling,
258 .unregister_cooling = ti_thermal_unregister_cpu_cooling,