diff --git a/package/mac80211/patches/571-ath9k_fix_dma_stop.patch b/package/mac80211/patches/571-ath9k_fix_dma_stop.patch
index 072e657e2e4491058f680074fe0e9f48fa14f0a4..9f7cfa82ec0b50374d437c51716887b9f6a3a770 100644
--- a/package/mac80211/patches/571-ath9k_fix_dma_stop.patch
+++ b/package/mac80211/patches/571-ath9k_fix_dma_stop.patch
@@ -25,7 +25,7 @@
  	if (npend)
 --- a/drivers/net/wireless/ath/ath9k/mac.c
 +++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -143,6 +143,33 @@ bool ath9k_hw_updatetxtriglevel(struct a
+@@ -143,6 +143,34 @@ bool ath9k_hw_updatetxtriglevel(struct a
  }
  EXPORT_SYMBOL(ath9k_hw_updatetxtriglevel);
  
@@ -40,11 +40,12 @@
 +	REG_SET_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF);
 +
 +	for (q = 0; q < AR_NUM_QCU; q++) {
-+		for (i = 1000; i > 0; i--) {
++		for (i = 0; i < 1000; i++) {
++			if (i)
++				udelay(5);
++
 +			if (!ath9k_hw_numtxpending(ah, q))
 +				break;
-+
-+			udelay(5);
 +		}
 +	}
 +
diff --git a/package/mac80211/patches/572-ath9k_fix_tx_flush.patch b/package/mac80211/patches/572-ath9k_fix_tx_flush.patch
index ddeeb145bdbd4394eada9155df23958271423a41..630abc6fdcd6b38d51ec70540100687267043f60 100644
--- a/package/mac80211/patches/572-ath9k_fix_tx_flush.patch
+++ b/package/mac80211/patches/572-ath9k_fix_tx_flush.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2149,56 +2149,40 @@ static void ath9k_set_coverage_class(str
+@@ -2149,56 +2149,42 @@ static void ath9k_set_coverage_class(str
  
  static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
  {
@@ -32,6 +32,12 @@
 -		}
 +	if (drop)
 +		timeout = 1;
++
++	for (j = 0; j < timeout; j++) {
++		int npend = 0;
++
++		if (j)
++			usleep_range(1000, 2000);
  
 -		if (drop || ath9k_has_pending_frames(sc, txq)) {
 -			ath_dbg(common, ATH_DBG_QUEUE, "Drop frames from hw queue:%d\n",
@@ -46,8 +52,6 @@
 -			ath9k_ps_restore(sc);
 -			if (npend)
 -				break;
-+	for (j = 0; j < timeout; j++) {
-+		int npend = 0;
 +		for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
 +			if (!ATH_TXQ_SETUP(sc, i))
 +				continue;
@@ -59,8 +63,6 @@
 +
 +		if (!npend)
 +		    goto out;
-+
-+		usleep_range(1000, 2000);
  	}
  
 -	if (npend) {
diff --git a/package/mac80211/patches/573-ath9k_beacon_stop.patch b/package/mac80211/patches/573-ath9k_beacon_stop.patch
index 7a9f63fc70d3496d3c94ddad947b8b59502d64c6..5574d171680b63c07d209616bf4046fbb5fd403a 100644
--- a/package/mac80211/patches/573-ath9k_beacon_stop.patch
+++ b/package/mac80211/patches/573-ath9k_beacon_stop.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/mac.c
 +++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -170,84 +170,30 @@ void ath9k_hw_abort_tx_dma(struct ath_hw
+@@ -171,84 +171,31 @@ void ath9k_hw_abort_tx_dma(struct ath_hw
  }
  EXPORT_SYMBOL(ath9k_hw_abort_tx_dma);
  
@@ -34,11 +34,11 @@
  	REG_WRITE(ah, AR_Q_TXD, 1 << q);
  
  	for (wait = wait_time; wait != 0; wait--) {
- 		if (ath9k_hw_numtxpending(ah, q) == 0)
- 			break;
+-		if (ath9k_hw_numtxpending(ah, q) == 0)
+-			break;
 -		udelay(ATH9K_TIME_QUANTUM);
 -	}
- 
+-
 -	if (ath9k_hw_numtxpending(ah, q)) {
 -		ath_dbg(common, ATH_DBG_QUEUE,
 -			"%s: Num of pending TX Frames %d on Q %d\n",
@@ -73,11 +73,13 @@
 -					"Failed to stop TX DMA in 100 msec after killing last frame\n");
 -				break;
 -			}
--			udelay(ATH9K_TIME_QUANTUM);
++		if (wait != wait_time)
+ 			udelay(ATH9K_TIME_QUANTUM);
 -		}
--
+ 
 -		REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH);
-+		udelay(ATH9K_TIME_QUANTUM);
++		if (ath9k_hw_numtxpending(ah, q) == 0)
++			break;
  	}
  
  	REG_WRITE(ah, AR_Q_TXD, 0);
diff --git a/package/mac80211/patches/581-mac80211_chantype_change_fix.patch b/package/mac80211/patches/581-mac80211_chantype_change_fix.patch
index 87e277298a7a875d9970a3cbe418bb4c1dba0210..b855d1d80988d21393182813b892b433c1ed4351 100644
--- a/package/mac80211/patches/581-mac80211_chantype_change_fix.patch
+++ b/package/mac80211/patches/581-mac80211_chantype_change_fix.patch
@@ -1,10 +1,12 @@
 --- a/net/mac80211/chan.c
 +++ b/net/mac80211/chan.c
-@@ -76,6 +76,7 @@ bool ieee80211_set_channel_type(struct i
- 
+@@ -77,6 +77,9 @@ bool ieee80211_set_channel_type(struct i
  		switch (tmp->vif.bss_conf.channel_type) {
  		case NL80211_CHAN_NO_HT:
-+			break;
  		case NL80211_CHAN_HT20:
++			if (superchan > tmp->vif.bss_conf.channel_type)
++				break;
++
  			superchan = tmp->vif.bss_conf.channel_type;
  			break;
+ 		case NL80211_CHAN_HT40PLUS: