1 // SPDX-License-Identifier: GPL-2.0-only
3 * OMAP4 thermal driver.
5 * Copyright (C) 2011-2012 Texas Instruments Inc.
7 * Eduardo Valentin <eduardo.valentin@ti.com>
10 #include "ti-thermal.h"
11 #include "ti-bandgap.h"
12 #include "omap4xxx-bandgap.h"
15 * OMAP4430 has one instance of thermal sensor for MPU
16 * need to describe the individual bit fields
18 static struct temp_sensor_registers
19 omap4430_mpu_temp_sensor_registers
= {
20 .temp_sensor_ctrl
= OMAP4430_TEMP_SENSOR_CTRL_OFFSET
,
21 .bgap_tempsoff_mask
= OMAP4430_BGAP_TEMPSOFF_MASK
,
22 .bgap_soc_mask
= OMAP4430_BGAP_TEMP_SENSOR_SOC_MASK
,
23 .bgap_eocz_mask
= OMAP4430_BGAP_TEMP_SENSOR_EOCZ_MASK
,
24 .bgap_dtemp_mask
= OMAP4430_BGAP_TEMP_SENSOR_DTEMP_MASK
,
26 .bgap_mode_ctrl
= OMAP4430_TEMP_SENSOR_CTRL_OFFSET
,
27 .mode_ctrl_mask
= OMAP4430_SINGLE_MODE_MASK
,
29 .bgap_efuse
= OMAP4430_FUSE_OPP_BGAP
,
32 /* Thresholds and limits for OMAP4430 MPU temperature sensor */
33 static struct temp_sensor_data omap4430_mpu_temp_sensor_data
= {
34 .min_freq
= OMAP4430_MIN_FREQ
,
35 .max_freq
= OMAP4430_MAX_FREQ
,
39 * Temperature values in milli degree celsius
40 * ADC code values from 530 to 923
43 omap4430_adc_to_temp
[OMAP4430_ADC_END_VALUE
- OMAP4430_ADC_START_VALUE
+ 1] = {
44 -38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000, -22000,
45 -20000, -18000, -17000, -15000, -13000, -12000, -10000, -8000, -6000,
46 -5000, -3000, -1000, 0, 2000, 3000, 5000, 6000, 8000, 10000, 12000,
47 13000, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28000, 30000,
48 32000, 33000, 35000, 37000, 38000, 40000, 42000, 43000, 45000, 47000,
49 48000, 50000, 52000, 53000, 55000, 57000, 58000, 60000, 62000, 64000,
50 66000, 68000, 70000, 71000, 73000, 75000, 77000, 78000, 80000, 82000,
51 83000, 85000, 87000, 88000, 90000, 92000, 93000, 95000, 97000, 98000,
52 100000, 102000, 103000, 105000, 107000, 109000, 111000, 113000, 115000,
53 117000, 118000, 120000, 122000, 123000,
57 const struct ti_bandgap_data omap4430_data
= {
58 .features
= TI_BANDGAP_FEATURE_MODE_CONFIG
|
59 TI_BANDGAP_FEATURE_CLK_CTRL
|
60 TI_BANDGAP_FEATURE_POWER_SWITCH
,
61 .fclock_name
= "bandgap_fclk",
62 .div_ck_name
= "bandgap_fclk",
63 .conv_table
= omap4430_adc_to_temp
,
64 .adc_start_val
= OMAP4430_ADC_START_VALUE
,
65 .adc_end_val
= OMAP4430_ADC_END_VALUE
,
66 .expose_sensor
= ti_thermal_expose_sensor
,
67 .remove_sensor
= ti_thermal_remove_sensor
,
70 .registers
= &omap4430_mpu_temp_sensor_registers
,
71 .ts_data
= &omap4430_mpu_temp_sensor_data
,
73 .slope_pcb
= OMAP_GRADIENT_SLOPE_W_PCB_4430
,
74 .constant_pcb
= OMAP_GRADIENT_CONST_W_PCB_4430
,
75 .register_cooling
= ti_thermal_register_cpu_cooling
,
76 .unregister_cooling
= ti_thermal_unregister_cpu_cooling
,
82 * OMAP4460 has one instance of thermal sensor for MPU
83 * need to describe the individual bit fields
85 static struct temp_sensor_registers
86 omap4460_mpu_temp_sensor_registers
= {
87 .temp_sensor_ctrl
= OMAP4460_TEMP_SENSOR_CTRL_OFFSET
,
88 .bgap_tempsoff_mask
= OMAP4460_BGAP_TEMPSOFF_MASK
,
89 .bgap_soc_mask
= OMAP4460_BGAP_TEMP_SENSOR_SOC_MASK
,
90 .bgap_eocz_mask
= OMAP4460_BGAP_TEMP_SENSOR_EOCZ_MASK
,
91 .bgap_dtemp_mask
= OMAP4460_BGAP_TEMP_SENSOR_DTEMP_MASK
,
93 .bgap_mask_ctrl
= OMAP4460_BGAP_CTRL_OFFSET
,
94 .mask_hot_mask
= OMAP4460_MASK_HOT_MASK
,
95 .mask_cold_mask
= OMAP4460_MASK_COLD_MASK
,
97 .bgap_mode_ctrl
= OMAP4460_BGAP_CTRL_OFFSET
,
98 .mode_ctrl_mask
= OMAP4460_SINGLE_MODE_MASK
,
100 .bgap_counter
= OMAP4460_BGAP_COUNTER_OFFSET
,
101 .counter_mask
= OMAP4460_COUNTER_MASK
,
103 .bgap_threshold
= OMAP4460_BGAP_THRESHOLD_OFFSET
,
104 .threshold_thot_mask
= OMAP4460_T_HOT_MASK
,
105 .threshold_tcold_mask
= OMAP4460_T_COLD_MASK
,
107 .tshut_threshold
= OMAP4460_BGAP_TSHUT_OFFSET
,
108 .tshut_hot_mask
= OMAP4460_TSHUT_HOT_MASK
,
109 .tshut_cold_mask
= OMAP4460_TSHUT_COLD_MASK
,
111 .bgap_status
= OMAP4460_BGAP_STATUS_OFFSET
,
112 .status_hot_mask
= OMAP4460_HOT_FLAG_MASK
,
113 .status_cold_mask
= OMAP4460_COLD_FLAG_MASK
,
115 .bgap_efuse
= OMAP4460_FUSE_OPP_BGAP
,
118 /* Thresholds and limits for OMAP4460 MPU temperature sensor */
119 static struct temp_sensor_data omap4460_mpu_temp_sensor_data
= {
120 .tshut_hot
= OMAP4460_TSHUT_HOT
,
121 .tshut_cold
= OMAP4460_TSHUT_COLD
,
122 .t_hot
= OMAP4460_T_HOT
,
123 .t_cold
= OMAP4460_T_COLD
,
124 .min_freq
= OMAP4460_MIN_FREQ
,
125 .max_freq
= OMAP4460_MAX_FREQ
,
129 * Temperature values in milli degree celsius
130 * ADC code values from 530 to 923
133 omap4460_adc_to_temp
[OMAP4460_ADC_END_VALUE
- OMAP4460_ADC_START_VALUE
+ 1] = {
134 -40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
135 -37800, -37300, -36800, -36400, -36000, -35600, -35200, -34800,
136 -34300, -33800, -33400, -33000, -32600, -32200, -31800, -31300,
137 -30800, -30400, -30000, -29600, -29200, -28700, -28200, -27800,
138 -27400, -27000, -26600, -26200, -25700, -25200, -24800, -24400,
139 -24000, -23600, -23200, -22700, -22200, -21800, -21400, -21000,
140 -20600, -20200, -19700, -19200, -18800, -18400, -18000, -17600,
141 -17200, -16700, -16200, -15800, -15400, -15000, -14600, -14200,
142 -13700, -13200, -12800, -12400, -12000, -11600, -11200, -10700,
143 -10200, -9800, -9400, -9000, -8600, -8200, -7700, -7200, -6800,
144 -6400, -6000, -5600, -5200, -4800, -4300, -3800, -3400, -3000,
145 -2600, -2200, -1800, -1300, -800, -400, 0, 400, 800, 1200, 1600,
146 2100, 2600, 3000, 3400, 3800, 4200, 4600, 5100, 5600, 6000, 6400,
147 6800, 7200, 7600, 8000, 8500, 9000, 9400, 9800, 10200, 10600, 11000,
148 11400, 11900, 12400, 12800, 13200, 13600, 14000, 14400, 14800,
149 15300, 15800, 16200, 16600, 17000, 17400, 17800, 18200, 18700,
150 19200, 19600, 20000, 20400, 20800, 21200, 21600, 22100, 22600,
151 23000, 23400, 23800, 24200, 24600, 25000, 25400, 25900, 26400,
152 26800, 27200, 27600, 28000, 28400, 28800, 29300, 29800, 30200,
153 30600, 31000, 31400, 31800, 32200, 32600, 33100, 33600, 34000,
154 34400, 34800, 35200, 35600, 36000, 36400, 36800, 37300, 37800,
155 38200, 38600, 39000, 39400, 39800, 40200, 40600, 41100, 41600,
156 42000, 42400, 42800, 43200, 43600, 44000, 44400, 44800, 45300,
157 45800, 46200, 46600, 47000, 47400, 47800, 48200, 48600, 49000,
158 49500, 50000, 50400, 50800, 51200, 51600, 52000, 52400, 52800,
159 53200, 53700, 54200, 54600, 55000, 55400, 55800, 56200, 56600,
160 57000, 57400, 57800, 58200, 58700, 59200, 59600, 60000, 60400,
161 60800, 61200, 61600, 62000, 62400, 62800, 63300, 63800, 64200,
162 64600, 65000, 65400, 65800, 66200, 66600, 67000, 67400, 67800,
163 68200, 68700, 69200, 69600, 70000, 70400, 70800, 71200, 71600,
164 72000, 72400, 72800, 73200, 73600, 74100, 74600, 75000, 75400,
165 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000,
166 79400, 79800, 80300, 80800, 81200, 81600, 82000, 82400, 82800,
167 83200, 83600, 84000, 84400, 84800, 85200, 85600, 86000, 86400,
168 86800, 87300, 87800, 88200, 88600, 89000, 89400, 89800, 90200,
169 90600, 91000, 91400, 91800, 92200, 92600, 93000, 93400, 93800,
170 94200, 94600, 95000, 95500, 96000, 96400, 96800, 97200, 97600,
171 98000, 98400, 98800, 99200, 99600, 100000, 100400, 100800, 101200,
172 101600, 102000, 102400, 102800, 103200, 103600, 104000, 104400,
173 104800, 105200, 105600, 106100, 106600, 107000, 107400, 107800,
174 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
175 111400, 111800, 112200, 112600, 113000, 113400, 113800, 114200,
176 114600, 115000, 115400, 115800, 116200, 116600, 117000, 117400,
177 117800, 118200, 118600, 119000, 119400, 119800, 120200, 120600,
178 121000, 121400, 121800, 122200, 122600, 123000, 123400, 123800, 124200,
179 124600, 124900, 125000, 125000, 125000, 125000
183 const struct ti_bandgap_data omap4460_data
= {
184 .features
= TI_BANDGAP_FEATURE_TSHUT
|
185 TI_BANDGAP_FEATURE_TSHUT_CONFIG
|
186 TI_BANDGAP_FEATURE_TALERT
|
187 TI_BANDGAP_FEATURE_MODE_CONFIG
|
188 TI_BANDGAP_FEATURE_POWER_SWITCH
|
189 TI_BANDGAP_FEATURE_CLK_CTRL
|
190 TI_BANDGAP_FEATURE_COUNTER
,
191 .fclock_name
= "bandgap_ts_fclk",
192 .div_ck_name
= "div_ts_ck",
193 .conv_table
= omap4460_adc_to_temp
,
194 .adc_start_val
= OMAP4460_ADC_START_VALUE
,
195 .adc_end_val
= OMAP4460_ADC_END_VALUE
,
196 .expose_sensor
= ti_thermal_expose_sensor
,
197 .remove_sensor
= ti_thermal_remove_sensor
,
198 .report_temperature
= ti_thermal_report_sensor_temperature
,
201 .registers
= &omap4460_mpu_temp_sensor_registers
,
202 .ts_data
= &omap4460_mpu_temp_sensor_data
,
204 .slope_pcb
= OMAP_GRADIENT_SLOPE_W_PCB_4460
,
205 .constant_pcb
= OMAP_GRADIENT_CONST_W_PCB_4460
,
206 .register_cooling
= ti_thermal_register_cpu_cooling
,
207 .unregister_cooling
= ti_thermal_unregister_cpu_cooling
,
214 const struct ti_bandgap_data omap4470_data
= {
215 .features
= TI_BANDGAP_FEATURE_TSHUT
|
216 TI_BANDGAP_FEATURE_TSHUT_CONFIG
|
217 TI_BANDGAP_FEATURE_TALERT
|
218 TI_BANDGAP_FEATURE_MODE_CONFIG
|
219 TI_BANDGAP_FEATURE_POWER_SWITCH
|
220 TI_BANDGAP_FEATURE_CLK_CTRL
|
221 TI_BANDGAP_FEATURE_COUNTER
,
222 .fclock_name
= "bandgap_ts_fclk",
223 .div_ck_name
= "div_ts_ck",
224 .conv_table
= omap4460_adc_to_temp
,
225 .adc_start_val
= OMAP4460_ADC_START_VALUE
,
226 .adc_end_val
= OMAP4460_ADC_END_VALUE
,
227 .expose_sensor
= ti_thermal_expose_sensor
,
228 .remove_sensor
= ti_thermal_remove_sensor
,
229 .report_temperature
= ti_thermal_report_sensor_temperature
,
232 .registers
= &omap4460_mpu_temp_sensor_registers
,
233 .ts_data
= &omap4460_mpu_temp_sensor_data
,
235 .slope_pcb
= OMAP_GRADIENT_SLOPE_W_PCB_4470
,
236 .constant_pcb
= OMAP_GRADIENT_CONST_W_PCB_4470
,
237 .register_cooling
= ti_thermal_register_cpu_cooling
,
238 .unregister_cooling
= ti_thermal_unregister_cpu_cooling
,