Message ID | 20201208013444.10881-1-pkshih@realtek.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Kalle Valo |
Headers | show |
Series | rtw88: reduce polling time of IQ calibration | expand |
On Tue, 2020-12-08 at 09:34 +0800, Ping-Ke Shih wrote: > From: Chin-Yen Lee <timlee@realtek.com> > > When 8822CE is associating with AP, driver will poll status bit of > IQ calibration to confirm the IQ calibration is done, and then move on > the association process. Current polling time for IQ calibration is 6 > seconds. > > But occasionally driver fails in polling the status bit because the status > bit is not set after IQ calibration is done. When it happends, association > process will be serieously delayed up to 6 seconds. To avoid it, we reduce > polling time to 300ms, in which the IQ calibration can be done. > > Signed-off-by: Chin-Yen Lee <timlee@realtek.com> > Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> > --- > v2: move define to the beginning of file > Sorry. I forget to change mail subject to "PATCH V2". Please ignore this one. --- Ping-Ke
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 7dd3ccb73793..dd560c28abb2 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -18,6 +18,8 @@ #include "bf.h" #include "efuse.h" +#define IQK_DONE_8822C 0xaa + static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, u8 rx_path, bool is_tx2_path); @@ -2110,20 +2112,17 @@ static void rtw8822c_do_iqk(struct rtw_dev *rtwdev) { struct rtw_iqk_para para = {0}; u8 iqk_chk; - int counter; + int ret; para.clear = 1; rtw_fw_do_iqk(rtwdev, ¶); - for (counter = 0; counter < 300; counter++) { - iqk_chk = rtw_read8(rtwdev, REG_RPT_CIP); - if (iqk_chk == 0xaa) - break; - msleep(20); - } - rtw_write8(rtwdev, REG_IQKSTAT, 0x0); + ret = read_poll_timeout(rtw_read8, iqk_chk, iqk_chk == IQK_DONE_8822C, + 20000, 300000, false, rtwdev, REG_RPT_CIP); + if (ret) + rtw_warn(rtwdev, "failed to poll iqk status bit\n"); - rtw_dbg(rtwdev, RTW_DBG_RFK, "iqk counter=%d\n", counter); + rtw_write8(rtwdev, REG_IQKSTAT, 0x0); } /* for coex */