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