mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-12 20:56:11 -04:00
wifi: rtw89: add crystal_cap check to avoid setting as overflow value
In the original flow, the crystal_cap might be calculated as a negative value and set as an overflow value. Therefore, we added a check to limit the calculated crystal_cap value. Additionally, we shrank the crystal_cap adjustment according to specific CFO. Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20241128055433.11851-7-pkshih@realtek.com
This commit is contained in:
committed by
Ping-Ke Shih
parent
148cd1e184
commit
7b98caea39
@@ -4266,7 +4266,6 @@ static void rtw89_phy_cfo_set_crystal_cap(struct rtw89_dev *rtwdev,
|
||||
|
||||
if (!force && cfo->crystal_cap == crystal_cap)
|
||||
return;
|
||||
crystal_cap = clamp_t(u8, crystal_cap, 0, 127);
|
||||
if (chip->chip_id == RTL8852A || chip->chip_id == RTL8851B) {
|
||||
rtw89_phy_cfo_set_xcap_reg(rtwdev, true, crystal_cap);
|
||||
rtw89_phy_cfo_set_xcap_reg(rtwdev, false, crystal_cap);
|
||||
@@ -4389,7 +4388,7 @@ static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev,
|
||||
s32 curr_cfo)
|
||||
{
|
||||
struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
|
||||
s8 crystal_cap = cfo->crystal_cap;
|
||||
int crystal_cap = cfo->crystal_cap;
|
||||
s32 cfo_abs = abs(curr_cfo);
|
||||
int sign;
|
||||
|
||||
@@ -4410,15 +4409,17 @@ static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
sign = curr_cfo > 0 ? 1 : -1;
|
||||
if (cfo_abs > CFO_TRK_STOP_TH_4)
|
||||
crystal_cap += 7 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_3)
|
||||
crystal_cap += 5 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_2)
|
||||
crystal_cap += 3 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_3)
|
||||
crystal_cap += 3 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_2)
|
||||
crystal_cap += 1 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_1)
|
||||
crystal_cap += 1 * sign;
|
||||
else
|
||||
return;
|
||||
|
||||
crystal_cap = clamp(crystal_cap, 0, 127);
|
||||
rtw89_phy_cfo_set_crystal_cap(rtwdev, (u8)crystal_cap, false);
|
||||
rtw89_debug(rtwdev, RTW89_DBG_CFO,
|
||||
"X_cap{Curr,Default}={0x%x,0x%x}\n",
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
#define CFO_TRK_STOP_TH_4 (30 << 2)
|
||||
#define CFO_TRK_STOP_TH_3 (20 << 2)
|
||||
#define CFO_TRK_STOP_TH_2 (10 << 2)
|
||||
#define CFO_TRK_STOP_TH_1 (00 << 2)
|
||||
#define CFO_TRK_STOP_TH_1 (03 << 2)
|
||||
#define CFO_TRK_STOP_TH (2 << 2)
|
||||
#define CFO_SW_COMP_FINE_TUNE (2 << 2)
|
||||
#define CFO_PERIOD_CNT 15
|
||||
|
||||
Reference in New Issue
Block a user