brintos

brintos / linux-shallow public Read only

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