iwlagn: 5000 do not support idle mode
authorWey-Yi Guy <wey-yi.w.guy@intel.com>
Tue, 2 Aug 2011 16:08:37 +0000 (09:08 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 2 Aug 2011 17:50:56 +0000 (13:50 -0400)
5000 series has issue supporting power save idle mode:

commit 9dc2153315650eae220898668b6aa56a25c130be

iwlwifi: always support idle mode for agn devices

For agn devices, always support idle mode which help power
consumption in idle unassociated state.

the above changes cause 5000 become not stable when power management is "on"

http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2312

Cc: stable@kernel.org #2.6.39, #3.0.0
Reported-by: Devin J Pohly <djpohly+iwl@gmail.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-5000.c
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-power.c

index 3eeb12ebe6e9b3e39b6dd9c7a21b6709ff3fb286..c95cefd529dc31d13819b037006495e7798e032f 100644 (file)
@@ -365,6 +365,7 @@ static struct iwl_base_params iwl5000_base_params = {
        .chain_noise_scale = 1000,
        .wd_timeout = IWL_LONG_WD_TIMEOUT,
        .max_event_log_size = 512,
+       .no_idle_support = true,
 };
 static struct iwl_ht_params iwl5000_ht_params = {
        .ht_greenfield_support = true,
index 3e6bb734dcb71a5af93318e44c03240481d1dc9b..02817a43855097e9c12bac9a4aa5a7de2caf9124 100644 (file)
@@ -135,6 +135,7 @@ struct iwl_mod_params {
  * @temperature_kelvin: temperature report by uCode in kelvin
  * @max_event_log_size: size of event log buffer size for ucode event logging
  * @shadow_reg_enable: HW shadhow register bit
+ * @no_idle_support: do not support idle mode
  */
 struct iwl_base_params {
        int eeprom_size;
@@ -156,6 +157,7 @@ struct iwl_base_params {
        bool temperature_kelvin;
        u32 max_event_log_size;
        const bool shadow_reg_enable;
+       const bool no_idle_support;
 };
 /*
  * @advanced_bt_coexist: support advanced bt coexist
index 3ec619c6881c06f408e00e9896539734309fb5c5..cd64df05f9ed7442c47bbffff722666e36808df1 100644 (file)
@@ -349,7 +349,8 @@ static void iwl_power_build_cmd(struct iwl_priv *priv,
 
        if (priv->wowlan)
                iwl_static_sleep_cmd(priv, cmd, IWL_POWER_INDEX_5, dtimper);
-       else if (priv->hw->conf.flags & IEEE80211_CONF_IDLE)
+       else if (!priv->cfg->base_params->no_idle_support &&
+                priv->hw->conf.flags & IEEE80211_CONF_IDLE)
                iwl_static_sleep_cmd(priv, cmd, IWL_POWER_INDEX_5, 20);
        else if (iwl_tt_is_low_power_state(priv)) {
                /* in thermal throttling low power state */