summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChih-Kang Chang <gary.chang@realtek.com>2022-08-09 16:41:06 +0800
committerKalle Valo <kvalo@kernel.org>2022-08-10 08:48:46 +0300
commit6bf3a083407b5d404d70efc3a5ac75b472e5efa9 (patch)
tree386a5453c9db6ad727e877d5a35549d8ea634bef
parentd08458b57a5025ca137807f1030ad93e3d7f05f0 (diff)
downloadlinux-6bf3a083407b5d404d70efc3a5ac75b472e5efa9.tar.gz
linux-6bf3a083407b5d404d70efc3a5ac75b472e5efa9.tar.bz2
linux-6bf3a083407b5d404d70efc3a5ac75b472e5efa9.zip
wifi: rtw88: add flag check before enter or leave IPS
Enter or leave IPS controlled by mac80211 before driver support HW scan. After support HW scan, driver need to control IPS before start HW scan and scan complete, but mac80211 also ask driver enter or leave IPS. Therefore, we add flag check in IPS to prevent entering or leaving IPS twice. Signed-off-by: Chih-Kang Chang <gary.chang@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/20220809084107.38137-7-pkshih@realtek.com
-rw-r--r--drivers/net/wireless/realtek/rtw88/ps.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/wireless/realtek/rtw88/ps.c b/drivers/net/wireless/realtek/rtw88/ps.c
index bfa64c038f5f..c93da743681f 100644
--- a/drivers/net/wireless/realtek/rtw88/ps.c
+++ b/drivers/net/wireless/realtek/rtw88/ps.c
@@ -19,14 +19,14 @@ static int rtw_ips_pwr_up(struct rtw_dev *rtwdev)
rtw_err(rtwdev, "leave idle state failed\n");
rtw_set_channel(rtwdev);
- clear_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags);
return ret;
}
int rtw_enter_ips(struct rtw_dev *rtwdev)
{
- set_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags);
+ if (test_and_set_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags))
+ return 0;
rtw_coex_ips_notify(rtwdev, COEX_IPS_ENTER);
@@ -50,6 +50,9 @@ int rtw_leave_ips(struct rtw_dev *rtwdev)
{
int ret;
+ if (!test_and_clear_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags))
+ return 0;
+
rtw_hci_link_ps(rtwdev, false);
ret = rtw_ips_pwr_up(rtwdev);