]> Pileus Git - ~andy/linux/blobdiff - drivers/net/wireless/ath/ath9k/hw.c
ath9k_hw: allow fast channel change when only CHANNEL_HT changes
[~andy/linux] / drivers / net / wireless / ath / ath9k / hw.c
index 02eff2a8a280254533e235b6992489dc0bb73b32..fe3537f6ec5838aead7c6489fa06afa35d80e64f 100644 (file)
@@ -1502,8 +1502,9 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
        int r;
 
        if (pCap->hw_caps & ATH9K_HW_CAP_FCC_BAND_SWITCH) {
-               band_switch = IS_CHAN_5GHZ(ah->curchan) != IS_CHAN_5GHZ(chan);
-               mode_diff = (chan->channelFlags != ah->curchan->channelFlags);
+               u32 flags_diff = chan->channelFlags ^ ah->curchan->channelFlags;
+               band_switch = !!(flags_diff & CHANNEL_5GHZ);
+               mode_diff = !!(flags_diff & ~CHANNEL_HT);
        }
 
        for (qnum = 0; qnum < AR_NUM_QCU; qnum++) {
@@ -1815,7 +1816,7 @@ static int ath9k_hw_do_fastcc(struct ath_hw *ah, struct ath9k_channel *chan)
         * If cross-band fcc is not supoprted, bail out if channelFlags differ.
         */
        if (!(pCap->hw_caps & ATH9K_HW_CAP_FCC_BAND_SWITCH) &&
-           chan->channelFlags != ah->curchan->channelFlags)
+           ((chan->channelFlags ^ ah->curchan->channelFlags) & ~CHANNEL_HT))
                goto fail;
 
        if (!ath9k_hw_check_alive(ah))