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

Reply via email to