linux/drivers/thermal/ti-soc-thermal/omap4-thermal-data.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   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 MPU
  16 * need to describe the individual bit fields
  17 */
  18static struct temp_sensor_registers
  19omap4430_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 celsius
  40 * ADC code values from 13 to 107, see TRM
  41 * "18.4.10.2.3 ADC Codes Versus Temperature".
  42 */
  43static const int
  44omap4430_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 MPU
  85 * need to describe the individual bit fields
  86 */
  87static struct temp_sensor_registers
  88omap4460_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 celsius
 132 * ADC code values from 530 to 923
 133 */
 134static const int
 135omap4460_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, 125000
 182};
 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