Commit 398b9bda authored by Ping-Ke Shih's avatar Ping-Ke Shih Committed by Kalle Valo

rtw88: move rtw_enter_ips() to the last when config

When driver is coming up, mac80211 will set changed as ~0 (0xffffffff),
and driver could enter IDLE state (power off) before switching channel or
other config event. So move rtw_enter_ips() to the last, to make sure the
driver completed the config events before going to IDLE state.

So, moves leave/enter IPS config to be first/last one according to flag
IEEE80211_CONF_IDLE. If there're more configureations we want to add in
the future, they must locate between leave/enter IPS.
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarYan-Hsuan Chuang <yhchuang@realtek.com>
Reviewed-by: default avatarChris Chiu <chiu@endlessm.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 2a422555
...@@ -75,17 +75,14 @@ static int rtw_ops_config(struct ieee80211_hw *hw, u32 changed) ...@@ -75,17 +75,14 @@ static int rtw_ops_config(struct ieee80211_hw *hw, u32 changed)
rtw_leave_lps_deep(rtwdev); rtw_leave_lps_deep(rtwdev);
if (changed & IEEE80211_CONF_CHANGE_IDLE) { if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
if (hw->conf.flags & IEEE80211_CONF_IDLE) { !(hw->conf.flags & IEEE80211_CONF_IDLE)) {
rtw_enter_ips(rtwdev);
} else {
ret = rtw_leave_ips(rtwdev); ret = rtw_leave_ips(rtwdev);
if (ret) { if (ret) {
rtw_err(rtwdev, "failed to leave idle state\n"); rtw_err(rtwdev, "failed to leave idle state\n");
goto out; goto out;
} }
} }
}
if (changed & IEEE80211_CONF_CHANGE_PS) { if (changed & IEEE80211_CONF_CHANGE_PS) {
if (hw->conf.flags & IEEE80211_CONF_PS) { if (hw->conf.flags & IEEE80211_CONF_PS) {
...@@ -99,6 +96,10 @@ static int rtw_ops_config(struct ieee80211_hw *hw, u32 changed) ...@@ -99,6 +96,10 @@ static int rtw_ops_config(struct ieee80211_hw *hw, u32 changed)
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) if (changed & IEEE80211_CONF_CHANGE_CHANNEL)
rtw_set_channel(rtwdev); rtw_set_channel(rtwdev);
if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
(hw->conf.flags & IEEE80211_CONF_IDLE))
rtw_enter_ips(rtwdev);
out: out:
mutex_unlock(&rtwdev->mutex); mutex_unlock(&rtwdev->mutex);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment