| .. | .. |
|---|
| 1 | | -/****************************************************************************** |
|---|
| 2 | | - * |
|---|
| 3 | | - * Copyright(c) 2009-2012 Realtek Corporation. |
|---|
| 4 | | - * |
|---|
| 5 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 6 | | - * under the terms of version 2 of the GNU General Public License as |
|---|
| 7 | | - * published by the Free Software Foundation. |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is distributed in the hope that it will be useful, but WITHOUT |
|---|
| 10 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|---|
| 11 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|---|
| 12 | | - * more details. |
|---|
| 13 | | - * |
|---|
| 14 | | - * The full GNU General Public License is included in this distribution in the |
|---|
| 15 | | - * file called LICENSE. |
|---|
| 16 | | - * |
|---|
| 17 | | - * Contact Information: |
|---|
| 18 | | - * wlanfae <wlanfae@realtek.com> |
|---|
| 19 | | - * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, |
|---|
| 20 | | - * Hsinchu 300, Taiwan. |
|---|
| 21 | | - * |
|---|
| 22 | | - * Larry Finger <Larry.Finger@lwfinger.net> |
|---|
| 23 | | - * |
|---|
| 24 | | - *****************************************************************************/ |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0 |
|---|
| 2 | +/* Copyright(c) 2009-2012 Realtek Corporation.*/ |
|---|
| 25 | 3 | |
|---|
| 26 | 4 | #include "../wifi.h" |
|---|
| 27 | 5 | #include "../base.h" |
|---|
| .. | .. |
|---|
| 216 | 194 | rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, 0x0000c000, 2); |
|---|
| 217 | 195 | rtl92d_release_cckandrw_pagea_ctl(hw, &flag); |
|---|
| 218 | 196 | } |
|---|
| 219 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 220 | | - "Cnt_Fast_Fsync_fail = %x, Cnt_SB_Search_fail = %x\n", |
|---|
| 221 | | - falsealm_cnt->cnt_fast_fsync_fail, |
|---|
| 222 | | - falsealm_cnt->cnt_sb_search_fail); |
|---|
| 223 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 224 | | - "Cnt_Parity_Fail = %x, Cnt_Rate_Illegal = %x, Cnt_Crc8_fail = %x, Cnt_Mcs_fail = %x\n", |
|---|
| 225 | | - falsealm_cnt->cnt_parity_fail, |
|---|
| 226 | | - falsealm_cnt->cnt_rate_illegal, |
|---|
| 227 | | - falsealm_cnt->cnt_crc8_fail, |
|---|
| 228 | | - falsealm_cnt->cnt_mcs_fail); |
|---|
| 229 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 230 | | - "Cnt_Ofdm_fail = %x, Cnt_Cck_fail = %x, Cnt_all = %x\n", |
|---|
| 231 | | - falsealm_cnt->cnt_ofdm_fail, |
|---|
| 232 | | - falsealm_cnt->cnt_cck_fail, |
|---|
| 233 | | - falsealm_cnt->cnt_all); |
|---|
| 197 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 198 | + "Cnt_Fast_Fsync_fail = %x, Cnt_SB_Search_fail = %x\n", |
|---|
| 199 | + falsealm_cnt->cnt_fast_fsync_fail, |
|---|
| 200 | + falsealm_cnt->cnt_sb_search_fail); |
|---|
| 201 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 202 | + "Cnt_Parity_Fail = %x, Cnt_Rate_Illegal = %x, Cnt_Crc8_fail = %x, Cnt_Mcs_fail = %x\n", |
|---|
| 203 | + falsealm_cnt->cnt_parity_fail, |
|---|
| 204 | + falsealm_cnt->cnt_rate_illegal, |
|---|
| 205 | + falsealm_cnt->cnt_crc8_fail, |
|---|
| 206 | + falsealm_cnt->cnt_mcs_fail); |
|---|
| 207 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 208 | + "Cnt_Ofdm_fail = %x, Cnt_Cck_fail = %x, Cnt_all = %x\n", |
|---|
| 209 | + falsealm_cnt->cnt_ofdm_fail, |
|---|
| 210 | + falsealm_cnt->cnt_cck_fail, |
|---|
| 211 | + falsealm_cnt->cnt_all); |
|---|
| 234 | 212 | } |
|---|
| 235 | 213 | |
|---|
| 236 | 214 | static void rtl92d_dm_find_minimum_rssi(struct ieee80211_hw *hw) |
|---|
| .. | .. |
|---|
| 243 | 221 | if ((mac->link_state < MAC80211_LINKED) && |
|---|
| 244 | 222 | (rtlpriv->dm.UNDEC_SM_PWDB == 0)) { |
|---|
| 245 | 223 | de_digtable->min_undec_pwdb_for_dm = 0; |
|---|
| 246 | | - RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 247 | | - "Not connected to any\n"); |
|---|
| 224 | + rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 225 | + "Not connected to any\n"); |
|---|
| 248 | 226 | } |
|---|
| 249 | 227 | if (mac->link_state >= MAC80211_LINKED) { |
|---|
| 250 | 228 | if (mac->opmode == NL80211_IFTYPE_AP || |
|---|
| 251 | 229 | mac->opmode == NL80211_IFTYPE_ADHOC) { |
|---|
| 252 | 230 | de_digtable->min_undec_pwdb_for_dm = |
|---|
| 253 | 231 | rtlpriv->dm.UNDEC_SM_PWDB; |
|---|
| 254 | | - RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 255 | | - "AP Client PWDB = 0x%lx\n", |
|---|
| 232 | + rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 233 | + "AP Client PWDB = 0x%lx\n", |
|---|
| 256 | 234 | rtlpriv->dm.UNDEC_SM_PWDB); |
|---|
| 257 | 235 | } else { |
|---|
| 258 | 236 | de_digtable->min_undec_pwdb_for_dm = |
|---|
| 259 | 237 | rtlpriv->dm.undec_sm_pwdb; |
|---|
| 260 | | - RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 261 | | - "STA Default Port PWDB = 0x%x\n", |
|---|
| 262 | | - de_digtable->min_undec_pwdb_for_dm); |
|---|
| 238 | + rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 239 | + "STA Default Port PWDB = 0x%x\n", |
|---|
| 240 | + de_digtable->min_undec_pwdb_for_dm); |
|---|
| 263 | 241 | } |
|---|
| 264 | 242 | } else { |
|---|
| 265 | 243 | de_digtable->min_undec_pwdb_for_dm = rtlpriv->dm.UNDEC_SM_PWDB; |
|---|
| 266 | | - RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 267 | | - "AP Ext Port or disconnect PWDB = 0x%x\n", |
|---|
| 268 | | - de_digtable->min_undec_pwdb_for_dm); |
|---|
| 244 | + rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
|---|
| 245 | + "AP Ext Port or disconnect PWDB = 0x%x\n", |
|---|
| 246 | + de_digtable->min_undec_pwdb_for_dm); |
|---|
| 269 | 247 | } |
|---|
| 270 | 248 | |
|---|
| 271 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n", |
|---|
| 272 | | - de_digtable->min_undec_pwdb_for_dm); |
|---|
| 249 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n", |
|---|
| 250 | + de_digtable->min_undec_pwdb_for_dm); |
|---|
| 273 | 251 | } |
|---|
| 274 | 252 | |
|---|
| 275 | 253 | static void rtl92d_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw) |
|---|
| .. | .. |
|---|
| 309 | 287 | } |
|---|
| 310 | 288 | de_digtable->pre_cck_pd_state = de_digtable->cur_cck_pd_state; |
|---|
| 311 | 289 | } |
|---|
| 312 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "CurSTAConnectState=%s\n", |
|---|
| 313 | | - de_digtable->cursta_cstate == DIG_STA_CONNECT ? |
|---|
| 314 | | - "DIG_STA_CONNECT " : "DIG_STA_DISCONNECT"); |
|---|
| 315 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "CCKPDStage=%s\n", |
|---|
| 316 | | - de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI ? |
|---|
| 317 | | - "Low RSSI " : "High RSSI "); |
|---|
| 318 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "is92d single phy =%x\n", |
|---|
| 319 | | - IS_92D_SINGLEPHY(rtlpriv->rtlhal.version)); |
|---|
| 290 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "CurSTAConnectState=%s\n", |
|---|
| 291 | + de_digtable->cursta_cstate == DIG_STA_CONNECT ? |
|---|
| 292 | + "DIG_STA_CONNECT " : "DIG_STA_DISCONNECT"); |
|---|
| 293 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "CCKPDStage=%s\n", |
|---|
| 294 | + de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI ? |
|---|
| 295 | + "Low RSSI " : "High RSSI "); |
|---|
| 296 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "is92d single phy =%x\n", |
|---|
| 297 | + IS_92D_SINGLEPHY(rtlpriv->rtlhal.version)); |
|---|
| 320 | 298 | |
|---|
| 321 | 299 | } |
|---|
| 322 | 300 | |
|---|
| .. | .. |
|---|
| 325 | 303 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
|---|
| 326 | 304 | struct dig_t *de_digtable = &rtlpriv->dm_digtable; |
|---|
| 327 | 305 | |
|---|
| 328 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 329 | | - "cur_igvalue = 0x%x, pre_igvalue = 0x%x, back_val = %d\n", |
|---|
| 330 | | - de_digtable->cur_igvalue, de_digtable->pre_igvalue, |
|---|
| 331 | | - de_digtable->back_val); |
|---|
| 306 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 307 | + "cur_igvalue = 0x%x, pre_igvalue = 0x%x, back_val = %d\n", |
|---|
| 308 | + de_digtable->cur_igvalue, de_digtable->pre_igvalue, |
|---|
| 309 | + de_digtable->back_val); |
|---|
| 332 | 310 | if (de_digtable->dig_enable_flag == false) { |
|---|
| 333 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "DIG is disabled\n"); |
|---|
| 311 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "DIG is disabled\n"); |
|---|
| 334 | 312 | de_digtable->pre_igvalue = 0x17; |
|---|
| 335 | 313 | return; |
|---|
| 336 | 314 | } |
|---|
| .. | .. |
|---|
| 349 | 327 | |
|---|
| 350 | 328 | if ((rtlpriv->mac80211.link_state >= MAC80211_LINKED) && |
|---|
| 351 | 329 | (rtlpriv->mac80211.vendor == PEER_CISCO)) { |
|---|
| 352 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "IOT_PEER = CISCO\n"); |
|---|
| 330 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "IOT_PEER = CISCO\n"); |
|---|
| 353 | 331 | if (de_digtable->last_min_undec_pwdb_for_dm >= 50 |
|---|
| 354 | 332 | && de_digtable->min_undec_pwdb_for_dm < 50) { |
|---|
| 355 | 333 | rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x00); |
|---|
| 356 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 357 | | - "Early Mode Off\n"); |
|---|
| 334 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 335 | + "Early Mode Off\n"); |
|---|
| 358 | 336 | } else if (de_digtable->last_min_undec_pwdb_for_dm <= 55 && |
|---|
| 359 | 337 | de_digtable->min_undec_pwdb_for_dm > 55) { |
|---|
| 360 | 338 | rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x0f); |
|---|
| 361 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 362 | | - "Early Mode On\n"); |
|---|
| 339 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 340 | + "Early Mode On\n"); |
|---|
| 363 | 341 | } |
|---|
| 364 | 342 | } else if (!(rtl_read_byte(rtlpriv, REG_EARLY_MODE_CONTROL) & 0xf)) { |
|---|
| 365 | 343 | rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x0f); |
|---|
| 366 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "Early Mode On\n"); |
|---|
| 344 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "Early Mode On\n"); |
|---|
| 367 | 345 | } |
|---|
| 368 | 346 | } |
|---|
| 369 | 347 | |
|---|
| .. | .. |
|---|
| 374 | 352 | u8 value_igi = de_digtable->cur_igvalue; |
|---|
| 375 | 353 | struct false_alarm_statistics *falsealm_cnt = &(rtlpriv->falsealm_cnt); |
|---|
| 376 | 354 | |
|---|
| 377 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "==>\n"); |
|---|
| 355 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "==>\n"); |
|---|
| 378 | 356 | if (rtlpriv->rtlhal.earlymode_enable) { |
|---|
| 379 | 357 | rtl92d_early_mode_enabled(rtlpriv); |
|---|
| 380 | 358 | de_digtable->last_min_undec_pwdb_for_dm = |
|---|
| .. | .. |
|---|
| 393 | 371 | /* Not STA mode return tmp */ |
|---|
| 394 | 372 | if (rtlpriv->mac80211.opmode != NL80211_IFTYPE_STATION) |
|---|
| 395 | 373 | return; |
|---|
| 396 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "progress\n"); |
|---|
| 374 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "progress\n"); |
|---|
| 397 | 375 | /* Decide the current status and if modify initial gain or not */ |
|---|
| 398 | 376 | if (rtlpriv->mac80211.link_state >= MAC80211_LINKED) |
|---|
| 399 | 377 | de_digtable->cursta_cstate = DIG_STA_CONNECT; |
|---|
| .. | .. |
|---|
| 409 | 387 | value_igi++; |
|---|
| 410 | 388 | else if (falsealm_cnt->cnt_all >= DM_DIG_FA_TH2) |
|---|
| 411 | 389 | value_igi += 2; |
|---|
| 412 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 413 | | - "dm_DIG() Before: large_fa_hit=%d, forbidden_igi=%x\n", |
|---|
| 414 | | - de_digtable->large_fa_hit, de_digtable->forbidden_igi); |
|---|
| 415 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 416 | | - "dm_DIG() Before: Recover_cnt=%d, rx_gain_min=%x\n", |
|---|
| 417 | | - de_digtable->recover_cnt, de_digtable->rx_gain_min); |
|---|
| 390 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 391 | + "dm_DIG() Before: large_fa_hit=%d, forbidden_igi=%x\n", |
|---|
| 392 | + de_digtable->large_fa_hit, de_digtable->forbidden_igi); |
|---|
| 393 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 394 | + "dm_DIG() Before: Recover_cnt=%d, rx_gain_min=%x\n", |
|---|
| 395 | + de_digtable->recover_cnt, de_digtable->rx_gain_min); |
|---|
| 418 | 396 | |
|---|
| 419 | 397 | /* deal with abnormally large false alarm */ |
|---|
| 420 | 398 | if (falsealm_cnt->cnt_all > 10000) { |
|---|
| 421 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 422 | | - "dm_DIG(): Abnormally false alarm case\n"); |
|---|
| 399 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 400 | + "dm_DIG(): Abnormally false alarm case\n"); |
|---|
| 423 | 401 | |
|---|
| 424 | 402 | de_digtable->large_fa_hit++; |
|---|
| 425 | 403 | if (de_digtable->forbidden_igi < de_digtable->cur_igvalue) { |
|---|
| .. | .. |
|---|
| 457 | 435 | } |
|---|
| 458 | 436 | } |
|---|
| 459 | 437 | } |
|---|
| 460 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 461 | | - "dm_DIG() After: large_fa_hit=%d, forbidden_igi=%x\n", |
|---|
| 462 | | - de_digtable->large_fa_hit, de_digtable->forbidden_igi); |
|---|
| 463 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 464 | | - "dm_DIG() After: recover_cnt=%d, rx_gain_min=%x\n", |
|---|
| 465 | | - de_digtable->recover_cnt, de_digtable->rx_gain_min); |
|---|
| 438 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 439 | + "dm_DIG() After: large_fa_hit=%d, forbidden_igi=%x\n", |
|---|
| 440 | + de_digtable->large_fa_hit, de_digtable->forbidden_igi); |
|---|
| 441 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, |
|---|
| 442 | + "dm_DIG() After: recover_cnt=%d, rx_gain_min=%x\n", |
|---|
| 443 | + de_digtable->recover_cnt, de_digtable->rx_gain_min); |
|---|
| 466 | 444 | |
|---|
| 467 | 445 | if (value_igi > DM_DIG_MAX) |
|---|
| 468 | 446 | value_igi = DM_DIG_MAX; |
|---|
| .. | .. |
|---|
| 472 | 450 | rtl92d_dm_write_dig(hw); |
|---|
| 473 | 451 | if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) |
|---|
| 474 | 452 | rtl92d_dm_cck_packet_detection_thresh(hw); |
|---|
| 475 | | - RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "<<==\n"); |
|---|
| 453 | + rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "<<==\n"); |
|---|
| 476 | 454 | } |
|---|
| 477 | 455 | |
|---|
| 478 | 456 | static void rtl92d_dm_init_dynamic_txpower(struct ieee80211_hw *hw) |
|---|
| .. | .. |
|---|
| 499 | 477 | } |
|---|
| 500 | 478 | if ((mac->link_state < MAC80211_LINKED) && |
|---|
| 501 | 479 | (rtlpriv->dm.UNDEC_SM_PWDB == 0)) { |
|---|
| 502 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE, |
|---|
| 503 | | - "Not connected to any\n"); |
|---|
| 480 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_TRACE, |
|---|
| 481 | + "Not connected to any\n"); |
|---|
| 504 | 482 | rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL; |
|---|
| 505 | 483 | rtlpriv->dm.last_dtp_lvl = TXHIGHPWRLEVEL_NORMAL; |
|---|
| 506 | 484 | return; |
|---|
| .. | .. |
|---|
| 509 | 487 | if (mac->opmode == NL80211_IFTYPE_ADHOC) { |
|---|
| 510 | 488 | undec_sm_pwdb = |
|---|
| 511 | 489 | rtlpriv->dm.UNDEC_SM_PWDB; |
|---|
| 512 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 513 | | - "IBSS Client PWDB = 0x%lx\n", |
|---|
| 514 | | - undec_sm_pwdb); |
|---|
| 490 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 491 | + "IBSS Client PWDB = 0x%lx\n", |
|---|
| 492 | + undec_sm_pwdb); |
|---|
| 515 | 493 | } else { |
|---|
| 516 | 494 | undec_sm_pwdb = |
|---|
| 517 | 495 | rtlpriv->dm.undec_sm_pwdb; |
|---|
| 518 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 519 | | - "STA Default Port PWDB = 0x%lx\n", |
|---|
| 520 | | - undec_sm_pwdb); |
|---|
| 496 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 497 | + "STA Default Port PWDB = 0x%lx\n", |
|---|
| 498 | + undec_sm_pwdb); |
|---|
| 521 | 499 | } |
|---|
| 522 | 500 | } else { |
|---|
| 523 | 501 | undec_sm_pwdb = |
|---|
| 524 | 502 | rtlpriv->dm.UNDEC_SM_PWDB; |
|---|
| 525 | 503 | |
|---|
| 526 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 527 | | - "AP Ext Port PWDB = 0x%lx\n", |
|---|
| 528 | | - undec_sm_pwdb); |
|---|
| 504 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 505 | + "AP Ext Port PWDB = 0x%lx\n", |
|---|
| 506 | + undec_sm_pwdb); |
|---|
| 529 | 507 | } |
|---|
| 530 | 508 | if (rtlhal->current_bandtype == BAND_ON_5G) { |
|---|
| 531 | 509 | if (undec_sm_pwdb >= 0x33) { |
|---|
| 532 | 510 | rtlpriv->dm.dynamic_txhighpower_lvl = |
|---|
| 533 | 511 | TXHIGHPWRLEVEL_LEVEL2; |
|---|
| 534 | | - RT_TRACE(rtlpriv, COMP_HIPWR, DBG_LOUD, |
|---|
| 535 | | - "5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"); |
|---|
| 512 | + rtl_dbg(rtlpriv, COMP_HIPWR, DBG_LOUD, |
|---|
| 513 | + "5G:TxHighPwrLevel_Level2 (TxPwr=0x0)\n"); |
|---|
| 536 | 514 | } else if ((undec_sm_pwdb < 0x33) |
|---|
| 537 | 515 | && (undec_sm_pwdb >= 0x2b)) { |
|---|
| 538 | 516 | rtlpriv->dm.dynamic_txhighpower_lvl = |
|---|
| 539 | 517 | TXHIGHPWRLEVEL_LEVEL1; |
|---|
| 540 | | - RT_TRACE(rtlpriv, COMP_HIPWR, DBG_LOUD, |
|---|
| 541 | | - "5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"); |
|---|
| 518 | + rtl_dbg(rtlpriv, COMP_HIPWR, DBG_LOUD, |
|---|
| 519 | + "5G:TxHighPwrLevel_Level1 (TxPwr=0x10)\n"); |
|---|
| 542 | 520 | } else if (undec_sm_pwdb < 0x2b) { |
|---|
| 543 | 521 | rtlpriv->dm.dynamic_txhighpower_lvl = |
|---|
| 544 | 522 | TXHIGHPWRLEVEL_NORMAL; |
|---|
| 545 | | - RT_TRACE(rtlpriv, COMP_HIPWR, DBG_LOUD, |
|---|
| 546 | | - "5G:TxHighPwrLevel_Normal\n"); |
|---|
| 523 | + rtl_dbg(rtlpriv, COMP_HIPWR, DBG_LOUD, |
|---|
| 524 | + "5G:TxHighPwrLevel_Normal\n"); |
|---|
| 547 | 525 | } |
|---|
| 548 | 526 | } else { |
|---|
| 549 | 527 | if (undec_sm_pwdb >= |
|---|
| 550 | 528 | TX_POWER_NEAR_FIELD_THRESH_LVL2) { |
|---|
| 551 | 529 | rtlpriv->dm.dynamic_txhighpower_lvl = |
|---|
| 552 | 530 | TXHIGHPWRLEVEL_LEVEL2; |
|---|
| 553 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 554 | | - "TXHIGHPWRLEVEL_LEVEL1 (TxPwr=0x0)\n"); |
|---|
| 531 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 532 | + "TXHIGHPWRLEVEL_LEVEL1 (TxPwr=0x0)\n"); |
|---|
| 555 | 533 | } else |
|---|
| 556 | 534 | if ((undec_sm_pwdb < |
|---|
| 557 | 535 | (TX_POWER_NEAR_FIELD_THRESH_LVL2 - 3)) |
|---|
| .. | .. |
|---|
| 560 | 538 | |
|---|
| 561 | 539 | rtlpriv->dm.dynamic_txhighpower_lvl = |
|---|
| 562 | 540 | TXHIGHPWRLEVEL_LEVEL1; |
|---|
| 563 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 564 | | - "TXHIGHPWRLEVEL_LEVEL1 (TxPwr=0x10)\n"); |
|---|
| 541 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 542 | + "TXHIGHPWRLEVEL_LEVEL1 (TxPwr=0x10)\n"); |
|---|
| 565 | 543 | } else if (undec_sm_pwdb < |
|---|
| 566 | 544 | (TX_POWER_NEAR_FIELD_THRESH_LVL1 - 5)) { |
|---|
| 567 | 545 | rtlpriv->dm.dynamic_txhighpower_lvl = |
|---|
| 568 | 546 | TXHIGHPWRLEVEL_NORMAL; |
|---|
| 569 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 570 | | - "TXHIGHPWRLEVEL_NORMAL\n"); |
|---|
| 547 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 548 | + "TXHIGHPWRLEVEL_NORMAL\n"); |
|---|
| 571 | 549 | } |
|---|
| 572 | 550 | } |
|---|
| 573 | 551 | if ((rtlpriv->dm.dynamic_txhighpower_lvl != rtlpriv->dm.last_dtp_lvl)) { |
|---|
| 574 | | - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 575 | | - "PHY_SetTxPowerLevel8192S() Channel = %d\n", |
|---|
| 576 | | - rtlphy->current_channel); |
|---|
| 552 | + rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, |
|---|
| 553 | + "PHY_SetTxPowerLevel8192S() Channel = %d\n", |
|---|
| 554 | + rtlphy->current_channel); |
|---|
| 577 | 555 | rtl92d_phy_set_txpower_level(hw, rtlphy->current_channel); |
|---|
| 578 | 556 | } |
|---|
| 579 | 557 | rtlpriv->dm.last_dtp_lvl = rtlpriv->dm.dynamic_txhighpower_lvl; |
|---|
| .. | .. |
|---|
| 688 | 666 | |
|---|
| 689 | 667 | u4tmp = (index_mapping[(rtlpriv->efuse.eeprom_thermalmeter - |
|---|
| 690 | 668 | rtlpriv->dm.thermalvalue_rxgain)]) << 12; |
|---|
| 691 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 692 | | - "===> Rx Gain %x\n", u4tmp); |
|---|
| 669 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 670 | + "===> Rx Gain %x\n", u4tmp); |
|---|
| 693 | 671 | for (i = RF90_PATH_A; i < rtlpriv->phy.num_total_rfpath; i++) |
|---|
| 694 | 672 | rtl_set_rfreg(hw, i, 0x3C, RFREG_OFFSET_MASK, |
|---|
| 695 | 673 | (rtlpriv->phy.reg_rf3c[i] & (~(0xF000))) | u4tmp); |
|---|
| .. | .. |
|---|
| 702 | 680 | int i; |
|---|
| 703 | 681 | unsigned long flag = 0; |
|---|
| 704 | 682 | long temp_cck; |
|---|
| 683 | + const u8 *cckswing; |
|---|
| 705 | 684 | |
|---|
| 706 | 685 | /* Query CCK default setting From 0xa24 */ |
|---|
| 707 | 686 | rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag); |
|---|
| .. | .. |
|---|
| 709 | 688 | MASKDWORD) & MASKCCK; |
|---|
| 710 | 689 | rtl92d_release_cckandrw_pagea_ctl(hw, &flag); |
|---|
| 711 | 690 | for (i = 0; i < CCK_TABLE_LENGTH; i++) { |
|---|
| 712 | | - if (rtlpriv->dm.cck_inch14) { |
|---|
| 713 | | - if (!memcmp((void *)&temp_cck, |
|---|
| 714 | | - (void *)&cckswing_table_ch14[i][2], 4)) { |
|---|
| 715 | | - *cck_index_old = (u8) i; |
|---|
| 716 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 717 | | - "Initial reg0x%x = 0x%lx, cck_index=0x%x, ch 14 %d\n", |
|---|
| 718 | | - RCCK0_TXFILTER2, temp_cck, |
|---|
| 719 | | - *cck_index_old, |
|---|
| 720 | | - rtlpriv->dm.cck_inch14); |
|---|
| 721 | | - break; |
|---|
| 722 | | - } |
|---|
| 723 | | - } else { |
|---|
| 724 | | - if (!memcmp((void *) &temp_cck, |
|---|
| 725 | | - &cckswing_table_ch1ch13[i][2], 4)) { |
|---|
| 726 | | - *cck_index_old = (u8) i; |
|---|
| 727 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 728 | | - "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch14 %d\n", |
|---|
| 729 | | - RCCK0_TXFILTER2, temp_cck, |
|---|
| 730 | | - *cck_index_old, |
|---|
| 731 | | - rtlpriv->dm.cck_inch14); |
|---|
| 732 | | - break; |
|---|
| 733 | | - } |
|---|
| 691 | + if (rtlpriv->dm.cck_inch14) |
|---|
| 692 | + cckswing = &cckswing_table_ch14[i][2]; |
|---|
| 693 | + else |
|---|
| 694 | + cckswing = &cckswing_table_ch1ch13[i][2]; |
|---|
| 695 | + |
|---|
| 696 | + if (temp_cck == le32_to_cpu(*((__le32 *)cckswing))) { |
|---|
| 697 | + *cck_index_old = (u8)i; |
|---|
| 698 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 699 | + "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch14 %d\n", |
|---|
| 700 | + RCCK0_TXFILTER2, temp_cck, |
|---|
| 701 | + *cck_index_old, |
|---|
| 702 | + rtlpriv->dm.cck_inch14); |
|---|
| 703 | + break; |
|---|
| 734 | 704 | } |
|---|
| 735 | 705 | } |
|---|
| 736 | 706 | *temp_cckg = temp_cck; |
|---|
| .. | .. |
|---|
| 740 | 710 | bool *internal_pa, u8 thermalvalue, u8 delta, |
|---|
| 741 | 711 | u8 rf, struct rtl_efuse *rtlefuse, |
|---|
| 742 | 712 | struct rtl_priv *rtlpriv, struct rtl_phy *rtlphy, |
|---|
| 743 | | - u8 index_mapping[5][INDEX_MAPPING_NUM], |
|---|
| 744 | | - u8 index_mapping_pa[8][INDEX_MAPPING_NUM]) |
|---|
| 713 | + const u8 index_mapping[5][INDEX_MAPPING_NUM], |
|---|
| 714 | + const u8 index_mapping_pa[8][INDEX_MAPPING_NUM]) |
|---|
| 745 | 715 | { |
|---|
| 746 | 716 | int i; |
|---|
| 747 | 717 | u8 index; |
|---|
| .. | .. |
|---|
| 809 | 779 | bool internal_pa = false; |
|---|
| 810 | 780 | long ele_a = 0, ele_d, temp_cck, val_x, value32; |
|---|
| 811 | 781 | long val_y, ele_c = 0; |
|---|
| 812 | | - u8 ofdm_index[3]; |
|---|
| 782 | + u8 ofdm_index[2]; |
|---|
| 813 | 783 | s8 cck_index = 0; |
|---|
| 814 | | - u8 ofdm_index_old[3] = {0, 0, 0}; |
|---|
| 784 | + u8 ofdm_index_old[2] = {0, 0}; |
|---|
| 815 | 785 | s8 cck_index_old = 0; |
|---|
| 816 | 786 | u8 index; |
|---|
| 817 | 787 | int i; |
|---|
| .. | .. |
|---|
| 819 | 789 | u8 ofdm_min_index = 6, ofdm_min_index_internal_pa = 3, rf; |
|---|
| 820 | 790 | u8 indexforchannel = |
|---|
| 821 | 791 | rtl92d_get_rightchnlplace_for_iqk(rtlphy->current_channel); |
|---|
| 822 | | - u8 index_mapping[5][INDEX_MAPPING_NUM] = { |
|---|
| 792 | + static const u8 index_mapping[5][INDEX_MAPPING_NUM] = { |
|---|
| 823 | 793 | /* 5G, path A/MAC 0, decrease power */ |
|---|
| 824 | 794 | {0, 1, 3, 6, 8, 9, 11, 13, 14, 16, 17, 18, 18}, |
|---|
| 825 | 795 | /* 5G, path A/MAC 0, increase power */ |
|---|
| .. | .. |
|---|
| 831 | 801 | /* 2.4G, for decreas power */ |
|---|
| 832 | 802 | {0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 10}, |
|---|
| 833 | 803 | }; |
|---|
| 834 | | - u8 index_mapping_internal_pa[8][INDEX_MAPPING_NUM] = { |
|---|
| 804 | + static const u8 index_mapping_internal_pa[8][INDEX_MAPPING_NUM] = { |
|---|
| 835 | 805 | /* 5G, path A/MAC 0, ch36-64, decrease power */ |
|---|
| 836 | 806 | {0, 1, 2, 4, 6, 7, 9, 11, 12, 14, 15, 16, 16}, |
|---|
| 837 | 807 | /* 5G, path A/MAC 0, ch36-64, increase power */ |
|---|
| .. | .. |
|---|
| 851 | 821 | }; |
|---|
| 852 | 822 | |
|---|
| 853 | 823 | rtlpriv->dm.txpower_trackinginit = true; |
|---|
| 854 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "\n"); |
|---|
| 824 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "\n"); |
|---|
| 855 | 825 | thermalvalue = (u8) rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER, 0xf800); |
|---|
| 856 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 857 | | - "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x\n", |
|---|
| 858 | | - thermalvalue, |
|---|
| 859 | | - rtlpriv->dm.thermalvalue, rtlefuse->eeprom_thermalmeter); |
|---|
| 826 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 827 | + "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x\n", |
|---|
| 828 | + thermalvalue, |
|---|
| 829 | + rtlpriv->dm.thermalvalue, rtlefuse->eeprom_thermalmeter); |
|---|
| 860 | 830 | rtl92d_phy_ap_calibrate(hw, (thermalvalue - |
|---|
| 861 | 831 | rtlefuse->eeprom_thermalmeter)); |
|---|
| 832 | + |
|---|
| 833 | + if (!thermalvalue) |
|---|
| 834 | + goto exit; |
|---|
| 835 | + |
|---|
| 862 | 836 | if (is2t) |
|---|
| 863 | 837 | rf = 2; |
|---|
| 864 | 838 | else |
|---|
| 865 | 839 | rf = 1; |
|---|
| 866 | | - if (thermalvalue) { |
|---|
| 867 | | - ele_d = rtl_get_bbreg(hw, ROFDM0_XATxIQIMBALANCE, |
|---|
| 840 | + |
|---|
| 841 | + if (rtlpriv->dm.thermalvalue && !rtlhal->reloadtxpowerindex) |
|---|
| 842 | + goto old_index_done; |
|---|
| 843 | + |
|---|
| 844 | + ele_d = rtl_get_bbreg(hw, ROFDM0_XATXIQIMBALANCE, MASKDWORD) & MASKOFDM_D; |
|---|
| 845 | + for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) { |
|---|
| 846 | + if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) { |
|---|
| 847 | + ofdm_index_old[0] = (u8)i; |
|---|
| 848 | + |
|---|
| 849 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 850 | + "Initial pathA ele_d reg0x%x = 0x%lx, ofdm_index=0x%x\n", |
|---|
| 851 | + ROFDM0_XATXIQIMBALANCE, |
|---|
| 852 | + ele_d, ofdm_index_old[0]); |
|---|
| 853 | + break; |
|---|
| 854 | + } |
|---|
| 855 | + } |
|---|
| 856 | + if (is2t) { |
|---|
| 857 | + ele_d = rtl_get_bbreg(hw, ROFDM0_XBTXIQIMBALANCE, |
|---|
| 868 | 858 | MASKDWORD) & MASKOFDM_D; |
|---|
| 869 | 859 | for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) { |
|---|
| 870 | | - if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) { |
|---|
| 871 | | - ofdm_index_old[0] = (u8) i; |
|---|
| 872 | | - |
|---|
| 873 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 874 | | - "Initial pathA ele_d reg0x%x = 0x%lx, ofdm_index=0x%x\n", |
|---|
| 875 | | - ROFDM0_XATxIQIMBALANCE, |
|---|
| 876 | | - ele_d, ofdm_index_old[0]); |
|---|
| 860 | + if (ele_d == |
|---|
| 861 | + (ofdmswing_table[i] & MASKOFDM_D)) { |
|---|
| 862 | + ofdm_index_old[1] = (u8)i; |
|---|
| 863 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, |
|---|
| 864 | + DBG_LOUD, |
|---|
| 865 | + "Initial pathB ele_d reg 0x%x = 0x%lx, ofdm_index = 0x%x\n", |
|---|
| 866 | + ROFDM0_XBTXIQIMBALANCE, ele_d, |
|---|
| 867 | + ofdm_index_old[1]); |
|---|
| 877 | 868 | break; |
|---|
| 878 | 869 | } |
|---|
| 879 | 870 | } |
|---|
| 880 | | - if (is2t) { |
|---|
| 881 | | - ele_d = rtl_get_bbreg(hw, ROFDM0_XBTxIQIMBALANCE, |
|---|
| 882 | | - MASKDWORD) & MASKOFDM_D; |
|---|
| 883 | | - for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) { |
|---|
| 884 | | - if (ele_d == |
|---|
| 885 | | - (ofdmswing_table[i] & MASKOFDM_D)) { |
|---|
| 886 | | - ofdm_index_old[1] = (u8) i; |
|---|
| 887 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, |
|---|
| 888 | | - DBG_LOUD, |
|---|
| 889 | | - "Initial pathB ele_d reg 0x%x = 0x%lx, ofdm_index = 0x%x\n", |
|---|
| 890 | | - ROFDM0_XBTxIQIMBALANCE, ele_d, |
|---|
| 891 | | - ofdm_index_old[1]); |
|---|
| 892 | | - break; |
|---|
| 893 | | - } |
|---|
| 894 | | - } |
|---|
| 895 | | - } |
|---|
| 896 | | - if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 897 | | - rtl92d_bandtype_2_4G(hw, &temp_cck, &cck_index_old); |
|---|
| 898 | | - } else { |
|---|
| 899 | | - temp_cck = 0x090e1317; |
|---|
| 900 | | - cck_index_old = 12; |
|---|
| 901 | | - } |
|---|
| 902 | | - |
|---|
| 903 | | - if (!rtlpriv->dm.thermalvalue) { |
|---|
| 904 | | - rtlpriv->dm.thermalvalue = |
|---|
| 905 | | - rtlefuse->eeprom_thermalmeter; |
|---|
| 906 | | - rtlpriv->dm.thermalvalue_lck = thermalvalue; |
|---|
| 907 | | - rtlpriv->dm.thermalvalue_iqk = thermalvalue; |
|---|
| 908 | | - rtlpriv->dm.thermalvalue_rxgain = |
|---|
| 909 | | - rtlefuse->eeprom_thermalmeter; |
|---|
| 910 | | - for (i = 0; i < rf; i++) |
|---|
| 911 | | - rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i]; |
|---|
| 912 | | - rtlpriv->dm.cck_index = cck_index_old; |
|---|
| 913 | | - } |
|---|
| 914 | | - if (rtlhal->reloadtxpowerindex) { |
|---|
| 915 | | - for (i = 0; i < rf; i++) |
|---|
| 916 | | - rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i]; |
|---|
| 917 | | - rtlpriv->dm.cck_index = cck_index_old; |
|---|
| 918 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 919 | | - "reload ofdm index for band switch\n"); |
|---|
| 920 | | - } |
|---|
| 921 | | - rtlpriv->dm.thermalvalue_avg |
|---|
| 922 | | - [rtlpriv->dm.thermalvalue_avg_index] = thermalvalue; |
|---|
| 923 | | - rtlpriv->dm.thermalvalue_avg_index++; |
|---|
| 924 | | - if (rtlpriv->dm.thermalvalue_avg_index == AVG_THERMAL_NUM) |
|---|
| 925 | | - rtlpriv->dm.thermalvalue_avg_index = 0; |
|---|
| 926 | | - for (i = 0; i < AVG_THERMAL_NUM; i++) { |
|---|
| 927 | | - if (rtlpriv->dm.thermalvalue_avg[i]) { |
|---|
| 928 | | - thermalvalue_avg += |
|---|
| 929 | | - rtlpriv->dm.thermalvalue_avg[i]; |
|---|
| 930 | | - thermalvalue_avg_count++; |
|---|
| 931 | | - } |
|---|
| 932 | | - } |
|---|
| 933 | | - if (thermalvalue_avg_count) |
|---|
| 934 | | - thermalvalue = (u8) (thermalvalue_avg / |
|---|
| 935 | | - thermalvalue_avg_count); |
|---|
| 936 | | - if (rtlhal->reloadtxpowerindex) { |
|---|
| 937 | | - delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? |
|---|
| 938 | | - (thermalvalue - rtlefuse->eeprom_thermalmeter) : |
|---|
| 939 | | - (rtlefuse->eeprom_thermalmeter - thermalvalue); |
|---|
| 940 | | - rtlhal->reloadtxpowerindex = false; |
|---|
| 941 | | - rtlpriv->dm.done_txpower = false; |
|---|
| 942 | | - } else if (rtlpriv->dm.done_txpower) { |
|---|
| 943 | | - delta = (thermalvalue > rtlpriv->dm.thermalvalue) ? |
|---|
| 944 | | - (thermalvalue - rtlpriv->dm.thermalvalue) : |
|---|
| 945 | | - (rtlpriv->dm.thermalvalue - thermalvalue); |
|---|
| 946 | | - } else { |
|---|
| 947 | | - delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? |
|---|
| 948 | | - (thermalvalue - rtlefuse->eeprom_thermalmeter) : |
|---|
| 949 | | - (rtlefuse->eeprom_thermalmeter - thermalvalue); |
|---|
| 950 | | - } |
|---|
| 951 | | - delta_lck = (thermalvalue > rtlpriv->dm.thermalvalue_lck) ? |
|---|
| 952 | | - (thermalvalue - rtlpriv->dm.thermalvalue_lck) : |
|---|
| 953 | | - (rtlpriv->dm.thermalvalue_lck - thermalvalue); |
|---|
| 954 | | - delta_iqk = (thermalvalue > rtlpriv->dm.thermalvalue_iqk) ? |
|---|
| 955 | | - (thermalvalue - rtlpriv->dm.thermalvalue_iqk) : |
|---|
| 956 | | - (rtlpriv->dm.thermalvalue_iqk - thermalvalue); |
|---|
| 957 | | - delta_rxgain = |
|---|
| 958 | | - (thermalvalue > rtlpriv->dm.thermalvalue_rxgain) ? |
|---|
| 959 | | - (thermalvalue - rtlpriv->dm.thermalvalue_rxgain) : |
|---|
| 960 | | - (rtlpriv->dm.thermalvalue_rxgain - thermalvalue); |
|---|
| 961 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 962 | | - "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x delta 0x%x delta_lck 0x%x delta_iqk 0x%x\n", |
|---|
| 963 | | - thermalvalue, rtlpriv->dm.thermalvalue, |
|---|
| 964 | | - rtlefuse->eeprom_thermalmeter, delta, delta_lck, |
|---|
| 965 | | - delta_iqk); |
|---|
| 966 | | - if ((delta_lck > rtlefuse->delta_lck) && |
|---|
| 967 | | - (rtlefuse->delta_lck != 0)) { |
|---|
| 968 | | - rtlpriv->dm.thermalvalue_lck = thermalvalue; |
|---|
| 969 | | - rtl92d_phy_lc_calibrate(hw); |
|---|
| 970 | | - } |
|---|
| 971 | | - if (delta > 0 && rtlpriv->dm.txpower_track_control) { |
|---|
| 972 | | - rtlpriv->dm.done_txpower = true; |
|---|
| 973 | | - delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? |
|---|
| 974 | | - (thermalvalue - rtlefuse->eeprom_thermalmeter) : |
|---|
| 975 | | - (rtlefuse->eeprom_thermalmeter - thermalvalue); |
|---|
| 976 | | - if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 977 | | - offset = 4; |
|---|
| 978 | | - if (delta > INDEX_MAPPING_NUM - 1) |
|---|
| 979 | | - index = index_mapping[offset] |
|---|
| 980 | | - [INDEX_MAPPING_NUM - 1]; |
|---|
| 981 | | - else |
|---|
| 982 | | - index = index_mapping[offset][delta]; |
|---|
| 983 | | - if (thermalvalue > rtlpriv->dm.thermalvalue) { |
|---|
| 984 | | - for (i = 0; i < rf; i++) |
|---|
| 985 | | - ofdm_index[i] -= delta; |
|---|
| 986 | | - cck_index -= delta; |
|---|
| 987 | | - } else { |
|---|
| 988 | | - for (i = 0; i < rf; i++) |
|---|
| 989 | | - ofdm_index[i] += index; |
|---|
| 990 | | - cck_index += index; |
|---|
| 991 | | - } |
|---|
| 992 | | - } else if (rtlhal->current_bandtype == BAND_ON_5G) { |
|---|
| 993 | | - rtl92d_bandtype_5G(rtlhal, ofdm_index, |
|---|
| 994 | | - &internal_pa, thermalvalue, |
|---|
| 995 | | - delta, rf, rtlefuse, rtlpriv, |
|---|
| 996 | | - rtlphy, index_mapping, |
|---|
| 997 | | - index_mapping_internal_pa); |
|---|
| 998 | | - } |
|---|
| 999 | | - if (is2t) { |
|---|
| 1000 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1001 | | - "temp OFDM_A_index=0x%x, OFDM_B_index = 0x%x,cck_index=0x%x\n", |
|---|
| 1002 | | - rtlpriv->dm.ofdm_index[0], |
|---|
| 1003 | | - rtlpriv->dm.ofdm_index[1], |
|---|
| 1004 | | - rtlpriv->dm.cck_index); |
|---|
| 1005 | | - } else { |
|---|
| 1006 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1007 | | - "temp OFDM_A_index=0x%x,cck_index = 0x%x\n", |
|---|
| 1008 | | - rtlpriv->dm.ofdm_index[0], |
|---|
| 1009 | | - rtlpriv->dm.cck_index); |
|---|
| 1010 | | - } |
|---|
| 1011 | | - for (i = 0; i < rf; i++) { |
|---|
| 1012 | | - if (ofdm_index[i] > OFDM_TABLE_SIZE_92D - 1) |
|---|
| 1013 | | - ofdm_index[i] = OFDM_TABLE_SIZE_92D - 1; |
|---|
| 1014 | | - else if (ofdm_index[i] < ofdm_min_index) |
|---|
| 1015 | | - ofdm_index[i] = ofdm_min_index; |
|---|
| 1016 | | - } |
|---|
| 1017 | | - if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 1018 | | - if (cck_index > CCK_TABLE_SIZE - 1) { |
|---|
| 1019 | | - cck_index = CCK_TABLE_SIZE - 1; |
|---|
| 1020 | | - } else if (internal_pa || |
|---|
| 1021 | | - rtlhal->current_bandtype == |
|---|
| 1022 | | - BAND_ON_2_4G) { |
|---|
| 1023 | | - if (ofdm_index[i] < |
|---|
| 1024 | | - ofdm_min_index_internal_pa) |
|---|
| 1025 | | - ofdm_index[i] = |
|---|
| 1026 | | - ofdm_min_index_internal_pa; |
|---|
| 1027 | | - } else if (cck_index < 0) { |
|---|
| 1028 | | - cck_index = 0; |
|---|
| 1029 | | - } |
|---|
| 1030 | | - } |
|---|
| 1031 | | - if (is2t) { |
|---|
| 1032 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1033 | | - "new OFDM_A_index=0x%x, OFDM_B_index = 0x%x, cck_index=0x%x\n", |
|---|
| 1034 | | - ofdm_index[0], ofdm_index[1], |
|---|
| 1035 | | - cck_index); |
|---|
| 1036 | | - } else { |
|---|
| 1037 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1038 | | - "new OFDM_A_index=0x%x,cck_index = 0x%x\n", |
|---|
| 1039 | | - ofdm_index[0], cck_index); |
|---|
| 1040 | | - } |
|---|
| 1041 | | - ele_d = (ofdmswing_table[(u8) ofdm_index[0]] & |
|---|
| 1042 | | - 0xFFC00000) >> 22; |
|---|
| 1043 | | - val_x = rtlphy->iqk_matrix |
|---|
| 1044 | | - [indexforchannel].value[0][0]; |
|---|
| 1045 | | - val_y = rtlphy->iqk_matrix |
|---|
| 1046 | | - [indexforchannel].value[0][1]; |
|---|
| 1047 | | - if (val_x != 0) { |
|---|
| 1048 | | - if ((val_x & 0x00000200) != 0) |
|---|
| 1049 | | - val_x = val_x | 0xFFFFFC00; |
|---|
| 1050 | | - ele_a = |
|---|
| 1051 | | - ((val_x * ele_d) >> 8) & 0x000003FF; |
|---|
| 1052 | | - |
|---|
| 1053 | | - /* new element C = element D x Y */ |
|---|
| 1054 | | - if ((val_y & 0x00000200) != 0) |
|---|
| 1055 | | - val_y = val_y | 0xFFFFFC00; |
|---|
| 1056 | | - ele_c = ((val_y * ele_d) >> 8) & 0x000003FF; |
|---|
| 1057 | | - |
|---|
| 1058 | | - /* wirte new elements A, C, D to regC80 and |
|---|
| 1059 | | - * regC94, element B is always 0 */ |
|---|
| 1060 | | - value32 = (ele_d << 22) | ((ele_c & 0x3F) << |
|---|
| 1061 | | - 16) | ele_a; |
|---|
| 1062 | | - rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, |
|---|
| 1063 | | - MASKDWORD, value32); |
|---|
| 1064 | | - |
|---|
| 1065 | | - value32 = (ele_c & 0x000003C0) >> 6; |
|---|
| 1066 | | - rtl_set_bbreg(hw, ROFDM0_XCTxAFE, MASKH4BITS, |
|---|
| 1067 | | - value32); |
|---|
| 1068 | | - |
|---|
| 1069 | | - value32 = ((val_x * ele_d) >> 7) & 0x01; |
|---|
| 1070 | | - rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(24), |
|---|
| 1071 | | - value32); |
|---|
| 1072 | | - |
|---|
| 1073 | | - } else { |
|---|
| 1074 | | - rtl_set_bbreg(hw, ROFDM0_XATxIQIMBALANCE, |
|---|
| 1075 | | - MASKDWORD, |
|---|
| 1076 | | - ofdmswing_table |
|---|
| 1077 | | - [(u8)ofdm_index[0]]); |
|---|
| 1078 | | - rtl_set_bbreg(hw, ROFDM0_XCTxAFE, MASKH4BITS, |
|---|
| 1079 | | - 0x00); |
|---|
| 1080 | | - rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, |
|---|
| 1081 | | - BIT(24), 0x00); |
|---|
| 1082 | | - } |
|---|
| 1083 | | - |
|---|
| 1084 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1085 | | - "TxPwrTracking for interface %d path A: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xe94 = 0x%lx 0xe9c = 0x%lx\n", |
|---|
| 1086 | | - rtlhal->interfaceindex, |
|---|
| 1087 | | - val_x, val_y, ele_a, ele_c, ele_d, |
|---|
| 1088 | | - val_x, val_y); |
|---|
| 1089 | | - |
|---|
| 1090 | | - if (cck_index >= CCK_TABLE_SIZE) |
|---|
| 1091 | | - cck_index = CCK_TABLE_SIZE - 1; |
|---|
| 1092 | | - if (cck_index < 0) |
|---|
| 1093 | | - cck_index = 0; |
|---|
| 1094 | | - if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 1095 | | - /* Adjust CCK according to IQK result */ |
|---|
| 1096 | | - if (!rtlpriv->dm.cck_inch14) { |
|---|
| 1097 | | - rtl_write_byte(rtlpriv, 0xa22, |
|---|
| 1098 | | - cckswing_table_ch1ch13 |
|---|
| 1099 | | - [(u8)cck_index][0]); |
|---|
| 1100 | | - rtl_write_byte(rtlpriv, 0xa23, |
|---|
| 1101 | | - cckswing_table_ch1ch13 |
|---|
| 1102 | | - [(u8)cck_index][1]); |
|---|
| 1103 | | - rtl_write_byte(rtlpriv, 0xa24, |
|---|
| 1104 | | - cckswing_table_ch1ch13 |
|---|
| 1105 | | - [(u8)cck_index][2]); |
|---|
| 1106 | | - rtl_write_byte(rtlpriv, 0xa25, |
|---|
| 1107 | | - cckswing_table_ch1ch13 |
|---|
| 1108 | | - [(u8)cck_index][3]); |
|---|
| 1109 | | - rtl_write_byte(rtlpriv, 0xa26, |
|---|
| 1110 | | - cckswing_table_ch1ch13 |
|---|
| 1111 | | - [(u8)cck_index][4]); |
|---|
| 1112 | | - rtl_write_byte(rtlpriv, 0xa27, |
|---|
| 1113 | | - cckswing_table_ch1ch13 |
|---|
| 1114 | | - [(u8)cck_index][5]); |
|---|
| 1115 | | - rtl_write_byte(rtlpriv, 0xa28, |
|---|
| 1116 | | - cckswing_table_ch1ch13 |
|---|
| 1117 | | - [(u8)cck_index][6]); |
|---|
| 1118 | | - rtl_write_byte(rtlpriv, 0xa29, |
|---|
| 1119 | | - cckswing_table_ch1ch13 |
|---|
| 1120 | | - [(u8)cck_index][7]); |
|---|
| 1121 | | - } else { |
|---|
| 1122 | | - rtl_write_byte(rtlpriv, 0xa22, |
|---|
| 1123 | | - cckswing_table_ch14 |
|---|
| 1124 | | - [(u8)cck_index][0]); |
|---|
| 1125 | | - rtl_write_byte(rtlpriv, 0xa23, |
|---|
| 1126 | | - cckswing_table_ch14 |
|---|
| 1127 | | - [(u8)cck_index][1]); |
|---|
| 1128 | | - rtl_write_byte(rtlpriv, 0xa24, |
|---|
| 1129 | | - cckswing_table_ch14 |
|---|
| 1130 | | - [(u8)cck_index][2]); |
|---|
| 1131 | | - rtl_write_byte(rtlpriv, 0xa25, |
|---|
| 1132 | | - cckswing_table_ch14 |
|---|
| 1133 | | - [(u8)cck_index][3]); |
|---|
| 1134 | | - rtl_write_byte(rtlpriv, 0xa26, |
|---|
| 1135 | | - cckswing_table_ch14 |
|---|
| 1136 | | - [(u8)cck_index][4]); |
|---|
| 1137 | | - rtl_write_byte(rtlpriv, 0xa27, |
|---|
| 1138 | | - cckswing_table_ch14 |
|---|
| 1139 | | - [(u8)cck_index][5]); |
|---|
| 1140 | | - rtl_write_byte(rtlpriv, 0xa28, |
|---|
| 1141 | | - cckswing_table_ch14 |
|---|
| 1142 | | - [(u8)cck_index][6]); |
|---|
| 1143 | | - rtl_write_byte(rtlpriv, 0xa29, |
|---|
| 1144 | | - cckswing_table_ch14 |
|---|
| 1145 | | - [(u8)cck_index][7]); |
|---|
| 1146 | | - } |
|---|
| 1147 | | - } |
|---|
| 1148 | | - if (is2t) { |
|---|
| 1149 | | - ele_d = (ofdmswing_table[(u8) ofdm_index[1]] & |
|---|
| 1150 | | - 0xFFC00000) >> 22; |
|---|
| 1151 | | - val_x = rtlphy->iqk_matrix |
|---|
| 1152 | | - [indexforchannel].value[0][4]; |
|---|
| 1153 | | - val_y = rtlphy->iqk_matrix |
|---|
| 1154 | | - [indexforchannel].value[0][5]; |
|---|
| 1155 | | - if (val_x != 0) { |
|---|
| 1156 | | - if ((val_x & 0x00000200) != 0) |
|---|
| 1157 | | - /* consider minus */ |
|---|
| 1158 | | - val_x = val_x | 0xFFFFFC00; |
|---|
| 1159 | | - ele_a = ((val_x * ele_d) >> 8) & |
|---|
| 1160 | | - 0x000003FF; |
|---|
| 1161 | | - /* new element C = element D x Y */ |
|---|
| 1162 | | - if ((val_y & 0x00000200) != 0) |
|---|
| 1163 | | - val_y = |
|---|
| 1164 | | - val_y | 0xFFFFFC00; |
|---|
| 1165 | | - ele_c = |
|---|
| 1166 | | - ((val_y * |
|---|
| 1167 | | - ele_d) >> 8) & 0x00003FF; |
|---|
| 1168 | | - /* write new elements A, C, D to regC88 |
|---|
| 1169 | | - * and regC9C, element B is always 0 |
|---|
| 1170 | | - */ |
|---|
| 1171 | | - value32 = (ele_d << 22) | |
|---|
| 1172 | | - ((ele_c & 0x3F) << 16) | |
|---|
| 1173 | | - ele_a; |
|---|
| 1174 | | - rtl_set_bbreg(hw, |
|---|
| 1175 | | - ROFDM0_XBTxIQIMBALANCE, |
|---|
| 1176 | | - MASKDWORD, value32); |
|---|
| 1177 | | - value32 = (ele_c & 0x000003C0) >> 6; |
|---|
| 1178 | | - rtl_set_bbreg(hw, ROFDM0_XDTxAFE, |
|---|
| 1179 | | - MASKH4BITS, value32); |
|---|
| 1180 | | - value32 = ((val_x * ele_d) >> 7) & 0x01; |
|---|
| 1181 | | - rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, |
|---|
| 1182 | | - BIT(28), value32); |
|---|
| 1183 | | - } else { |
|---|
| 1184 | | - rtl_set_bbreg(hw, |
|---|
| 1185 | | - ROFDM0_XBTxIQIMBALANCE, |
|---|
| 1186 | | - MASKDWORD, |
|---|
| 1187 | | - ofdmswing_table |
|---|
| 1188 | | - [(u8) ofdm_index[1]]); |
|---|
| 1189 | | - rtl_set_bbreg(hw, ROFDM0_XDTxAFE, |
|---|
| 1190 | | - MASKH4BITS, 0x00); |
|---|
| 1191 | | - rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, |
|---|
| 1192 | | - BIT(28), 0x00); |
|---|
| 1193 | | - } |
|---|
| 1194 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1195 | | - "TxPwrTracking path B: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xeb4 = 0x%lx 0xebc = 0x%lx\n", |
|---|
| 1196 | | - val_x, val_y, ele_a, ele_c, |
|---|
| 1197 | | - ele_d, val_x, val_y); |
|---|
| 1198 | | - } |
|---|
| 1199 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1200 | | - "TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", |
|---|
| 1201 | | - rtl_get_bbreg(hw, 0xc80, MASKDWORD), |
|---|
| 1202 | | - rtl_get_bbreg(hw, 0xc94, MASKDWORD), |
|---|
| 1203 | | - rtl_get_rfreg(hw, RF90_PATH_A, 0x24, |
|---|
| 1204 | | - RFREG_OFFSET_MASK)); |
|---|
| 1205 | | - } |
|---|
| 1206 | | - if ((delta_iqk > rtlefuse->delta_iqk) && |
|---|
| 1207 | | - (rtlefuse->delta_iqk != 0)) { |
|---|
| 1208 | | - rtl92d_phy_reset_iqk_result(hw); |
|---|
| 1209 | | - rtlpriv->dm.thermalvalue_iqk = thermalvalue; |
|---|
| 1210 | | - rtl92d_phy_iq_calibrate(hw); |
|---|
| 1211 | | - } |
|---|
| 1212 | | - if (delta_rxgain > 0 && rtlhal->current_bandtype == BAND_ON_5G |
|---|
| 1213 | | - && thermalvalue <= rtlefuse->eeprom_thermalmeter) { |
|---|
| 1214 | | - rtlpriv->dm.thermalvalue_rxgain = thermalvalue; |
|---|
| 1215 | | - rtl92d_dm_rxgain_tracking_thermalmeter(hw); |
|---|
| 1216 | | - } |
|---|
| 1217 | | - if (rtlpriv->dm.txpower_track_control) |
|---|
| 1218 | | - rtlpriv->dm.thermalvalue = thermalvalue; |
|---|
| 871 | + } |
|---|
| 872 | + if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 873 | + rtl92d_bandtype_2_4G(hw, &temp_cck, &cck_index_old); |
|---|
| 874 | + } else { |
|---|
| 875 | + temp_cck = 0x090e1317; |
|---|
| 876 | + cck_index_old = 12; |
|---|
| 1219 | 877 | } |
|---|
| 1220 | 878 | |
|---|
| 1221 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "<===\n"); |
|---|
| 879 | + if (!rtlpriv->dm.thermalvalue) { |
|---|
| 880 | + rtlpriv->dm.thermalvalue = rtlefuse->eeprom_thermalmeter; |
|---|
| 881 | + rtlpriv->dm.thermalvalue_lck = thermalvalue; |
|---|
| 882 | + rtlpriv->dm.thermalvalue_iqk = thermalvalue; |
|---|
| 883 | + rtlpriv->dm.thermalvalue_rxgain = rtlefuse->eeprom_thermalmeter; |
|---|
| 884 | + for (i = 0; i < rf; i++) |
|---|
| 885 | + rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i]; |
|---|
| 886 | + rtlpriv->dm.cck_index = cck_index_old; |
|---|
| 887 | + } |
|---|
| 888 | + if (rtlhal->reloadtxpowerindex) { |
|---|
| 889 | + for (i = 0; i < rf; i++) |
|---|
| 890 | + rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i]; |
|---|
| 891 | + rtlpriv->dm.cck_index = cck_index_old; |
|---|
| 892 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 893 | + "reload ofdm index for band switch\n"); |
|---|
| 894 | + } |
|---|
| 895 | +old_index_done: |
|---|
| 896 | + for (i = 0; i < rf; i++) |
|---|
| 897 | + ofdm_index[i] = rtlpriv->dm.ofdm_index[i]; |
|---|
| 898 | + |
|---|
| 899 | + rtlpriv->dm.thermalvalue_avg |
|---|
| 900 | + [rtlpriv->dm.thermalvalue_avg_index] = thermalvalue; |
|---|
| 901 | + rtlpriv->dm.thermalvalue_avg_index++; |
|---|
| 902 | + if (rtlpriv->dm.thermalvalue_avg_index == AVG_THERMAL_NUM) |
|---|
| 903 | + rtlpriv->dm.thermalvalue_avg_index = 0; |
|---|
| 904 | + for (i = 0; i < AVG_THERMAL_NUM; i++) { |
|---|
| 905 | + if (rtlpriv->dm.thermalvalue_avg[i]) { |
|---|
| 906 | + thermalvalue_avg += rtlpriv->dm.thermalvalue_avg[i]; |
|---|
| 907 | + thermalvalue_avg_count++; |
|---|
| 908 | + } |
|---|
| 909 | + } |
|---|
| 910 | + if (thermalvalue_avg_count) |
|---|
| 911 | + thermalvalue = (u8)(thermalvalue_avg / thermalvalue_avg_count); |
|---|
| 912 | + if (rtlhal->reloadtxpowerindex) { |
|---|
| 913 | + delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? |
|---|
| 914 | + (thermalvalue - rtlefuse->eeprom_thermalmeter) : |
|---|
| 915 | + (rtlefuse->eeprom_thermalmeter - thermalvalue); |
|---|
| 916 | + rtlhal->reloadtxpowerindex = false; |
|---|
| 917 | + rtlpriv->dm.done_txpower = false; |
|---|
| 918 | + } else if (rtlpriv->dm.done_txpower) { |
|---|
| 919 | + delta = (thermalvalue > rtlpriv->dm.thermalvalue) ? |
|---|
| 920 | + (thermalvalue - rtlpriv->dm.thermalvalue) : |
|---|
| 921 | + (rtlpriv->dm.thermalvalue - thermalvalue); |
|---|
| 922 | + } else { |
|---|
| 923 | + delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? |
|---|
| 924 | + (thermalvalue - rtlefuse->eeprom_thermalmeter) : |
|---|
| 925 | + (rtlefuse->eeprom_thermalmeter - thermalvalue); |
|---|
| 926 | + } |
|---|
| 927 | + delta_lck = (thermalvalue > rtlpriv->dm.thermalvalue_lck) ? |
|---|
| 928 | + (thermalvalue - rtlpriv->dm.thermalvalue_lck) : |
|---|
| 929 | + (rtlpriv->dm.thermalvalue_lck - thermalvalue); |
|---|
| 930 | + delta_iqk = (thermalvalue > rtlpriv->dm.thermalvalue_iqk) ? |
|---|
| 931 | + (thermalvalue - rtlpriv->dm.thermalvalue_iqk) : |
|---|
| 932 | + (rtlpriv->dm.thermalvalue_iqk - thermalvalue); |
|---|
| 933 | + delta_rxgain = |
|---|
| 934 | + (thermalvalue > rtlpriv->dm.thermalvalue_rxgain) ? |
|---|
| 935 | + (thermalvalue - rtlpriv->dm.thermalvalue_rxgain) : |
|---|
| 936 | + (rtlpriv->dm.thermalvalue_rxgain - thermalvalue); |
|---|
| 937 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 938 | + "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x delta 0x%x delta_lck 0x%x delta_iqk 0x%x\n", |
|---|
| 939 | + thermalvalue, rtlpriv->dm.thermalvalue, |
|---|
| 940 | + rtlefuse->eeprom_thermalmeter, delta, delta_lck, |
|---|
| 941 | + delta_iqk); |
|---|
| 942 | + if (delta_lck > rtlefuse->delta_lck && rtlefuse->delta_lck != 0) { |
|---|
| 943 | + rtlpriv->dm.thermalvalue_lck = thermalvalue; |
|---|
| 944 | + rtl92d_phy_lc_calibrate(hw); |
|---|
| 945 | + } |
|---|
| 946 | + |
|---|
| 947 | + if (delta == 0 || !rtlpriv->dm.txpower_track_control) |
|---|
| 948 | + goto check_delta; |
|---|
| 949 | + |
|---|
| 950 | + rtlpriv->dm.done_txpower = true; |
|---|
| 951 | + delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ? |
|---|
| 952 | + (thermalvalue - rtlefuse->eeprom_thermalmeter) : |
|---|
| 953 | + (rtlefuse->eeprom_thermalmeter - thermalvalue); |
|---|
| 954 | + if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 955 | + offset = 4; |
|---|
| 956 | + if (delta > INDEX_MAPPING_NUM - 1) |
|---|
| 957 | + index = index_mapping[offset][INDEX_MAPPING_NUM - 1]; |
|---|
| 958 | + else |
|---|
| 959 | + index = index_mapping[offset][delta]; |
|---|
| 960 | + if (thermalvalue > rtlpriv->dm.thermalvalue) { |
|---|
| 961 | + for (i = 0; i < rf; i++) |
|---|
| 962 | + ofdm_index[i] -= delta; |
|---|
| 963 | + cck_index -= delta; |
|---|
| 964 | + } else { |
|---|
| 965 | + for (i = 0; i < rf; i++) |
|---|
| 966 | + ofdm_index[i] += index; |
|---|
| 967 | + cck_index += index; |
|---|
| 968 | + } |
|---|
| 969 | + } else if (rtlhal->current_bandtype == BAND_ON_5G) { |
|---|
| 970 | + rtl92d_bandtype_5G(rtlhal, ofdm_index, |
|---|
| 971 | + &internal_pa, thermalvalue, |
|---|
| 972 | + delta, rf, rtlefuse, rtlpriv, |
|---|
| 973 | + rtlphy, index_mapping, |
|---|
| 974 | + index_mapping_internal_pa); |
|---|
| 975 | + } |
|---|
| 976 | + if (is2t) { |
|---|
| 977 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 978 | + "temp OFDM_A_index=0x%x, OFDM_B_index = 0x%x,cck_index=0x%x\n", |
|---|
| 979 | + rtlpriv->dm.ofdm_index[0], |
|---|
| 980 | + rtlpriv->dm.ofdm_index[1], |
|---|
| 981 | + rtlpriv->dm.cck_index); |
|---|
| 982 | + } else { |
|---|
| 983 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 984 | + "temp OFDM_A_index=0x%x,cck_index = 0x%x\n", |
|---|
| 985 | + rtlpriv->dm.ofdm_index[0], |
|---|
| 986 | + rtlpriv->dm.cck_index); |
|---|
| 987 | + } |
|---|
| 988 | + for (i = 0; i < rf; i++) { |
|---|
| 989 | + if (ofdm_index[i] > OFDM_TABLE_SIZE_92D - 1) |
|---|
| 990 | + ofdm_index[i] = OFDM_TABLE_SIZE_92D - 1; |
|---|
| 991 | + else if (ofdm_index[i] < ofdm_min_index) |
|---|
| 992 | + ofdm_index[i] = ofdm_min_index; |
|---|
| 993 | + } |
|---|
| 994 | + if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 995 | + if (cck_index > CCK_TABLE_SIZE - 1) { |
|---|
| 996 | + cck_index = CCK_TABLE_SIZE - 1; |
|---|
| 997 | + } else if (internal_pa || |
|---|
| 998 | + rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 999 | + if (ofdm_index[i] < ofdm_min_index_internal_pa) |
|---|
| 1000 | + ofdm_index[i] = ofdm_min_index_internal_pa; |
|---|
| 1001 | + } else if (cck_index < 0) { |
|---|
| 1002 | + cck_index = 0; |
|---|
| 1003 | + } |
|---|
| 1004 | + } |
|---|
| 1005 | + if (is2t) { |
|---|
| 1006 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1007 | + "new OFDM_A_index=0x%x, OFDM_B_index = 0x%x, cck_index=0x%x\n", |
|---|
| 1008 | + ofdm_index[0], ofdm_index[1], |
|---|
| 1009 | + cck_index); |
|---|
| 1010 | + } else { |
|---|
| 1011 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1012 | + "new OFDM_A_index=0x%x,cck_index = 0x%x\n", |
|---|
| 1013 | + ofdm_index[0], cck_index); |
|---|
| 1014 | + } |
|---|
| 1015 | + ele_d = (ofdmswing_table[ofdm_index[0]] & 0xFFC00000) >> 22; |
|---|
| 1016 | + val_x = rtlphy->iqk_matrix[indexforchannel].value[0][0]; |
|---|
| 1017 | + val_y = rtlphy->iqk_matrix[indexforchannel].value[0][1]; |
|---|
| 1018 | + if (val_x != 0) { |
|---|
| 1019 | + if ((val_x & 0x00000200) != 0) |
|---|
| 1020 | + val_x = val_x | 0xFFFFFC00; |
|---|
| 1021 | + ele_a = ((val_x * ele_d) >> 8) & 0x000003FF; |
|---|
| 1022 | + |
|---|
| 1023 | + /* new element C = element D x Y */ |
|---|
| 1024 | + if ((val_y & 0x00000200) != 0) |
|---|
| 1025 | + val_y = val_y | 0xFFFFFC00; |
|---|
| 1026 | + ele_c = ((val_y * ele_d) >> 8) & 0x000003FF; |
|---|
| 1027 | + |
|---|
| 1028 | + /* write new elements A, C, D to regC80 and |
|---|
| 1029 | + * regC94, element B is always 0 |
|---|
| 1030 | + */ |
|---|
| 1031 | + value32 = (ele_d << 22) | ((ele_c & 0x3F) << 16) | ele_a; |
|---|
| 1032 | + rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE, |
|---|
| 1033 | + MASKDWORD, value32); |
|---|
| 1034 | + |
|---|
| 1035 | + value32 = (ele_c & 0x000003C0) >> 6; |
|---|
| 1036 | + rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS, |
|---|
| 1037 | + value32); |
|---|
| 1038 | + |
|---|
| 1039 | + value32 = ((val_x * ele_d) >> 7) & 0x01; |
|---|
| 1040 | + rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(24), |
|---|
| 1041 | + value32); |
|---|
| 1042 | + |
|---|
| 1043 | + } else { |
|---|
| 1044 | + rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE, |
|---|
| 1045 | + MASKDWORD, |
|---|
| 1046 | + ofdmswing_table[(u8)ofdm_index[0]]); |
|---|
| 1047 | + rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS, |
|---|
| 1048 | + 0x00); |
|---|
| 1049 | + rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, |
|---|
| 1050 | + BIT(24), 0x00); |
|---|
| 1051 | + } |
|---|
| 1052 | + |
|---|
| 1053 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1054 | + "TxPwrTracking for interface %d path A: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xe94 = 0x%lx 0xe9c = 0x%lx\n", |
|---|
| 1055 | + rtlhal->interfaceindex, |
|---|
| 1056 | + val_x, val_y, ele_a, ele_c, ele_d, |
|---|
| 1057 | + val_x, val_y); |
|---|
| 1058 | + |
|---|
| 1059 | + if (cck_index >= CCK_TABLE_SIZE) |
|---|
| 1060 | + cck_index = CCK_TABLE_SIZE - 1; |
|---|
| 1061 | + if (cck_index < 0) |
|---|
| 1062 | + cck_index = 0; |
|---|
| 1063 | + if (rtlhal->current_bandtype == BAND_ON_2_4G) { |
|---|
| 1064 | + /* Adjust CCK according to IQK result */ |
|---|
| 1065 | + if (!rtlpriv->dm.cck_inch14) { |
|---|
| 1066 | + rtl_write_byte(rtlpriv, 0xa22, |
|---|
| 1067 | + cckswing_table_ch1ch13[cck_index][0]); |
|---|
| 1068 | + rtl_write_byte(rtlpriv, 0xa23, |
|---|
| 1069 | + cckswing_table_ch1ch13[cck_index][1]); |
|---|
| 1070 | + rtl_write_byte(rtlpriv, 0xa24, |
|---|
| 1071 | + cckswing_table_ch1ch13[cck_index][2]); |
|---|
| 1072 | + rtl_write_byte(rtlpriv, 0xa25, |
|---|
| 1073 | + cckswing_table_ch1ch13[cck_index][3]); |
|---|
| 1074 | + rtl_write_byte(rtlpriv, 0xa26, |
|---|
| 1075 | + cckswing_table_ch1ch13[cck_index][4]); |
|---|
| 1076 | + rtl_write_byte(rtlpriv, 0xa27, |
|---|
| 1077 | + cckswing_table_ch1ch13[cck_index][5]); |
|---|
| 1078 | + rtl_write_byte(rtlpriv, 0xa28, |
|---|
| 1079 | + cckswing_table_ch1ch13[cck_index][6]); |
|---|
| 1080 | + rtl_write_byte(rtlpriv, 0xa29, |
|---|
| 1081 | + cckswing_table_ch1ch13[cck_index][7]); |
|---|
| 1082 | + } else { |
|---|
| 1083 | + rtl_write_byte(rtlpriv, 0xa22, |
|---|
| 1084 | + cckswing_table_ch14[cck_index][0]); |
|---|
| 1085 | + rtl_write_byte(rtlpriv, 0xa23, |
|---|
| 1086 | + cckswing_table_ch14[cck_index][1]); |
|---|
| 1087 | + rtl_write_byte(rtlpriv, 0xa24, |
|---|
| 1088 | + cckswing_table_ch14[cck_index][2]); |
|---|
| 1089 | + rtl_write_byte(rtlpriv, 0xa25, |
|---|
| 1090 | + cckswing_table_ch14[cck_index][3]); |
|---|
| 1091 | + rtl_write_byte(rtlpriv, 0xa26, |
|---|
| 1092 | + cckswing_table_ch14[cck_index][4]); |
|---|
| 1093 | + rtl_write_byte(rtlpriv, 0xa27, |
|---|
| 1094 | + cckswing_table_ch14[cck_index][5]); |
|---|
| 1095 | + rtl_write_byte(rtlpriv, 0xa28, |
|---|
| 1096 | + cckswing_table_ch14[cck_index][6]); |
|---|
| 1097 | + rtl_write_byte(rtlpriv, 0xa29, |
|---|
| 1098 | + cckswing_table_ch14[cck_index][7]); |
|---|
| 1099 | + } |
|---|
| 1100 | + } |
|---|
| 1101 | + if (is2t) { |
|---|
| 1102 | + ele_d = (ofdmswing_table[ofdm_index[1]] & 0xFFC00000) >> 22; |
|---|
| 1103 | + val_x = rtlphy->iqk_matrix[indexforchannel].value[0][4]; |
|---|
| 1104 | + val_y = rtlphy->iqk_matrix[indexforchannel].value[0][5]; |
|---|
| 1105 | + if (val_x != 0) { |
|---|
| 1106 | + if ((val_x & 0x00000200) != 0) |
|---|
| 1107 | + /* consider minus */ |
|---|
| 1108 | + val_x = val_x | 0xFFFFFC00; |
|---|
| 1109 | + ele_a = ((val_x * ele_d) >> 8) & 0x000003FF; |
|---|
| 1110 | + /* new element C = element D x Y */ |
|---|
| 1111 | + if ((val_y & 0x00000200) != 0) |
|---|
| 1112 | + val_y = val_y | 0xFFFFFC00; |
|---|
| 1113 | + ele_c = ((val_y * ele_d) >> 8) & 0x00003FF; |
|---|
| 1114 | + /* write new elements A, C, D to regC88 |
|---|
| 1115 | + * and regC9C, element B is always 0 |
|---|
| 1116 | + */ |
|---|
| 1117 | + value32 = (ele_d << 22) | ((ele_c & 0x3F) << 16) | ele_a; |
|---|
| 1118 | + rtl_set_bbreg(hw, |
|---|
| 1119 | + ROFDM0_XBTXIQIMBALANCE, |
|---|
| 1120 | + MASKDWORD, value32); |
|---|
| 1121 | + value32 = (ele_c & 0x000003C0) >> 6; |
|---|
| 1122 | + rtl_set_bbreg(hw, ROFDM0_XDTXAFE, |
|---|
| 1123 | + MASKH4BITS, value32); |
|---|
| 1124 | + value32 = ((val_x * ele_d) >> 7) & 0x01; |
|---|
| 1125 | + rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, |
|---|
| 1126 | + BIT(28), value32); |
|---|
| 1127 | + } else { |
|---|
| 1128 | + rtl_set_bbreg(hw, |
|---|
| 1129 | + ROFDM0_XBTXIQIMBALANCE, |
|---|
| 1130 | + MASKDWORD, |
|---|
| 1131 | + ofdmswing_table[ofdm_index[1]]); |
|---|
| 1132 | + rtl_set_bbreg(hw, ROFDM0_XDTXAFE, |
|---|
| 1133 | + MASKH4BITS, 0x00); |
|---|
| 1134 | + rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, |
|---|
| 1135 | + BIT(28), 0x00); |
|---|
| 1136 | + } |
|---|
| 1137 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1138 | + "TxPwrTracking path B: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xeb4 = 0x%lx 0xebc = 0x%lx\n", |
|---|
| 1139 | + val_x, val_y, ele_a, ele_c, |
|---|
| 1140 | + ele_d, val_x, val_y); |
|---|
| 1141 | + } |
|---|
| 1142 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1143 | + "TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", |
|---|
| 1144 | + rtl_get_bbreg(hw, 0xc80, MASKDWORD), |
|---|
| 1145 | + rtl_get_bbreg(hw, 0xc94, MASKDWORD), |
|---|
| 1146 | + rtl_get_rfreg(hw, RF90_PATH_A, 0x24, |
|---|
| 1147 | + RFREG_OFFSET_MASK)); |
|---|
| 1148 | + |
|---|
| 1149 | +check_delta: |
|---|
| 1150 | + if (delta_iqk > rtlefuse->delta_iqk && rtlefuse->delta_iqk != 0) { |
|---|
| 1151 | + rtl92d_phy_reset_iqk_result(hw); |
|---|
| 1152 | + rtlpriv->dm.thermalvalue_iqk = thermalvalue; |
|---|
| 1153 | + rtl92d_phy_iq_calibrate(hw); |
|---|
| 1154 | + } |
|---|
| 1155 | + if (delta_rxgain > 0 && rtlhal->current_bandtype == BAND_ON_5G && |
|---|
| 1156 | + thermalvalue <= rtlefuse->eeprom_thermalmeter) { |
|---|
| 1157 | + rtlpriv->dm.thermalvalue_rxgain = thermalvalue; |
|---|
| 1158 | + rtl92d_dm_rxgain_tracking_thermalmeter(hw); |
|---|
| 1159 | + } |
|---|
| 1160 | + if (rtlpriv->dm.txpower_track_control) |
|---|
| 1161 | + rtlpriv->dm.thermalvalue = thermalvalue; |
|---|
| 1162 | + |
|---|
| 1163 | +exit: |
|---|
| 1164 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "<===\n"); |
|---|
| 1222 | 1165 | } |
|---|
| 1223 | 1166 | |
|---|
| 1224 | 1167 | static void rtl92d_dm_initialize_txpower_tracking(struct ieee80211_hw *hw) |
|---|
| .. | .. |
|---|
| 1228 | 1171 | rtlpriv->dm.txpower_tracking = true; |
|---|
| 1229 | 1172 | rtlpriv->dm.txpower_trackinginit = false; |
|---|
| 1230 | 1173 | rtlpriv->dm.txpower_track_control = true; |
|---|
| 1231 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1232 | | - "pMgntInfo->txpower_tracking = %d\n", |
|---|
| 1233 | | - rtlpriv->dm.txpower_tracking); |
|---|
| 1174 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1175 | + "pMgntInfo->txpower_tracking = %d\n", |
|---|
| 1176 | + rtlpriv->dm.txpower_tracking); |
|---|
| 1234 | 1177 | } |
|---|
| 1235 | 1178 | |
|---|
| 1236 | 1179 | void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw) |
|---|
| .. | .. |
|---|
| 1243 | 1186 | if (!rtlpriv->dm.tm_trigger) { |
|---|
| 1244 | 1187 | rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) | |
|---|
| 1245 | 1188 | BIT(16), 0x03); |
|---|
| 1246 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1247 | | - "Trigger 92S Thermal Meter!!\n"); |
|---|
| 1189 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1190 | + "Trigger 92S Thermal Meter!!\n"); |
|---|
| 1248 | 1191 | rtlpriv->dm.tm_trigger = 1; |
|---|
| 1249 | 1192 | return; |
|---|
| 1250 | 1193 | } else { |
|---|
| 1251 | | - RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1252 | | - "Schedule TxPowerTracking direct call!!\n"); |
|---|
| 1194 | + rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
|---|
| 1195 | + "Schedule TxPowerTracking direct call!!\n"); |
|---|
| 1253 | 1196 | rtl92d_dm_txpower_tracking_callback_thermalmeter(hw); |
|---|
| 1254 | 1197 | rtlpriv->dm.tm_trigger = 0; |
|---|
| 1255 | 1198 | } |
|---|