|
@@ -436,10 +436,12 @@ static void ieee80211_enable_ps(struct ieee80211_local *local,
|
|
|
if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)
|
|
|
ieee80211_send_nullfunc(local, sdata, 1);
|
|
|
|
|
|
- if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) {
|
|
|
- conf->flags |= IEEE80211_CONF_PS;
|
|
|
- ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
|
|
|
- }
|
|
|
+ if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) &&
|
|
|
+ (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS))
|
|
|
+ return;
|
|
|
+
|
|
|
+ conf->flags |= IEEE80211_CONF_PS;
|
|
|
+ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -558,7 +560,8 @@ void ieee80211_dynamic_ps_enable_work(struct work_struct *work)
|
|
|
(!(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)))
|
|
|
ieee80211_send_nullfunc(local, sdata, 1);
|
|
|
|
|
|
- if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) ||
|
|
|
+ if (!((local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) &&
|
|
|
+ (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)) ||
|
|
|
(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)) {
|
|
|
ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED;
|
|
|
local->hw.conf.flags |= IEEE80211_CONF_PS;
|