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