Message ID | 20201203021602.9414-1-pkshih@realtek.com |
---|---|
State | New |
Headers | show |
Series | rtw88: reduce polling time of IQ calibration | expand |
Ping-Ke Shih <pkshih@realtek.com> writes: > 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> > --- > drivers/net/wireless/realtek/rtw88/rtw8822c.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c > index 7dd3ccb73793..7661d8d494c9 100644 > --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c > +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c > @@ -2108,22 +2108,21 @@ static void rtw8822c_false_alarm_statistics(struct rtw_dev *rtwdev) > > static void rtw8822c_do_iqk(struct rtw_dev *rtwdev) > { > +#define IQK_DONE_8822C 0xaa > + > struct rtw_iqk_para para = {0}; > u8 iqk_chk; > - int counter; > + int ret; That is a bit awkward location for a define. The preferred style is to move the define to a beginning of the file or to a .h file. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 7dd3ccb73793..7661d8d494c9 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -2108,22 +2108,21 @@ static void rtw8822c_false_alarm_statistics(struct rtw_dev *rtwdev) static void rtw8822c_do_iqk(struct rtw_dev *rtwdev) { +#define IQK_DONE_8822C 0xaa + 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 */