1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include "odm_precomp.h"
18
19
20#define CALCULATE_SWINGTALBE_OFFSET(_offset, _direction, _size, _deltaThermal) \
21 do {\
22 for (_offset = 0; _offset < _size; _offset++) {\
23 if (_deltaThermal < thermalThreshold[_direction][_offset]) {\
24 if (_offset != 0)\
25 _offset--;\
26 break;\
27 } \
28 } \
29 if (_offset >= _size)\
30 _offset = _size-1;\
31 } while (0)
32
33
34void ConfigureTxpowerTrack(PDM_ODM_T pDM_Odm, PTXPWRTRACK_CFG pConfig)
35{
36 ConfigureTxpowerTrack_8723B(pConfig);
37}
38
39
40
41
42
43
44
45
46
47void ODM_ClearTxPowerTrackingState(PDM_ODM_T pDM_Odm)
48{
49 struct hal_com_data *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);
50 u8 p = 0;
51
52 pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
53 pDM_Odm->BbSwingIdxCck = pDM_Odm->DefaultCckIndex;
54 pDM_Odm->RFCalibrateInfo.CCK_index = 0;
55
56 for (p = ODM_RF_PATH_A; p < MAX_RF_PATH; ++p) {
57 pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->DefaultOfdmIndex;
58 pDM_Odm->BbSwingIdxOfdm[p] = pDM_Odm->DefaultOfdmIndex;
59 pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->DefaultOfdmIndex;
60
61 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
62 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = 0;
63 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = 0;
64 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
65
66
67 pDM_Odm->Absolute_OFDMSwingIdx[p] = 0;
68 pDM_Odm->Remnant_OFDMSwingIdx[p] = 0;
69 }
70
71
72 pDM_Odm->Modify_TxAGC_Flag_PathA = false;
73
74 pDM_Odm->Modify_TxAGC_Flag_PathB = false;
75 pDM_Odm->Remnant_CCKSwingIdx = 0;
76 pDM_Odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
77 pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = pHalData->EEPROMThermalMeter;
78 pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = pHalData->EEPROMThermalMeter;
79}
80
81void ODM_TXPowerTrackingCallback_ThermalMeter(struct adapter *Adapter)
82{
83
84 struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
85 PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
86
87 u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, p = 0, i = 0;
88 u8 ThermalValue_AVG_count = 0;
89 u32 ThermalValue_AVG = 0;
90
91 u8 OFDM_min_index = 0;
92 u8 Indexforchannel = 0;
93
94 TXPWRTRACK_CFG c;
95
96
97
98 u8 *deltaSwingTableIdx_TUP_A;
99 u8 *deltaSwingTableIdx_TDOWN_A;
100 u8 *deltaSwingTableIdx_TUP_B;
101 u8 *deltaSwingTableIdx_TDOWN_B;
102
103
104
105 ConfigureTxpowerTrack(pDM_Odm, &c);
106
107 (*c.GetDeltaSwingTable)(
108 pDM_Odm,
109 (u8 **)&deltaSwingTableIdx_TUP_A,
110 (u8 **)&deltaSwingTableIdx_TDOWN_A,
111 (u8 **)&deltaSwingTableIdx_TUP_B,
112 (u8 **)&deltaSwingTableIdx_TDOWN_B
113 );
114
115
116 pDM_Odm->RFCalibrateInfo.TXPowerTrackingCallbackCnt++;
117 pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = true;
118
119 ODM_RT_TRACE(
120 pDM_Odm,
121 ODM_COMP_TX_PWR_TRACK,
122 ODM_DBG_LOUD,
123 (
124 "===>ODM_TXPowerTrackingCallback_ThermalMeter,\npDM_Odm->BbSwingIdxCckBase: %d, pDM_Odm->BbSwingIdxOfdmBase[A]: %d, pDM_Odm->DefaultOfdmIndex: %d\n",
125 pDM_Odm->BbSwingIdxCckBase,
126 pDM_Odm->BbSwingIdxOfdmBase[ODM_RF_PATH_A],
127 pDM_Odm->DefaultOfdmIndex
128 )
129 );
130
131 ThermalValue = (u8)PHY_QueryRFReg(pDM_Odm->Adapter, ODM_RF_PATH_A, c.ThermalRegAddr, 0xfc00);
132 if (
133 !pDM_Odm->RFCalibrateInfo.TxPowerTrackControl ||
134 pHalData->EEPROMThermalMeter == 0 ||
135 pHalData->EEPROMThermalMeter == 0xFF
136 )
137 return;
138
139
140
141 if (pDM_Odm->RFCalibrateInfo.bReloadtxpowerindex)
142 ODM_RT_TRACE(
143 pDM_Odm,
144 ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
145 ("reload ofdm index for band switch\n")
146 );
147
148
149
150 pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index] = ThermalValue;
151 pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index++;
152 if (pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index == c.AverageThermalNum)
153 pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index = 0;
154
155 for (i = 0; i < c.AverageThermalNum; i++) {
156 if (pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[i]) {
157 ThermalValue_AVG += pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[i];
158 ThermalValue_AVG_count++;
159 }
160 }
161
162
163 if (ThermalValue_AVG_count) {
164 ThermalValue = (u8)(ThermalValue_AVG / ThermalValue_AVG_count);
165 ODM_RT_TRACE(
166 pDM_Odm,
167 ODM_COMP_TX_PWR_TRACK,
168 ODM_DBG_LOUD,
169 (
170 "AVG Thermal Meter = 0x%X, EFUSE Thermal Base = 0x%X\n",
171 ThermalValue,
172 pHalData->EEPROMThermalMeter
173 )
174 );
175 }
176
177
178
179 delta =
180 (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue) ?
181 (ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue) :
182 (pDM_Odm->RFCalibrateInfo.ThermalValue - ThermalValue);
183 delta_LCK =
184 (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_LCK) ?
185 (ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_LCK) :
186 (pDM_Odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);
187 delta_IQK =
188 (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_IQK) ?
189 (ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_IQK) :
190 (pDM_Odm->RFCalibrateInfo.ThermalValue_IQK - ThermalValue);
191
192 ODM_RT_TRACE(
193 pDM_Odm,
194 ODM_COMP_TX_PWR_TRACK,
195 ODM_DBG_LOUD,
196 (
197 "(delta, delta_LCK, delta_IQK) = (%d, %d, %d)\n",
198 delta,
199 delta_LCK,
200 delta_IQK
201 )
202 );
203
204
205
206 if (delta_LCK >= c.Threshold_IQK) {
207 ODM_RT_TRACE(
208 pDM_Odm,
209 ODM_COMP_TX_PWR_TRACK,
210 ODM_DBG_LOUD,
211 (
212 "delta_LCK(%d) >= Threshold_IQK(%d)\n",
213 delta_LCK,
214 c.Threshold_IQK
215 )
216 );
217 pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = ThermalValue;
218 if (c.PHY_LCCalibrate)
219 (*c.PHY_LCCalibrate)(pDM_Odm);
220 }
221
222
223 if (delta > 0 && pDM_Odm->RFCalibrateInfo.TxPowerTrackControl) {
224
225 delta =
226 ThermalValue > pHalData->EEPROMThermalMeter ?
227 (ThermalValue - pHalData->EEPROMThermalMeter) :
228 (pHalData->EEPROMThermalMeter - ThermalValue);
229
230 if (delta >= TXPWR_TRACK_TABLE_SIZE)
231 delta = TXPWR_TRACK_TABLE_SIZE - 1;
232
233
234 if (ThermalValue > pHalData->EEPROMThermalMeter) {
235 ODM_RT_TRACE(
236 pDM_Odm,
237 ODM_COMP_TX_PWR_TRACK,
238 ODM_DBG_LOUD,
239 (
240 "deltaSwingTableIdx_TUP_A[%d] = %d\n",
241 delta,
242 deltaSwingTableIdx_TUP_A[delta]
243 )
244 );
245 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_A] =
246 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A];
247 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A] =
248 deltaSwingTableIdx_TUP_A[delta];
249
250
251 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] =
252 deltaSwingTableIdx_TUP_A[delta];
253
254 ODM_RT_TRACE(
255 pDM_Odm,
256 ODM_COMP_TX_PWR_TRACK,
257 ODM_DBG_LOUD,
258 (
259 "******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n",
260 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A]
261 )
262 );
263
264 if (c.RfPathCount > 1) {
265 ODM_RT_TRACE(
266 pDM_Odm,
267 ODM_COMP_TX_PWR_TRACK,
268 ODM_DBG_LOUD,
269 (
270 "deltaSwingTableIdx_TUP_B[%d] = %d\n",
271 delta,
272 deltaSwingTableIdx_TUP_B[delta]
273 )
274 );
275 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_B] =
276 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B];
277 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B] =
278 deltaSwingTableIdx_TUP_B[delta];
279
280
281 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] =
282 deltaSwingTableIdx_TUP_B[delta];
283 ODM_RT_TRACE(
284 pDM_Odm,
285 ODM_COMP_TX_PWR_TRACK,
286 ODM_DBG_LOUD,
287 (
288 "******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n",
289 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B]
290 )
291 );
292 }
293
294 } else {
295 ODM_RT_TRACE(
296 pDM_Odm,
297 ODM_COMP_TX_PWR_TRACK,
298 ODM_DBG_LOUD,
299 (
300 "deltaSwingTableIdx_TDOWN_A[%d] = %d\n",
301 delta,
302 deltaSwingTableIdx_TDOWN_A[delta]
303 )
304 );
305
306 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_A] =
307 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A];
308 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_A] =
309 -1 * deltaSwingTableIdx_TDOWN_A[delta];
310
311
312 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] =
313 -1 * deltaSwingTableIdx_TDOWN_A[delta];
314
315 ODM_RT_TRACE(
316 pDM_Odm,
317 ODM_COMP_TX_PWR_TRACK,
318 ODM_DBG_LOUD,
319 (
320 "******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n",
321 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A]
322 )
323 );
324
325 if (c.RfPathCount > 1) {
326 ODM_RT_TRACE(
327 pDM_Odm,
328 ODM_COMP_TX_PWR_TRACK,
329 ODM_DBG_LOUD,
330 (
331 "deltaSwingTableIdx_TDOWN_B[%d] = %d\n",
332 delta,
333 deltaSwingTableIdx_TDOWN_B[delta]
334 )
335 );
336
337 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[ODM_RF_PATH_B] =
338 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B];
339 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[ODM_RF_PATH_B] =
340 -1 * deltaSwingTableIdx_TDOWN_B[delta];
341
342
343 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] =
344 -1 * deltaSwingTableIdx_TDOWN_B[delta];
345
346 ODM_RT_TRACE(
347 pDM_Odm,
348 ODM_COMP_TX_PWR_TRACK,
349 ODM_DBG_LOUD,
350 (
351 "******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n",
352 pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B]
353 )
354 );
355 }
356 }
357
358 for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++) {
359 ODM_RT_TRACE(
360 pDM_Odm,
361 ODM_COMP_TX_PWR_TRACK,
362 ODM_DBG_LOUD,
363 (
364 "\n\n ================================ [Path-%c] Calculating PowerIndexOffset ================================\n",
365 (p == ODM_RF_PATH_A ? 'A' : 'B')
366 )
367 );
368
369 if (
370 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] ==
371 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]
372 )
373 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
374 else
375 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] - pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p];
376
377 ODM_RT_TRACE(
378 pDM_Odm,
379 ODM_COMP_TX_PWR_TRACK,
380 ODM_DBG_LOUD,
381 (
382 "[Path-%c] PowerIndexOffset(%d) = DeltaPowerIndex(%d) - DeltaPowerIndexLast(%d)\n",
383 (
384 p == ODM_RF_PATH_A ? 'A' : 'B'),
385 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p],
386 pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p],
387 pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]
388 )
389 );
390
391 pDM_Odm->RFCalibrateInfo.OFDM_index[p] =
392 pDM_Odm->BbSwingIdxOfdmBase[p] +
393 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
394
395 pDM_Odm->RFCalibrateInfo.CCK_index =
396 pDM_Odm->BbSwingIdxCckBase +
397 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
398
399 pDM_Odm->BbSwingIdxCck =
400 pDM_Odm->RFCalibrateInfo.CCK_index;
401
402 pDM_Odm->BbSwingIdxOfdm[p] =
403 pDM_Odm->RFCalibrateInfo.OFDM_index[p];
404
405
406 ODM_RT_TRACE(
407 pDM_Odm,
408 ODM_COMP_TX_PWR_TRACK,
409 ODM_DBG_LOUD,
410 (
411 "The 'CCK' final index(%d) = BaseIndex(%d) + PowerIndexOffset(%d)\n",
412 pDM_Odm->BbSwingIdxCck,
413 pDM_Odm->BbSwingIdxCckBase,
414 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p]
415 )
416 );
417 ODM_RT_TRACE(
418 pDM_Odm,
419 ODM_COMP_TX_PWR_TRACK,
420 ODM_DBG_LOUD,
421 (
422 "The 'OFDM' final index(%d) = BaseIndex[%c](%d) + PowerIndexOffset(%d)\n",
423 pDM_Odm->BbSwingIdxOfdm[p],
424 (p == ODM_RF_PATH_A ? 'A' : 'B'),
425 pDM_Odm->BbSwingIdxOfdmBase[p],
426 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p]
427 )
428 );
429
430
431 if (pDM_Odm->RFCalibrateInfo.OFDM_index[p] > c.SwingTableSize_OFDM-1)
432 pDM_Odm->RFCalibrateInfo.OFDM_index[p] = c.SwingTableSize_OFDM-1;
433 else if (pDM_Odm->RFCalibrateInfo.OFDM_index[p] < OFDM_min_index)
434 pDM_Odm->RFCalibrateInfo.OFDM_index[p] = OFDM_min_index;
435 }
436 ODM_RT_TRACE(
437 pDM_Odm,
438 ODM_COMP_TX_PWR_TRACK,
439 ODM_DBG_LOUD,
440 ("\n\n ========================================================================================================\n")
441 );
442 if (pDM_Odm->RFCalibrateInfo.CCK_index > c.SwingTableSize_CCK-1)
443 pDM_Odm->RFCalibrateInfo.CCK_index = c.SwingTableSize_CCK-1;
444
445
446 } else {
447 ODM_RT_TRACE(
448 pDM_Odm,
449 ODM_COMP_TX_PWR_TRACK,
450 ODM_DBG_LOUD,
451 (
452 "The thermal meter is unchanged or TxPowerTracking OFF(%d): ThermalValue: %d , pDM_Odm->RFCalibrateInfo.ThermalValue: %d\n",
453 pDM_Odm->RFCalibrateInfo.TxPowerTrackControl,
454 ThermalValue,
455 pDM_Odm->RFCalibrateInfo.ThermalValue
456 )
457 );
458
459 for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
460 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
461 }
462 ODM_RT_TRACE(
463 pDM_Odm,
464 ODM_COMP_TX_PWR_TRACK,
465 ODM_DBG_LOUD,
466 (
467 "TxPowerTracking: [CCK] Swing Current Index: %d, Swing Base Index: %d\n",
468 pDM_Odm->RFCalibrateInfo.CCK_index,
469 pDM_Odm->BbSwingIdxCckBase
470 )
471 );
472
473
474 for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++) {
475 ODM_RT_TRACE(
476 pDM_Odm,
477 ODM_COMP_TX_PWR_TRACK,
478 ODM_DBG_LOUD,
479 (
480 "TxPowerTracking: [OFDM] Swing Current Index: %d, Swing Base Index[%c]: %d\n",
481 pDM_Odm->RFCalibrateInfo.OFDM_index[p],
482 (p == ODM_RF_PATH_A ? 'A' : 'B'),
483 pDM_Odm->BbSwingIdxOfdmBase[p]
484 )
485 );
486 }
487
488 if (
489 (pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A] != 0 ||
490 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B] != 0) &&
491 pDM_Odm->RFCalibrateInfo.TxPowerTrackControl
492 ) {
493
494
495 pDM_Odm->RFCalibrateInfo.bTxPowerChanged = true;
496
497
498
499
500
501 if (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue) {
502 ODM_RT_TRACE(
503 pDM_Odm,
504 ODM_COMP_TX_PWR_TRACK,
505 ODM_DBG_LOUD,
506 (
507 "Temperature Increasing(A): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
508 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A],
509 delta,
510 ThermalValue,
511 pHalData->EEPROMThermalMeter,
512 pDM_Odm->RFCalibrateInfo.ThermalValue
513 )
514 );
515
516 if (c.RfPathCount > 1)
517 ODM_RT_TRACE(
518 pDM_Odm,
519 ODM_COMP_TX_PWR_TRACK,
520 ODM_DBG_LOUD,
521 (
522 "Temperature Increasing(B): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
523 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B],
524 delta,
525 ThermalValue,
526 pHalData->EEPROMThermalMeter,
527 pDM_Odm->RFCalibrateInfo.ThermalValue
528 )
529 );
530
531 } else if (ThermalValue < pDM_Odm->RFCalibrateInfo.ThermalValue) {
532 ODM_RT_TRACE(
533 pDM_Odm,
534 ODM_COMP_TX_PWR_TRACK,
535 ODM_DBG_LOUD,
536 (
537 "Temperature Decreasing(A): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
538 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_A],
539 delta,
540 ThermalValue,
541 pHalData->EEPROMThermalMeter,
542 pDM_Odm->RFCalibrateInfo.ThermalValue
543 )
544 );
545
546 if (c.RfPathCount > 1)
547 ODM_RT_TRACE(
548 pDM_Odm,
549 ODM_COMP_TX_PWR_TRACK,
550 ODM_DBG_LOUD,
551 (
552 "Temperature Decreasing(B): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n",
553 pDM_Odm->RFCalibrateInfo.PowerIndexOffset[ODM_RF_PATH_B],
554 delta,
555 ThermalValue,
556 pHalData->EEPROMThermalMeter,
557 pDM_Odm->RFCalibrateInfo.ThermalValue
558 )
559 );
560
561 }
562
563 if (ThermalValue > pHalData->EEPROMThermalMeter) {
564 ODM_RT_TRACE(
565 pDM_Odm,
566 ODM_COMP_TX_PWR_TRACK,
567 ODM_DBG_LOUD,
568 (
569 "Temperature(%d) higher than PG value(%d)\n",
570 ThermalValue,
571 pHalData->EEPROMThermalMeter
572 )
573 );
574
575 ODM_RT_TRACE(
576 pDM_Odm,
577 ODM_COMP_TX_PWR_TRACK,
578 ODM_DBG_LOUD,
579 ("**********Enter POWER Tracking MIX_MODE**********\n")
580 );
581 for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
582 (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, 0);
583 } else {
584 ODM_RT_TRACE(
585 pDM_Odm,
586 ODM_COMP_TX_PWR_TRACK,
587 ODM_DBG_LOUD,
588 (
589 "Temperature(%d) lower than PG value(%d)\n",
590 ThermalValue,
591 pHalData->EEPROMThermalMeter
592 )
593 );
594
595 ODM_RT_TRACE(
596 pDM_Odm,
597 ODM_COMP_TX_PWR_TRACK,
598 ODM_DBG_LOUD,
599 ("**********Enter POWER Tracking MIX_MODE**********\n")
600 );
601 for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
602 (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, Indexforchannel);
603 }
604
605
606 pDM_Odm->BbSwingIdxCckBase = pDM_Odm->BbSwingIdxCck;
607 for (p = ODM_RF_PATH_A; p < c.RfPathCount; p++)
608 pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->BbSwingIdxOfdm[p];
609
610 ODM_RT_TRACE(
611 pDM_Odm,
612 ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
613 (
614 "pDM_Odm->RFCalibrateInfo.ThermalValue = %d ThermalValue = %d\n",
615 pDM_Odm->RFCalibrateInfo.ThermalValue,
616 ThermalValue
617 )
618 );
619
620
621 pDM_Odm->RFCalibrateInfo.ThermalValue = ThermalValue;
622 }
623
624 ODM_RT_TRACE(
625 pDM_Odm,
626 ODM_COMP_TX_PWR_TRACK,
627 ODM_DBG_LOUD,
628 ("<===ODM_TXPowerTrackingCallback_ThermalMeter\n")
629 );
630
631 pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
632}
633
634
635
636
637
638
639
640
641u8 ODM_GetRightChnlPlaceforIQK(u8 chnl)
642{
643 u8 channel_all[ODM_TARGET_CHNL_NUM_2G_5G] = {
644 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
645 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
646 60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
647 114, 116, 118, 120, 122, 124, 126, 128, 130, 132,
648 134, 136, 138, 140, 149, 151, 153, 155, 157, 159,
649 161, 163, 165
650 };
651 u8 place = chnl;
652
653
654 if (chnl > 14) {
655 for (place = 14; place < sizeof(channel_all); place++) {
656 if (channel_all[place] == chnl)
657 return place-13;
658 }
659 }
660 return 0;
661
662}
663