+@@ -367,10 +369,9 @@ struct ath9k_channel {
+ #define IS_CHAN_2GHZ(_c) (((_c)->channelFlags & CHANNEL_2GHZ) != 0)
+ #define IS_CHAN_HALF_RATE(_c) (((_c)->channelFlags & CHANNEL_HALF) != 0)
+ #define IS_CHAN_QUARTER_RATE(_c) (((_c)->channelFlags & CHANNEL_QUARTER) != 0)
+-#define IS_CHAN_A_5MHZ_SPACED(_c) \
++#define IS_CHAN_A_FAST_CLOCK(_ah, _c) \
+ ((((_c)->channelFlags & CHANNEL_5GHZ) != 0) && \
+- (((_c)->channel % 20) != 0) && \
+- (((_c)->channel % 10) != 0))
++ ((_ah)->caps.hw_caps & ATH9K_HW_CAP_FASTCLOCK))
+
+ /* These macros check chanmode and not channelFlags */
+ #define IS_CHAN_B(_c) ((_c)->chanmode == CHANNEL_B)
+@@ -718,6 +719,7 @@ struct ath_hw {
+ u32 *addac5416_21;
+ u32 *bank6Temp;
+
++ u8 txpower_limit;
+ int16_t txpower_indexoffset;
+ int coverage_class;
+ u32 beacon_interval;
+--- a/drivers/net/wireless/ath/ath9k/mac.c
++++ b/drivers/net/wireless/ath/ath9k/mac.c
+@@ -878,10 +878,12 @@ enum ath9k_int ath9k_hw_set_interrupts(s
+ if (ints & ATH9K_INT_TX) {
+ if (ah->config.tx_intr_mitigation)
+ mask |= AR_IMR_TXMINTR | AR_IMR_TXINTM;
+- if (ah->txok_interrupt_mask)
+- mask |= AR_IMR_TXOK;
+- if (ah->txdesc_interrupt_mask)
+- mask |= AR_IMR_TXDESC;
++ else {
++ if (ah->txok_interrupt_mask)
++ mask |= AR_IMR_TXOK;
++ if (ah->txdesc_interrupt_mask)
++ mask |= AR_IMR_TXDESC;
++ }
+ if (ah->txerr_interrupt_mask)
+ mask |= AR_IMR_TXERR;
+ if (ah->txeol_interrupt_mask)
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -2291,6 +2291,8 @@ void ath_tx_edma_tasklet(struct ath_soft
+ ath_tx_complete_buf(sc, bf, txq, &bf_head,
+ &txs, txok, 0);
+
++ ath_wake_mac80211_queue(sc, txq);
++
+ spin_lock_bh(&txq->axq_lock);
+ if (!list_empty(&txq->txq_fifo_pending)) {
+ INIT_LIST_HEAD(&bf_head);