wifi: rtw89: correct the DCFO tracking flow to improve CFO compensation
DCFO tracking compensate the CFO (carrier frequency offset) by digital hardware that provides fine CFO estimation. Although the avg_cfo which is a coarse information becomes zero, still we need DCFO tracking to compensate the residual CFO. However, the original flow skips the case when avg_cfo is zero, so we fix it to have expected performance. Signed-off-by: Cheng-Chieh Hsieh <cj.hsieh@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231016065115.751662-5-pkshih@realtek.com
This commit is contained in:
parent
5d2f3c3aaa
commit
aecc60e7d3
@ -2634,6 +2634,10 @@ static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev,
|
||||
s32 cfo_abs = abs(curr_cfo);
|
||||
int sign;
|
||||
|
||||
if (curr_cfo == 0) {
|
||||
rtw89_debug(rtwdev, RTW89_DBG_CFO, "curr_cfo=0\n");
|
||||
return;
|
||||
}
|
||||
if (!cfo->is_adjust) {
|
||||
if (cfo_abs > CFO_TRK_ENABLE_TH)
|
||||
cfo->is_adjust = true;
|
||||
@ -2830,10 +2834,6 @@ static void rtw89_phy_cfo_dm(struct rtw89_dev *rtwdev)
|
||||
new_cfo = rtw89_phy_average_cfo_calc(rtwdev);
|
||||
else
|
||||
new_cfo = rtw89_phy_multi_sta_cfo_calc(rtwdev);
|
||||
if (new_cfo == 0) {
|
||||
rtw89_debug(rtwdev, RTW89_DBG_CFO, "curr_cfo=0\n");
|
||||
return;
|
||||
}
|
||||
if (cfo->divergence_lock_en) {
|
||||
cfo->lock_cnt++;
|
||||
if (cfo->lock_cnt > CFO_PERIOD_CNT) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user