0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "ti-thermal.h"
0011 #include "ti-bandgap.h"
0012 #include "omap5xxx-bandgap.h"
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 static struct temp_sensor_registers
0023 omap5430_mpu_temp_sensor_registers = {
0024 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_MPU_OFFSET,
0025 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
0026 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
0027 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
0028
0029 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
0030 .mask_hot_mask = OMAP5430_MASK_HOT_MPU_MASK,
0031 .mask_cold_mask = OMAP5430_MASK_COLD_MPU_MASK,
0032 .mask_counter_delay_mask = OMAP5430_MASK_COUNTER_DELAY_MASK,
0033 .mask_freeze_mask = OMAP5430_MASK_FREEZE_MPU_MASK,
0034
0035 .bgap_counter = OMAP5430_BGAP_CTRL_OFFSET,
0036 .counter_mask = OMAP5430_COUNTER_MASK,
0037
0038 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_MPU_OFFSET,
0039 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
0040 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
0041
0042 .tshut_threshold = OMAP5430_BGAP_TSHUT_MPU_OFFSET,
0043 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
0044 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
0045
0046 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
0047 .status_hot_mask = OMAP5430_HOT_MPU_FLAG_MASK,
0048 .status_cold_mask = OMAP5430_COLD_MPU_FLAG_MASK,
0049
0050 .ctrl_dtemp_1 = OMAP5430_BGAP_DTEMP_MPU_1_OFFSET,
0051 .ctrl_dtemp_2 = OMAP5430_BGAP_DTEMP_MPU_2_OFFSET,
0052 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_MPU,
0053 };
0054
0055
0056
0057
0058 static struct temp_sensor_registers
0059 omap5430_gpu_temp_sensor_registers = {
0060 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_GPU_OFFSET,
0061 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
0062 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
0063 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
0064
0065 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
0066 .mask_hot_mask = OMAP5430_MASK_HOT_GPU_MASK,
0067 .mask_cold_mask = OMAP5430_MASK_COLD_GPU_MASK,
0068 .mask_counter_delay_mask = OMAP5430_MASK_COUNTER_DELAY_MASK,
0069 .mask_freeze_mask = OMAP5430_MASK_FREEZE_GPU_MASK,
0070
0071 .bgap_counter = OMAP5430_BGAP_CTRL_OFFSET,
0072 .counter_mask = OMAP5430_COUNTER_MASK,
0073
0074 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_GPU_OFFSET,
0075 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
0076 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
0077
0078 .tshut_threshold = OMAP5430_BGAP_TSHUT_GPU_OFFSET,
0079 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
0080 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
0081
0082 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
0083 .status_hot_mask = OMAP5430_HOT_GPU_FLAG_MASK,
0084 .status_cold_mask = OMAP5430_COLD_GPU_FLAG_MASK,
0085
0086 .ctrl_dtemp_1 = OMAP5430_BGAP_DTEMP_GPU_1_OFFSET,
0087 .ctrl_dtemp_2 = OMAP5430_BGAP_DTEMP_GPU_2_OFFSET,
0088
0089 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_GPU,
0090 };
0091
0092
0093
0094
0095 static struct temp_sensor_registers
0096 omap5430_core_temp_sensor_registers = {
0097 .temp_sensor_ctrl = OMAP5430_TEMP_SENSOR_CORE_OFFSET,
0098 .bgap_tempsoff_mask = OMAP5430_BGAP_TEMPSOFF_MASK,
0099 .bgap_eocz_mask = OMAP5430_BGAP_TEMP_SENSOR_EOCZ_MASK,
0100 .bgap_dtemp_mask = OMAP5430_BGAP_TEMP_SENSOR_DTEMP_MASK,
0101
0102 .bgap_mask_ctrl = OMAP5430_BGAP_CTRL_OFFSET,
0103 .mask_hot_mask = OMAP5430_MASK_HOT_CORE_MASK,
0104 .mask_cold_mask = OMAP5430_MASK_COLD_CORE_MASK,
0105 .mask_counter_delay_mask = OMAP5430_MASK_COUNTER_DELAY_MASK,
0106 .mask_freeze_mask = OMAP5430_MASK_FREEZE_CORE_MASK,
0107
0108 .bgap_counter = OMAP5430_BGAP_CTRL_OFFSET,
0109 .counter_mask = OMAP5430_COUNTER_MASK,
0110
0111 .bgap_threshold = OMAP5430_BGAP_THRESHOLD_CORE_OFFSET,
0112 .threshold_thot_mask = OMAP5430_T_HOT_MASK,
0113 .threshold_tcold_mask = OMAP5430_T_COLD_MASK,
0114
0115 .tshut_threshold = OMAP5430_BGAP_TSHUT_CORE_OFFSET,
0116 .tshut_hot_mask = OMAP5430_TSHUT_HOT_MASK,
0117 .tshut_cold_mask = OMAP5430_TSHUT_COLD_MASK,
0118
0119 .bgap_status = OMAP5430_BGAP_STATUS_OFFSET,
0120 .status_hot_mask = OMAP5430_HOT_CORE_FLAG_MASK,
0121 .status_cold_mask = OMAP5430_COLD_CORE_FLAG_MASK,
0122
0123 .ctrl_dtemp_1 = OMAP5430_BGAP_DTEMP_CORE_1_OFFSET,
0124 .ctrl_dtemp_2 = OMAP5430_BGAP_DTEMP_CORE_2_OFFSET,
0125
0126 .bgap_efuse = OMAP5430_FUSE_OPP_BGAP_CORE,
0127 };
0128
0129
0130 static struct temp_sensor_data omap5430_mpu_temp_sensor_data = {
0131 .tshut_hot = OMAP5430_MPU_TSHUT_HOT,
0132 .tshut_cold = OMAP5430_MPU_TSHUT_COLD,
0133 .t_hot = OMAP5430_MPU_T_HOT,
0134 .t_cold = OMAP5430_MPU_T_COLD,
0135 .min_freq = OMAP5430_MPU_MIN_FREQ,
0136 .max_freq = OMAP5430_MPU_MAX_FREQ,
0137 };
0138
0139
0140 static struct temp_sensor_data omap5430_gpu_temp_sensor_data = {
0141 .tshut_hot = OMAP5430_GPU_TSHUT_HOT,
0142 .tshut_cold = OMAP5430_GPU_TSHUT_COLD,
0143 .t_hot = OMAP5430_GPU_T_HOT,
0144 .t_cold = OMAP5430_GPU_T_COLD,
0145 .min_freq = OMAP5430_GPU_MIN_FREQ,
0146 .max_freq = OMAP5430_GPU_MAX_FREQ,
0147 };
0148
0149
0150 static struct temp_sensor_data omap5430_core_temp_sensor_data = {
0151 .tshut_hot = OMAP5430_CORE_TSHUT_HOT,
0152 .tshut_cold = OMAP5430_CORE_TSHUT_COLD,
0153 .t_hot = OMAP5430_CORE_T_HOT,
0154 .t_cold = OMAP5430_CORE_T_COLD,
0155 .min_freq = OMAP5430_CORE_MIN_FREQ,
0156 .max_freq = OMAP5430_CORE_MAX_FREQ,
0157 };
0158
0159
0160
0161
0162
0163 static int
0164 omap5430_adc_to_temp[
0165 OMAP5430_ADC_END_VALUE - OMAP5430_ADC_START_VALUE + 1] = {
0166
0167 -40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
0168 -37800,
0169
0170 -37400, -37000, -36600, -36200, -35800, -35300, -34700, -34200, -33800,
0171 -33400,
0172
0173 -33000, -32600, -32200, -31800, -31400, -31000, -30600, -30200, -29800,
0174 -29400,
0175
0176 -29000, -28600, -28200, -27700, -27100, -26600, -26200, -25800, -25400,
0177 -25000,
0178
0179 -24600, -24200, -23800, -23400, -23000, -22600, -22200, -21600, -21400,
0180 -21000,
0181
0182 -20500, -19900, -19400, -19000, -18600, -18200, -17800, -17400, -17000,
0183 -16600,
0184
0185 -16200, -15800, -15400, -15000, -14600, -14200, -13800, -13400, -13000,
0186 -12500,
0187
0188 -11900, -11400, -11000, -10600, -10200, -9800, -9400, -9000, -8600,
0189 -8200,
0190
0191 -7800, -7400, -7000, -6600, -6200, -5800, -5400, -5000, -4500, -3900,
0192
0193 -3400, -3000, -2600, -2200, -1800, -1400, -1000, -600, -200, 200,
0194
0195 600, 1000, 1400, 1800, 2200, 2600, 3000, 3400, 3900, 4500,
0196
0197 5000, 5400, 5800, 6200, 6600, 7000, 7400, 7800, 8200, 8600,
0198
0199 9000, 9400, 9800, 10200, 10600, 11000, 11400, 11800, 12200, 12700,
0200
0201 13300, 13800, 14200, 14600, 15000, 15400, 15800, 16200, 16600, 17000,
0202
0203 17400, 17800, 18200, 18600, 19000, 19400, 19800, 20200, 20600, 21100,
0204
0205 21400, 21900, 22500, 23000, 23400, 23800, 24200, 24600, 25000, 25400,
0206
0207 25800, 26200, 26600, 27000, 27400, 27800, 28200, 28600, 29000, 29400,
0208
0209 29800, 30200, 30600, 31000, 31400, 31900, 32500, 33000, 33400, 33800,
0210
0211 34200, 34600, 35000, 35400, 35800, 36200, 36600, 37000, 37400, 37800,
0212
0213 38200, 38600, 39000, 39400, 39800, 40200, 40600, 41000, 41400, 41800,
0214
0215 42200, 42600, 43100, 43700, 44200, 44600, 45000, 45400, 45800, 46200,
0216
0217 46600, 47000, 47400, 47800, 48200, 48600, 49000, 49400, 49800, 50200,
0218
0219 50600, 51000, 51400, 51800, 52200, 52600, 53000, 53400, 53800, 54200,
0220
0221 54600, 55000, 55400, 55900, 56500, 57000, 57400, 57800, 58200, 58600,
0222
0223 59000, 59400, 59800, 60200, 60600, 61000, 61400, 61800, 62200, 62600,
0224
0225 63000, 63400, 63800, 64200, 64600, 65000, 65400, 65800, 66200, 66600,
0226
0227 67000, 67400, 67800, 68200, 68600, 69000, 69400, 69800, 70200, 70600,
0228
0229 71000, 71500, 72100, 72600, 73000, 73400, 73800, 74200, 74600, 75000,
0230
0231 75400, 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000,
0232
0233 79400, 79800, 80200, 80600, 81000, 81400, 81800, 82200, 82600, 83000,
0234
0235 83400, 83800, 84200, 84600, 85000, 85400, 85800, 86200, 86600, 87000,
0236
0237 87400, 87800, 88200, 88600, 89000, 89400, 89800, 90200, 90600, 91000,
0238
0239 91400, 91800, 92200, 92600, 93000, 93400, 93800, 94200, 94600, 95000,
0240
0241 95400, 95800, 96200, 96600, 97000, 97500, 98100, 98600, 99000, 99400,
0242
0243 99800, 100200, 100600, 101000, 101400, 101800, 102200, 102600, 103000,
0244 103400,
0245
0246 103800, 104200, 104600, 105000, 105400, 105800, 106200, 106600, 107000,
0247 107400,
0248
0249 107800, 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
0250 111400,
0251
0252 111800, 112200, 112600, 113000, 113400, 113800, 114200, 114600, 115000,
0253 115400,
0254
0255 115800, 116200, 116600, 117000, 117400, 117800, 118200, 118600, 119000,
0256 119400,
0257
0258 119800, 120200, 120600, 121000, 121400, 121800, 122400, 122600, 123000,
0259 123400,
0260
0261 123800, 124200, 124600, 124900, 125000, 125000,
0262 };
0263
0264
0265 const struct ti_bandgap_data omap5430_data = {
0266 .features = TI_BANDGAP_FEATURE_TSHUT_CONFIG |
0267 TI_BANDGAP_FEATURE_FREEZE_BIT |
0268 TI_BANDGAP_FEATURE_TALERT |
0269 TI_BANDGAP_FEATURE_COUNTER_DELAY |
0270 TI_BANDGAP_FEATURE_HISTORY_BUFFER,
0271 .fclock_name = "l3instr_ts_gclk_div",
0272 .div_ck_name = "l3instr_ts_gclk_div",
0273 .conv_table = omap5430_adc_to_temp,
0274 .adc_start_val = OMAP5430_ADC_START_VALUE,
0275 .adc_end_val = OMAP5430_ADC_END_VALUE,
0276 .expose_sensor = ti_thermal_expose_sensor,
0277 .remove_sensor = ti_thermal_remove_sensor,
0278 .report_temperature = ti_thermal_report_sensor_temperature,
0279 .sensors = {
0280 {
0281 .registers = &omap5430_mpu_temp_sensor_registers,
0282 .ts_data = &omap5430_mpu_temp_sensor_data,
0283 .domain = "cpu",
0284 .register_cooling = ti_thermal_register_cpu_cooling,
0285 .unregister_cooling = ti_thermal_unregister_cpu_cooling,
0286 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_5430_CPU,
0287 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_5430_CPU,
0288 },
0289 {
0290 .registers = &omap5430_gpu_temp_sensor_registers,
0291 .ts_data = &omap5430_gpu_temp_sensor_data,
0292 .domain = "gpu",
0293 .slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_5430_GPU,
0294 .constant_pcb = OMAP_GRADIENT_CONST_W_PCB_5430_GPU,
0295 },
0296 {
0297 .registers = &omap5430_core_temp_sensor_registers,
0298 .ts_data = &omap5430_core_temp_sensor_data,
0299 .domain = "core",
0300 },
0301 },
0302 .sensor_count = 3,
0303 };