brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · 72e1ff2 Raw
159 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * OMAP3 thermal driver.4 *5 * Copyright (C) 2011-2012 Texas Instruments Inc.6 * Copyright (C) 2014 Pavel Machek <pavel@ucw.cz>7 *8 * Note9 * http://www.ti.com/lit/er/sprz278f/sprz278f.pdf "Advisory10 * 3.1.1.186 MMC OCP Clock Not Gated When Thermal Sensor Is Used"11 *12 * Also TI says:13 * Just be careful when you try to make thermal policy like decisions14 * based on this sensor. Placement of the sensor w.r.t the actual logic15 * generating heat has to be a factor as well. If you are just looking16 * for an approximation temperature (thermometerish kind), you might be17 * ok with this. I am not sure we'd find any TI data around this.. just a18 * heads up.19 */20 21#include "ti-thermal.h"22#include "ti-bandgap.h"23 24/*25 * OMAP34XX has one instance of thermal sensor for MPU26 * need to describe the individual bit fields27 */28static struct temp_sensor_registers29omap34xx_mpu_temp_sensor_registers = {30	.temp_sensor_ctrl = 0,31	.bgap_soc_mask = BIT(8),32	.bgap_eocz_mask = BIT(7),33	.bgap_dtemp_mask = 0x7f,34 35	.bgap_mode_ctrl = 0,36	.mode_ctrl_mask = BIT(9),37};38 39/* Thresholds and limits for OMAP34XX MPU temperature sensor */40static struct temp_sensor_data omap34xx_mpu_temp_sensor_data = {41	.min_freq = 32768,42	.max_freq = 32768,43};44 45/*46 * Temperature values in milli degree celsius47 */48static const int49omap34xx_adc_to_temp[128] = {50	-40000, -40000, -40000, -40000, -40000, -39000, -38000, -36000,51	-34000, -32000, -31000,	-29000, -28000, -26000, -25000, -24000,52	-22000, -21000, -19000, -18000, -17000, -15000,	-14000, -12000,53	-11000, -9000, -8000, -7000, -5000, -4000, -2000, -1000, 0000,54	1000, 3000, 4000, 5000, 7000, 8000, 10000, 11000, 13000, 14000,55	15000, 17000, 18000, 20000, 21000, 22000, 24000, 25000, 27000,56	28000, 30000, 31000, 32000, 34000, 35000, 37000, 38000, 39000,57	41000, 42000, 44000, 45000, 47000, 48000, 49000, 51000, 52000,58	53000, 55000, 56000, 58000, 59000, 60000, 62000, 63000, 65000,59	66000, 67000, 69000, 70000, 72000, 73000, 74000, 76000, 77000,60	79000, 80000, 81000, 83000, 84000, 85000, 87000, 88000, 89000,61	91000, 92000, 94000, 95000, 96000, 98000, 99000, 100000,62	102000, 103000, 105000, 106000, 107000, 109000, 110000, 111000,63	113000, 114000, 116000, 117000, 118000, 120000, 121000, 122000,64	124000, 124000, 125000, 125000, 125000, 125000,	12500065};66 67/* OMAP34XX data */68const struct ti_bandgap_data omap34xx_data = {69	.features = TI_BANDGAP_FEATURE_CLK_CTRL | TI_BANDGAP_FEATURE_UNRELIABLE,70	.fclock_name = "ts_fck",71	.div_ck_name = "ts_fck",72	.conv_table = omap34xx_adc_to_temp,73	.adc_start_val = 0,74	.adc_end_val = 127,75	.expose_sensor = ti_thermal_expose_sensor,76	.remove_sensor = ti_thermal_remove_sensor,77 78	.sensors = {79		{80		.registers = &omap34xx_mpu_temp_sensor_registers,81		.ts_data = &omap34xx_mpu_temp_sensor_data,82		.domain = "cpu",83		.slope_pcb = 0,84		.constant_pcb = 20000,85		.register_cooling = NULL,86		.unregister_cooling = NULL,87		},88	},89	.sensor_count = 1,90};91 92/*93 * OMAP36XX has one instance of thermal sensor for MPU94 * need to describe the individual bit fields95 */96static struct temp_sensor_registers97omap36xx_mpu_temp_sensor_registers = {98	.temp_sensor_ctrl = 0,99	.bgap_soc_mask = BIT(9),100	.bgap_eocz_mask = BIT(8),101	.bgap_dtemp_mask = 0xFF,102 103	.bgap_mode_ctrl = 0,104	.mode_ctrl_mask = BIT(10),105};106 107/* Thresholds and limits for OMAP36XX MPU temperature sensor */108static struct temp_sensor_data omap36xx_mpu_temp_sensor_data = {109	.min_freq = 32768,110	.max_freq = 32768,111};112 113/*114 * Temperature values in milli degree celsius115 */116static const int117omap36xx_adc_to_temp[128] = {118	-40000, -40000, -40000, -40000, -40000, -40000, -40000, -40000,119	-40000, -40000, -40000,	-40000, -40000, -38000, -35000, -34000,120	-32000, -30000, -28000, -26000, -24000, -22000,	-20000, -18500,121	-17000, -15000, -13500, -12000, -10000, -8000, -6500, -5000, -3500,122	-1500, 0, 2000, 3500, 5000, 6500, 8500, 10000, 12000, 13500,123	15000, 17000, 19000, 21000, 23000, 25000, 27000, 28500, 30000,124	32000, 33500, 35000, 37000, 38500, 40000, 42000, 43500, 45000,125	47000, 48500, 50000, 52000, 53500, 55000, 57000, 58500, 60000,126	62000, 64000, 66000, 68000, 70000, 71500, 73500, 75000, 77000,127	78500, 80000, 82000, 83500, 85000, 87000, 88500, 90000, 92000,128	93500, 95000, 97000, 98500, 100000, 102000, 103500, 105000, 107000,129	109000, 111000, 113000, 115000, 117000, 118500, 120000, 122000,130	123500, 125000, 125000, 125000, 125000, 125000, 125000, 125000,131	125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000,132	125000, 125000, 125000, 125000, 125000, 125000,	125000133};134 135/* OMAP36XX data */136const struct ti_bandgap_data omap36xx_data = {137	.features = TI_BANDGAP_FEATURE_CLK_CTRL | TI_BANDGAP_FEATURE_UNRELIABLE,138	.fclock_name = "ts_fck",139	.div_ck_name = "ts_fck",140	.conv_table = omap36xx_adc_to_temp,141	.adc_start_val = 0,142	.adc_end_val = 127,143	.expose_sensor = ti_thermal_expose_sensor,144	.remove_sensor = ti_thermal_remove_sensor,145 146	.sensors = {147		{148		.registers = &omap36xx_mpu_temp_sensor_registers,149		.ts_data = &omap36xx_mpu_temp_sensor_data,150		.domain = "cpu",151		.slope_pcb = 0,152		.constant_pcb = 20000,153		.register_cooling = NULL,154		.unregister_cooling = NULL,155		},156	},157	.sensor_count = 1,158};159