|
@@ -2486,6 +2486,7 @@ static void iwl4965_post_associate(struct iwl_priv *priv)
|
|
|
if (!priv->vif || !priv->is_open)
|
|
|
return;
|
|
|
|
|
|
+ iwl_power_cancel_timeout(priv);
|
|
|
iwl_scan_cancel_timeout(priv, 200);
|
|
|
|
|
|
conf = ieee80211_get_hw_conf(priv->hw);
|
|
@@ -2550,10 +2551,6 @@ static void iwl4965_post_associate(struct iwl_priv *priv)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- /* Enable Rx differential gain and sensitivity calibrations */
|
|
|
- iwl_chain_noise_reset(priv);
|
|
|
- priv->start_calib = 1;
|
|
|
-
|
|
|
if (priv->iw_mode == IEEE80211_IF_TYPE_IBSS)
|
|
|
priv->assoc_station_added = 1;
|
|
|
|
|
@@ -2561,7 +2558,12 @@ static void iwl4965_post_associate(struct iwl_priv *priv)
|
|
|
iwl_activate_qos(priv, 0);
|
|
|
spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
|
|
|
- iwl_power_update_mode(priv, 0);
|
|
|
+ iwl_power_enable_management(priv);
|
|
|
+
|
|
|
+ /* Enable Rx differential gain and sensitivity calibrations */
|
|
|
+ iwl_chain_noise_reset(priv);
|
|
|
+ priv->start_calib = 1;
|
|
|
+
|
|
|
/* we have just associated, don't start scan too early */
|
|
|
priv->next_scan_jiffies = jiffies + IWL_DELAY_NEXT_SCAN;
|
|
|
}
|
|
@@ -3535,6 +3537,16 @@ static void iwl4965_mac_reset_tsf(struct ieee80211_hw *hw)
|
|
|
/* Per mac80211.h: This is only used in IBSS mode... */
|
|
|
if (priv->iw_mode != IEEE80211_IF_TYPE_IBSS) {
|
|
|
|
|
|
+ /* switch to CAM during association period.
|
|
|
+ * the ucode will block any association/authentication
|
|
|
+ * frome during assiciation period if it can not hear
|
|
|
+ * the AP because of PM. the timer enable PM back is
|
|
|
+ * association do not complete
|
|
|
+ */
|
|
|
+ if (priv->hw->conf.channel->flags & (IEEE80211_CHAN_PASSIVE_SCAN |
|
|
|
+ IEEE80211_CHAN_RADAR))
|
|
|
+ iwl_power_disable_management(priv, 3000);
|
|
|
+
|
|
|
IWL_DEBUG_MAC80211("leave - not in IBSS\n");
|
|
|
mutex_unlock(&priv->mutex);
|
|
|
return;
|
|
@@ -4087,6 +4099,7 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)
|
|
|
/* FIXME : remove when resolved PENDING */
|
|
|
INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);
|
|
|
iwl_setup_scan_deferred_work(priv);
|
|
|
+ iwl_setup_power_deferred_work(priv);
|
|
|
|
|
|
if (priv->cfg->ops->lib->setup_deferred_work)
|
|
|
priv->cfg->ops->lib->setup_deferred_work(priv);
|
|
@@ -4106,6 +4119,7 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)
|
|
|
|
|
|
cancel_delayed_work_sync(&priv->init_alive_start);
|
|
|
cancel_delayed_work(&priv->scan_check);
|
|
|
+ cancel_delayed_work_sync(&priv->set_power_save);
|
|
|
cancel_delayed_work(&priv->alive_start);
|
|
|
cancel_work_sync(&priv->beacon_update);
|
|
|
del_timer_sync(&priv->statistics_periodic);
|