aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/htc_drv_main.c
diff options
context:
space:
mode:
authorSujith Manoharan <Sujith.Manoharan@atheros.com>2010-12-28 03:58:37 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-01-04 14:43:00 -0500
commit039a07215e0fca00c450f4bf1dc9b458bdfe8559 (patch)
treeac6942c132aed0367134e13b3c5e7d5e46d6fb34 /drivers/net/wireless/ath/ath9k/htc_drv_main.c
parent73908674c6957082e8ab57daed57d2bb97a1ebba (diff)
ath9k_htc: Fix fast channel change
When returning to the operating channel, a full HW reset has to be done instead of a fast channel change. Since sw_scan_complete() is called after the config() call for the home channel, we end up doing a FCC. Fix this issue by checking the OFFCHANNEL flag to determine FCC. Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/htc_drv_main.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_main.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index 07f10ddee6a..6da5e886730 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -177,7 +177,7 @@ static int ath9k_htc_set_channel(struct ath9k_htc_priv *priv,
177 struct ath_hw *ah = priv->ah; 177 struct ath_hw *ah = priv->ah;
178 struct ath_common *common = ath9k_hw_common(ah); 178 struct ath_common *common = ath9k_hw_common(ah);
179 struct ieee80211_conf *conf = &common->hw->conf; 179 struct ieee80211_conf *conf = &common->hw->conf;
180 bool fastcc = true; 180 bool fastcc;
181 struct ieee80211_channel *channel = hw->conf.channel; 181 struct ieee80211_channel *channel = hw->conf.channel;
182 struct ath9k_hw_cal_data *caldata; 182 struct ath9k_hw_cal_data *caldata;
183 enum htc_phymode mode; 183 enum htc_phymode mode;
@@ -188,8 +188,7 @@ static int ath9k_htc_set_channel(struct ath9k_htc_priv *priv,
188 if (priv->op_flags & OP_INVALID) 188 if (priv->op_flags & OP_INVALID)
189 return -EIO; 189 return -EIO;
190 190
191 if (priv->op_flags & OP_FULL_RESET) 191 fastcc = !!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL);
192 fastcc = false;
193 192
194 ath9k_htc_ps_wakeup(priv); 193 ath9k_htc_ps_wakeup(priv);
195 htc_stop(priv->htc); 194 htc_stop(priv->htc);
@@ -231,8 +230,6 @@ static int ath9k_htc_set_channel(struct ath9k_htc_priv *priv,
231 goto err; 230 goto err;
232 231
233 htc_start(priv->htc); 232 htc_start(priv->htc);
234
235 priv->op_flags &= ~OP_FULL_RESET;
236err: 233err:
237 ath9k_htc_ps_restore(priv); 234 ath9k_htc_ps_restore(priv);
238 return ret; 235 return ret;
@@ -1847,7 +1844,6 @@ static void ath9k_htc_sw_scan_complete(struct ieee80211_hw *hw)
1847 spin_lock_bh(&priv->beacon_lock); 1844 spin_lock_bh(&priv->beacon_lock);
1848 priv->op_flags &= ~OP_SCANNING; 1845 priv->op_flags &= ~OP_SCANNING;
1849 spin_unlock_bh(&priv->beacon_lock); 1846 spin_unlock_bh(&priv->beacon_lock);
1850 priv->op_flags |= OP_FULL_RESET;
1851 if (priv->op_flags & OP_ASSOCIATED) { 1847 if (priv->op_flags & OP_ASSOCIATED) {
1852 ath9k_htc_beacon_config(priv, priv->vif); 1848 ath9k_htc_beacon_config(priv, priv->vif);
1853 ath_start_ani(priv); 1849 ath_start_ani(priv);