GNU Linux-libre 4.14.257-gnu1
[releases.git] / drivers / thermal / ti-soc-thermal / omap4-thermal-data.c
1 /*
2  * OMAP4 thermal driver.
3  *
4  * Copyright (C) 2011-2012 Texas Instruments Inc.
5  * Contact:
6  *      Eduardo Valentin <eduardo.valentin@ti.com>
7  *
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.
11  *
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.
16  *
17  */
18
19 #include "ti-thermal.h"
20 #include "ti-bandgap.h"
21 #include "omap4xxx-bandgap.h"
22
23 /*
24  * OMAP4430 has one instance of thermal sensor for MPU
25  * need to describe the individual bit fields
26  */
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,
34
35         .bgap_mode_ctrl = OMAP4430_TEMP_SENSOR_CTRL_OFFSET,
36         .mode_ctrl_mask = OMAP4430_SINGLE_MODE_MASK,
37
38         .bgap_efuse = OMAP4430_FUSE_OPP_BGAP,
39 };
40
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,
48 };
49
50 /*
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".
54  */
55 static const int
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,
67 };
68
69 /* OMAP4430 data */
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,
81         .sensors = {
82                 {
83                 .registers = &omap4430_mpu_temp_sensor_registers,
84                 .ts_data = &omap4430_mpu_temp_sensor_data,
85                 .domain = "cpu",
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,
90                 },
91         },
92         .sensor_count = 1,
93 };
94 /*
95  * OMAP4460 has one instance of thermal sensor for MPU
96  * need to describe the individual bit fields
97  */
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,
105
106         .bgap_mask_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
107         .mask_hot_mask = OMAP4460_MASK_HOT_MASK,
108         .mask_cold_mask = OMAP4460_MASK_COLD_MASK,
109
110         .bgap_mode_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
111         .mode_ctrl_mask = OMAP4460_SINGLE_MODE_MASK,
112
113         .bgap_counter = OMAP4460_BGAP_COUNTER_OFFSET,
114         .counter_mask = OMAP4460_COUNTER_MASK,
115
116         .bgap_threshold = OMAP4460_BGAP_THRESHOLD_OFFSET,
117         .threshold_thot_mask = OMAP4460_T_HOT_MASK,
118         .threshold_tcold_mask = OMAP4460_T_COLD_MASK,
119
120         .tshut_threshold = OMAP4460_BGAP_TSHUT_OFFSET,
121         .tshut_hot_mask = OMAP4460_TSHUT_HOT_MASK,
122         .tshut_cold_mask = OMAP4460_TSHUT_COLD_MASK,
123
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,
129
130         .bgap_efuse = OMAP4460_FUSE_OPP_BGAP,
131 };
132
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,
144         .update_int1 = 1000,
145         .update_int2 = 2000,
146 };
147
148 /*
149  * Temperature values in milli degree celsius
150  * ADC code values from 530 to 923
151  */
152 static const int
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
200 };
201
202 /* OMAP4460 data */
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,
219         .sensors = {
220                 {
221                 .registers = &omap4460_mpu_temp_sensor_registers,
222                 .ts_data = &omap4460_mpu_temp_sensor_data,
223                 .domain = "cpu",
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,
228                 },
229         },
230         .sensor_count = 1,
231 };
232
233 /* OMAP4470 data */
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,
250         .sensors = {
251                 {
252                 .registers = &omap4460_mpu_temp_sensor_registers,
253                 .ts_data = &omap4460_mpu_temp_sensor_data,
254                 .domain = "cpu",
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,
259                 },
260         },
261         .sensor_count = 1,
262 };