On Mon, 2011-08-08 at 19:53 -0700, Devin J. Pohly wrote: > From: Wey-Yi Guy <wey-yi.w....@intel.com> > > commit f35291082294ca6737953bbe4e9491ede04ab822 upstream. > > 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: sta...@kernel.org #2.6.39, #3.0.0 > Reported-by: Devin J. Pohly <djpohly+...@gmail.com> > Signed-off-by: Wey-Yi Guy <wey-yi.w....@intel.com> > Signed-off-by: John W. Linville <linvi...@tuxdriver.com> > Signed-off-by: Devin J. Pohly <djpohly+...@gmail.com> > --- > drivers/net/wireless/iwlwifi/iwl-5000.c | 1 + > drivers/net/wireless/iwlwifi/iwl-core.h | 2 ++ > drivers/net/wireless/iwlwifi/iwl-power.c | 3 ++- > 3 files changed, 5 insertions(+), 1 deletions(-) > > diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c > b/drivers/net/wireless/iwlwifi/iwl-5000.c > index e816c27..f1c3f49 100644 > --- a/drivers/net/wireless/iwlwifi/iwl-5000.c > +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c > @@ -421,6 +421,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, > diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h > b/drivers/net/wireless/iwlwifi/iwl-core.h > index a54d416..b76996a 100644 > --- a/drivers/net/wireless/iwlwifi/iwl-core.h > +++ b/drivers/net/wireless/iwlwifi/iwl-core.h > @@ -195,6 +195,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; > @@ -216,6 +217,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 > diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c > b/drivers/net/wireless/iwlwifi/iwl-power.c > index 595c930..4a05a6a 100644 > --- a/drivers/net/wireless/iwlwifi/iwl-power.c > +++ b/drivers/net/wireless/iwlwifi/iwl-power.c > @@ -355,7 +355,8 @@ static void iwl_power_build_cmd(struct iwl_priv *priv, > > dtimper = priv->hw->conf.ps_dtim_period ?: 1; > > - if (priv->hw->conf.flags & IEEE80211_CONF_IDLE) > + 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 */
Thank you very much Devin. Greg, is this works for you? Thanks Wey _______________________________________________ stable mailing list stable@linux.kernel.org http://linux.kernel.org/mailman/listinfo/stable