diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-power.c | 5 |
4 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index 6a13bfbc9d98..ca61d3796cef 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -2346,6 +2346,7 @@ struct iwl_cfg iwl4965_agn_cfg = { | |||
2346 | .mod_params = &iwl4965_mod_params, | 2346 | .mod_params = &iwl4965_mod_params, |
2347 | .use_isr_legacy = true, | 2347 | .use_isr_legacy = true, |
2348 | .ht_greenfield_support = false, | 2348 | .ht_greenfield_support = false, |
2349 | .broken_powersave = true, | ||
2349 | }; | 2350 | }; |
2350 | 2351 | ||
2351 | /* Module firmware */ | 2352 | /* Module firmware */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index acfd7b40afb8..fd26c0dc9c54 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -1585,9 +1585,12 @@ int iwl_setup_mac(struct iwl_priv *priv) | |||
1585 | hw->flags = IEEE80211_HW_SIGNAL_DBM | | 1585 | hw->flags = IEEE80211_HW_SIGNAL_DBM | |
1586 | IEEE80211_HW_NOISE_DBM | | 1586 | IEEE80211_HW_NOISE_DBM | |
1587 | IEEE80211_HW_AMPDU_AGGREGATION | | 1587 | IEEE80211_HW_AMPDU_AGGREGATION | |
1588 | IEEE80211_HW_SPECTRUM_MGMT | | 1588 | IEEE80211_HW_SPECTRUM_MGMT; |
1589 | IEEE80211_HW_SUPPORTS_PS | | 1589 | |
1590 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS; | 1590 | if (!priv->cfg->broken_powersave) |
1591 | hw->flags |= IEEE80211_HW_SUPPORTS_PS | | ||
1592 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS; | ||
1593 | |||
1591 | hw->wiphy->interface_modes = | 1594 | hw->wiphy->interface_modes = |
1592 | BIT(NL80211_IFTYPE_STATION) | | 1595 | BIT(NL80211_IFTYPE_STATION) | |
1593 | BIT(NL80211_IFTYPE_ADHOC); | 1596 | BIT(NL80211_IFTYPE_ADHOC); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index c04d2a270819..7ff9ffb2b702 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -252,6 +252,7 @@ struct iwl_cfg { | |||
252 | const u16 max_ll_items; | 252 | const u16 max_ll_items; |
253 | const bool shadow_ram_support; | 253 | const bool shadow_ram_support; |
254 | const bool ht_greenfield_support; | 254 | const bool ht_greenfield_support; |
255 | const bool broken_powersave; | ||
255 | }; | 256 | }; |
256 | 257 | ||
257 | /*************************** | 258 | /*************************** |
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c b/drivers/net/wireless/iwlwifi/iwl-power.c index 4ec6a8307cc6..60be976afff8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.c +++ b/drivers/net/wireless/iwlwifi/iwl-power.c | |||
@@ -292,8 +292,9 @@ int iwl_power_update_mode(struct iwl_priv *priv, bool force) | |||
292 | else | 292 | else |
293 | dtimper = 1; | 293 | dtimper = 1; |
294 | 294 | ||
295 | /* TT power setting overwrites everything */ | 295 | if (priv->cfg->broken_powersave) |
296 | if (tt->state >= IWL_TI_1) | 296 | iwl_power_sleep_cam_cmd(priv, &cmd); |
297 | else if (tt->state >= IWL_TI_1) | ||
297 | iwl_static_sleep_cmd(priv, &cmd, tt->tt_power_mode, dtimper); | 298 | iwl_static_sleep_cmd(priv, &cmd, tt->tt_power_mode, dtimper); |
298 | else if (!enabled) | 299 | else if (!enabled) |
299 | iwl_power_sleep_cam_cmd(priv, &cmd); | 300 | iwl_power_sleep_cam_cmd(priv, &cmd); |