Linux Audio

Check our new training course

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