Linux-libre 5.4.48-gnu
[librecmc/linux-libre.git] / drivers / thermal / ti-soc-thermal / omap4-thermal-data.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * OMAP4 thermal driver.
4  *
5  * Copyright (C) 2011-2012 Texas Instruments Inc.
6  * Contact:
7  *      Eduardo Valentin <eduardo.valentin@ti.com>
8  */
9
10 #include "ti-thermal.h"
11 #include "ti-bandgap.h"
12 #include "omap4xxx-bandgap.h"
13
14 /*
15  * OMAP4430 has one instance of thermal sensor for MPU
16  * need to describe the individual bit fields
17  */
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,
25
26         .bgap_mode_ctrl = OMAP4430_TEMP_SENSOR_CTRL_OFFSET,
27         .mode_ctrl_mask = OMAP4430_SINGLE_MODE_MASK,
28
29         .bgap_efuse = OMAP4430_FUSE_OPP_BGAP,
30 };
31
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,
36 };
37
38 /*
39  * Temperature values in milli degree celsius
40  * ADC code values from 530 to 923
41  */
42 static const int
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,
54 };
55
56 /* OMAP4430 data */
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,
68         .sensors = {
69                 {
70                 .registers = &omap4430_mpu_temp_sensor_registers,
71                 .ts_data = &omap4430_mpu_temp_sensor_data,
72                 .domain = "cpu",
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,
77                 },
78         },
79         .sensor_count = 1,
80 };
81 /*
82  * OMAP4460 has one instance of thermal sensor for MPU
83  * need to describe the individual bit fields
84  */
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,
92
93         .bgap_mask_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
94         .mask_hot_mask = OMAP4460_MASK_HOT_MASK,
95         .mask_cold_mask = OMAP4460_MASK_COLD_MASK,
96
97         .bgap_mode_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
98         .mode_ctrl_mask = OMAP4460_SINGLE_MODE_MASK,
99
100         .bgap_counter = OMAP4460_BGAP_COUNTER_OFFSET,
101         .counter_mask = OMAP4460_COUNTER_MASK,
102
103         .bgap_threshold = OMAP4460_BGAP_THRESHOLD_OFFSET,
104         .threshold_thot_mask = OMAP4460_T_HOT_MASK,
105         .threshold_tcold_mask = OMAP4460_T_COLD_MASK,
106
107         .tshut_threshold = OMAP4460_BGAP_TSHUT_OFFSET,
108         .tshut_hot_mask = OMAP4460_TSHUT_HOT_MASK,
109         .tshut_cold_mask = OMAP4460_TSHUT_COLD_MASK,
110
111         .bgap_status = OMAP4460_BGAP_STATUS_OFFSET,
112         .status_hot_mask = OMAP4460_HOT_FLAG_MASK,
113         .status_cold_mask = OMAP4460_COLD_FLAG_MASK,
114
115         .bgap_efuse = OMAP4460_FUSE_OPP_BGAP,
116 };
117
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,
126 };
127
128 /*
129  * Temperature values in milli degree celsius
130  * ADC code values from 530 to 923
131  */
132 static const int
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
180 };
181
182 /* OMAP4460 data */
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,
199         .sensors = {
200                 {
201                 .registers = &omap4460_mpu_temp_sensor_registers,
202                 .ts_data = &omap4460_mpu_temp_sensor_data,
203                 .domain = "cpu",
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,
208                 },
209         },
210         .sensor_count = 1,
211 };
212
213 /* OMAP4470 data */
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,
230         .sensors = {
231                 {
232                 .registers = &omap4460_mpu_temp_sensor_registers,
233                 .ts_data = &omap4460_mpu_temp_sensor_data,
234                 .domain = "cpu",
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,
239                 },
240         },
241         .sensor_count = 1,
242 };