diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 06041b36f9dad8837500e92a27af645e4ee3d081..4d3edc858c0f1d8f88f8de35f94cb6a99ad9b111 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -253,7 +253,19 @@
  u32 ath_calcrxfilter(struct ath_softc *sc);
  int ath_rx_init(struct ath_softc *sc, int nbufs);
  void ath_rx_cleanup(struct ath_softc *sc);
-@@ -641,7 +639,6 @@ void ath_ant_comb_update(struct ath_soft
+@@ -334,9 +332,8 @@ void ath_txq_lock(struct ath_softc *sc, 
+ void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq);
+ void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq);
+ void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq);
+-bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx);
+-void ath_draintxq(struct ath_softc *sc,
+-		     struct ath_txq *txq, bool retry_tx);
++bool ath_drain_all_txq(struct ath_softc *sc);
++void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq);
+ void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an);
+ void ath_tx_node_cleanup(struct ath_softc *sc, struct ath_node *an);
+ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq);
+@@ -641,7 +638,6 @@ void ath_ant_comb_update(struct ath_soft
  enum sc_op_flags {
  	SC_OP_INVALID,
  	SC_OP_BEACONS,
@@ -271,6 +283,15 @@
  	}
  
  	skb = ieee80211_beacon_get(hw, vif);
+@@ -198,7 +199,7 @@ static struct ath_buf *ath9k_beacon_gene
+ 		if (sc->nvifs > 1) {
+ 			ath_dbg(common, BEACON,
+ 				"Flushing previous cabq traffic\n");
+-			ath_draintxq(sc, cabq, false);
++			ath_draintxq(sc, cabq);
+ 		}
+ 	}
+ 
 @@ -359,7 +360,6 @@ void ath9k_beacon_tasklet(unsigned long 
  		return;
  
@@ -314,12 +335,20 @@
  }
  
 -static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
-+static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx)
++static bool ath_prepare_reset(struct ath_softc *sc)
  {
  	struct ath_hw *ah = sc->sc_ah;
  	bool ret = true;
-@@ -202,14 +202,6 @@ static bool ath_prepare_reset(struct ath
- 	if (!ath_drain_all_txq(sc, retry_tx))
+@@ -196,20 +196,12 @@ static bool ath_prepare_reset(struct ath
+ 	ath9k_debug_samp_bb_mac(sc);
+ 	ath9k_hw_disable_interrupts(ah);
+ 
+-	if (!ath_stoprecv(sc))
++	if (!ath_drain_all_txq(sc))
+ 		ret = false;
+ 
+-	if (!ath_drain_all_txq(sc, retry_tx))
++	if (!ath_stoprecv(sc))
  		ret = false;
  
 -	if (!flush) {
@@ -333,7 +362,15 @@
  	return ret;
  }
  
-@@ -262,11 +254,11 @@ static int ath_reset_internal(struct ath
+@@ -255,18 +247,17 @@ static bool ath_complete_reset(struct at
+ 	return true;
+ }
+ 
+-static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,
+-			      bool retry_tx)
++static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan)
+ {
+ 	struct ath_hw *ah = sc->sc_ah;
  	struct ath_common *common = ath9k_hw_common(ah);
  	struct ath9k_hw_cal_data *caldata = NULL;
  	bool fastcc = true;
@@ -346,7 +383,7 @@
  	spin_lock_bh(&sc->sc_pcu_lock);
  
  	if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) {
-@@ -276,11 +268,10 @@ static int ath_reset_internal(struct ath
+@@ -276,11 +267,10 @@ static int ath_reset_internal(struct ath
  
  	if (!hchan) {
  		fastcc = false;
@@ -355,11 +392,11 @@
  	}
  
 -	if (!ath_prepare_reset(sc, retry_tx, flush))
-+	if (!ath_prepare_reset(sc, retry_tx))
++	if (!ath_prepare_reset(sc))
  		fastcc = false;
  
  	ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
-@@ -302,6 +293,8 @@ static int ath_reset_internal(struct ath
+@@ -302,6 +292,8 @@ static int ath_reset_internal(struct ath
  
  out:
  	spin_unlock_bh(&sc->sc_pcu_lock);
@@ -368,15 +405,81 @@
  	return r;
  }
  
-@@ -804,7 +797,7 @@ static void ath9k_stop(struct ieee80211_
+@@ -319,7 +311,7 @@ static int ath_set_channel(struct ath_so
+ 	if (test_bit(SC_OP_INVALID, &sc->sc_flags))
+ 		return -EIO;
+ 
+-	r = ath_reset_internal(sc, hchan, false);
++	r = ath_reset_internal(sc, hchan);
+ 
+ 	return r;
+ }
+@@ -549,23 +541,21 @@ chip_reset:
+ #undef SCHED_INTR
+ }
+ 
+-static int ath_reset(struct ath_softc *sc, bool retry_tx)
++static int ath_reset(struct ath_softc *sc)
+ {
+-	int r;
++	int i, r;
+ 
+ 	ath9k_ps_wakeup(sc);
+ 
+-	r = ath_reset_internal(sc, NULL, retry_tx);
++	r = ath_reset_internal(sc, NULL);
+ 
+-	if (retry_tx) {
+-		int i;
+-		for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
+-			if (ATH_TXQ_SETUP(sc, i)) {
+-				spin_lock_bh(&sc->tx.txq[i].axq_lock);
+-				ath_txq_schedule(sc, &sc->tx.txq[i]);
+-				spin_unlock_bh(&sc->tx.txq[i].axq_lock);
+-			}
+-		}
++	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
++		if (!ATH_TXQ_SETUP(sc, i))
++			continue;
++
++		spin_lock_bh(&sc->tx.txq[i].axq_lock);
++		ath_txq_schedule(sc, &sc->tx.txq[i]);
++		spin_unlock_bh(&sc->tx.txq[i].axq_lock);
+ 	}
+ 
+ 	ath9k_ps_restore(sc);
+@@ -586,7 +576,7 @@ void ath_reset_work(struct work_struct *
+ {
+ 	struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
+ 
+-	ath_reset(sc, true);
++	ath_reset(sc);
+ }
+ 
+ /**********************/
+@@ -804,7 +794,7 @@ static void ath9k_stop(struct ieee80211_
  		ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
  	}
  
 -	ath_prepare_reset(sc, false, true);
-+	ath_prepare_reset(sc, false);
++	ath_prepare_reset(sc);
  
  	if (sc->rx.frag) {
  		dev_kfree_skb_any(sc->rx.frag);
+@@ -1731,11 +1721,11 @@ static void ath9k_flush(struct ieee80211
+ 	if (drop) {
+ 		ath9k_ps_wakeup(sc);
+ 		spin_lock_bh(&sc->sc_pcu_lock);
+-		drain_txq = ath_drain_all_txq(sc, false);
++		drain_txq = ath_drain_all_txq(sc);
+ 		spin_unlock_bh(&sc->sc_pcu_lock);
+ 
+ 		if (!drain_txq)
+-			ath_reset(sc, false);
++			ath_reset(sc);
+ 
+ 		ath9k_ps_restore(sc);
+ 		ieee80211_wake_queues(hw);
 --- a/drivers/net/wireless/ath/ath9k/recv.c
 +++ b/drivers/net/wireless/ath/ath9k/recv.c
 @@ -248,8 +248,6 @@ rx_init_fail:
@@ -1784,17 +1887,92 @@
  	default:
 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -485,9 +485,7 @@ static int ar5008_hw_rf_alloc_ext_banks(
- 	ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
- 	ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
- 	ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
+@@ -18,6 +18,7 @@
+ #include "hw-ops.h"
+ #include "../regd.h"
+ #include "ar9002_phy.h"
++#include "ar5008_initvals.h"
+ 
+ /* All code below is for AR5008, AR9001, AR9002 */
+ 
+@@ -43,23 +44,16 @@ static const int m2ThreshLowExt_off = 12
+ static const int m1ThreshExt_off = 127;
+ static const int m2ThreshExt_off = 127;
+ 
++static const struct ar5416IniArray bank0 = STATIC_INI_ARRAY(ar5416Bank0);
++static const struct ar5416IniArray bank1 = STATIC_INI_ARRAY(ar5416Bank1);
++static const struct ar5416IniArray bank2 = STATIC_INI_ARRAY(ar5416Bank2);
++static const struct ar5416IniArray bank3 = STATIC_INI_ARRAY(ar5416Bank3);
++static const struct ar5416IniArray bank7 = STATIC_INI_ARRAY(ar5416Bank7);
+ 
+-static void ar5008_rf_bank_setup(u32 *bank, struct ar5416IniArray *array,
+-				 int col)
+-{
+-	int i;
+-
+-	for (i = 0; i < array->ia_rows; i++)
+-		bank[i] = INI_RA(array, i, col);
+-}
+-
+-
+-#define REG_WRITE_RF_ARRAY(iniarray, regData, regWr) \
+-	ar5008_write_rf_array(ah, iniarray, regData, &(regWr))
+-
+-static void ar5008_write_rf_array(struct ath_hw *ah, struct ar5416IniArray *array,
+-				  u32 *data, unsigned int *writecnt)
++static void ar5008_write_bank6(struct ath_hw *ah, unsigned int *writecnt)
+ {
++	struct ar5416IniArray *array = &ah->iniBank6;
++	u32 *data = ah->analogBank6Data;
+ 	int r;
+ 
+ 	ENABLE_REGWRITE_BUFFER(ah);
+@@ -165,7 +159,7 @@ static void ar5008_hw_force_bias(struct 
+ 	ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
+ 
+ 	/* write Bank 6 with new params */
+-	REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes);
++	ar5008_write_bank6(ah, &reg_writes);
+ }
+ 
+ /**
+@@ -469,31 +463,16 @@ static void ar5008_hw_spur_mitigate(stru
+  */
+ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
+ {
+-#define ATH_ALLOC_BANK(bank, size) do { \
+-		bank = devm_kzalloc(ah->dev, sizeof(u32) * size, GFP_KERNEL); \
+-		if (!bank) \
+-			goto error; \
+-	} while (0);
+-
+-	struct ath_common *common = ath9k_hw_common(ah);
++	int size = ah->iniBank6.ia_rows * sizeof(u32);
+ 
+ 	if (AR_SREV_9280_20_OR_LATER(ah))
+ 	    return 0;
+ 
+-	ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows);
+-	ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows);
+-	ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
+-	ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
+-	ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
 -	ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
- 	ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
+-	ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
 -	ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
++	ah->analogBank6Data = devm_kzalloc(ah->dev, size, GFP_KERNEL);
++	if (!ah->analogBank6Data)
++		return -ENOMEM;
  
  	return 0;
- #undef ATH_ALLOC_BANK
-@@ -517,6 +515,7 @@ static bool ar5008_hw_set_rf_regs(struct
+-#undef ATH_ALLOC_BANK
+-error:
+-	ath_err(common, "Cannot allocate RF banks\n");
+-	return -ENOMEM;
+ }
+ 
+ 
+@@ -517,6 +496,7 @@ static bool ar5008_hw_set_rf_regs(struct
  	u32 ob5GHz = 0, db5GHz = 0;
  	u32 ob2GHz = 0, db2GHz = 0;
  	int regWrites = 0;
@@ -1802,10 +1980,22 @@
  
  	/*
  	 * Software does not need to program bank data
-@@ -541,13 +540,9 @@ static bool ar5008_hw_set_rf_regs(struct
- 	/* Setup Bank 6 Write */
- 	ar5008_rf_bank_setup(ah->analogBank3Data, &ah->iniBank3,
- 		      modesIndex);
+@@ -529,25 +509,8 @@ static bool ar5008_hw_set_rf_regs(struct
+ 	/* Setup rf parameters */
+ 	eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
+ 
+-	/* Setup Bank 0 Write */
+-	ar5008_rf_bank_setup(ah->analogBank0Data, &ah->iniBank0, 1);
+-
+-	/* Setup Bank 1 Write */
+-	ar5008_rf_bank_setup(ah->analogBank1Data, &ah->iniBank1, 1);
+-
+-	/* Setup Bank 2 Write */
+-	ar5008_rf_bank_setup(ah->analogBank2Data, &ah->iniBank2, 1);
+-
+-	/* Setup Bank 6 Write */
+-	ar5008_rf_bank_setup(ah->analogBank3Data, &ah->iniBank3,
+-		      modesIndex);
 -	{
 -		int i;
 -		for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) {
@@ -1813,15 +2003,18 @@
 -			    INI_RA(&ah->iniBank6TPC, i, modesIndex);
 -		}
 -	}
-+
 +	for (i = 0; i < ah->iniBank6.ia_rows; i++)
 +		ah->analogBank6Data[i] = INI_RA(&ah->iniBank6, i, modesIndex);
  
  	/* Only the 5 or 2 GHz OB/DB need to be set for a mode */
  	if (eepMinorRev >= 2) {
-@@ -572,18 +567,12 @@ static bool ar5008_hw_set_rf_regs(struct
- 	ar5008_rf_bank_setup(ah->analogBank7Data, &ah->iniBank7, 1);
+@@ -568,22 +531,13 @@ static bool ar5008_hw_set_rf_regs(struct
+ 		}
+ 	}
  
+-	/* Setup Bank 7 Setup */
+-	ar5008_rf_bank_setup(ah->analogBank7Data, &ah->iniBank7, 1);
+-
  	/* Write Analog registers */
 -	REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,
 -			   regWrites);
@@ -1835,12 +2028,12 @@
 -			   regWrites);
 -	REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,
 -			   regWrites);
-+	REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data, regWrites);
-+	REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data, regWrites);
-+	REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data, regWrites);
-+	REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data, regWrites);
-+	REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, regWrites);
-+	REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data, regWrites);
++	REG_WRITE_ARRAY(&bank0, 1, regWrites);
++	REG_WRITE_ARRAY(&bank1, 1, regWrites);
++	REG_WRITE_ARRAY(&bank2, 1, regWrites);
++	REG_WRITE_ARRAY(&bank3, modesIndex, regWrites);
++	ar5008_write_bank6(ah, &regWrites);
++	REG_WRITE_ARRAY(&bank7, 1, regWrites);
  
  	return true;
  }
@@ -1875,10 +2068,16 @@
  		INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac);
  	}
  
-@@ -86,14 +84,11 @@ static void ar9002_hw_init_mode_regs(str
- 		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3);
- 		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7);
+@@ -80,20 +78,11 @@ static void ar9002_hw_init_mode_regs(str
+ 		/* Common for AR5416, AR913x, AR9160 */
+ 		INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain);
  
+-		INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0);
+-		INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1);
+-		INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2);
+-		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3);
+-		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7);
+-
 -		/* Common for AR5416, AR9160 */
 -		if (!AR_SREV_9100(ah))
 -			INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6);
@@ -1893,7 +2092,7 @@
  	}
  
  	/* iniAddac needs to be modified for these chips */
-@@ -104,7 +99,7 @@ static void ar9002_hw_init_mode_regs(str
+@@ -104,7 +93,7 @@ static void ar9002_hw_init_mode_regs(str
  
  		data = devm_kzalloc(ah->dev, size, GFP_KERNEL);
  		if (!data)
@@ -1902,7 +2101,7 @@
  
  		memcpy(data, addac->ia_array, size);
  		addac->ia_array = data;
-@@ -120,6 +115,7 @@ static void ar9002_hw_init_mode_regs(str
+@@ -120,6 +109,7 @@ static void ar9002_hw_init_mode_regs(str
  		INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
  		       ar9287Common_japan_2484_cck_fir_coeff_9287_1_1);
  	}
@@ -1910,7 +2109,7 @@
  }
  
  static void ar9280_20_hw_init_rxgain_ini(struct ath_hw *ah)
-@@ -415,7 +411,10 @@ int ar9002_hw_attach_ops(struct ath_hw *
+@@ -415,7 +405,10 @@ int ar9002_hw_attach_ops(struct ath_hw *
  	struct ath_hw_ops *ops = ath9k_hw_ops(ah);
  	int ret;
  
@@ -1936,7 +2135,28 @@
  static u32 ath9k_hw_compute_pll_control(struct ath_hw *ah,
  					struct ath9k_channel *chan)
  {
-@@ -670,8 +665,6 @@ static int __ath9k_hw_init(struct ath_hw
+@@ -208,7 +203,7 @@ void ath9k_hw_synth_delay(struct ath_hw 
+ 	udelay(hw_delay + BASE_ACTIVATE_DELAY);
+ }
+ 
+-void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array,
++void ath9k_hw_write_array(struct ath_hw *ah, const struct ar5416IniArray *array,
+ 			  int column, unsigned int *writecnt)
+ {
+ 	int r;
+@@ -554,10 +549,8 @@ static int ath9k_hw_post_init(struct ath
+ 		ah->eep_ops->get_eeprom_ver(ah),
+ 		ah->eep_ops->get_eeprom_rev(ah));
+ 
+-	if (ah->config.enable_ani) {
+-		ath9k_hw_ani_setup(ah);
++	if (ah->config.enable_ani)
+ 		ath9k_hw_ani_init(ah);
+-	}
+ 
+ 	return 0;
+ }
+@@ -670,8 +663,6 @@ static int __ath9k_hw_init(struct ath_hw
  	if (!AR_SREV_9300_20_OR_LATER(ah))
  		ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
  
@@ -1963,24 +2183,56 @@
  	void (*init_mode_gain_regs)(struct ath_hw *ah);
  	void (*setup_calibration)(struct ath_hw *ah,
  				  struct ath9k_cal_list *currCal);
-@@ -815,9 +813,7 @@ struct ath_hw {
- 	u32 *analogBank2Data;
- 	u32 *analogBank3Data;
+@@ -810,14 +808,7 @@ struct ath_hw {
+ 	struct ath_hw_ops ops;
+ 
+ 	/* Used to program the radio on non single-chip devices */
+-	u32 *analogBank0Data;
+-	u32 *analogBank1Data;
+-	u32 *analogBank2Data;
+-	u32 *analogBank3Data;
  	u32 *analogBank6Data;
 -	u32 *analogBank6TPCData;
- 	u32 *analogBank7Data;
+-	u32 *analogBank7Data;
 -	u32 *bank6Temp;
  
  	int coverage_class;
  	u32 slottime;
-@@ -858,7 +854,6 @@ struct ath_hw {
- 	struct ar5416IniArray iniBank2;
- 	struct ar5416IniArray iniBank3;
+@@ -826,10 +817,6 @@ struct ath_hw {
+ 	/* ANI */
+ 	u32 proc_phyerr;
+ 	u32 aniperiod;
+-	int totalSizeDesired[5];
+-	int coarse_high[5];
+-	int coarse_low[5];
+-	int firpwr[5];
+ 	enum ath9k_ani_cmd ani_function;
+ 	u32 ani_skip_count;
+ 
+@@ -852,14 +839,8 @@ struct ath_hw {
+ 
+ 	struct ar5416IniArray iniModes;
+ 	struct ar5416IniArray iniCommon;
+-	struct ar5416IniArray iniBank0;
+ 	struct ar5416IniArray iniBB_RfGain;
+-	struct ar5416IniArray iniBank1;
+-	struct ar5416IniArray iniBank2;
+-	struct ar5416IniArray iniBank3;
  	struct ar5416IniArray iniBank6;
 -	struct ar5416IniArray iniBank6TPC;
- 	struct ar5416IniArray iniBank7;
+-	struct ar5416IniArray iniBank7;
  	struct ar5416IniArray iniAddac;
  	struct ar5416IniArray iniPcieSerdes;
+ #ifdef CONFIG_PM_SLEEP
+@@ -975,7 +956,7 @@ void ath9k_hw_setantenna(struct ath_hw *
+ void ath9k_hw_synth_delay(struct ath_hw *ah, struct ath9k_channel *chan,
+ 			  int hw_delay);
+ bool ath9k_hw_wait(struct ath_hw *ah, u32 reg, u32 mask, u32 val, u32 timeout);
+-void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array,
++void ath9k_hw_write_array(struct ath_hw *ah, const struct ar5416IniArray *array,
+ 			  int column, unsigned int *writecnt);
+ u32 ath9k_hw_reverse_bits(u32 val, u32 n);
+ u16 ath9k_hw_computetxtime(struct ath_hw *ah,
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
 @@ -1677,10 +1677,10 @@ netdev_tx_t ieee80211_monitor_start_xmit
@@ -1998,3 +2250,323 @@
  
  	/*
  	 * Frame injection is not allowed if beaconing is not allowed
+--- a/drivers/net/wireless/ath/ath9k/ani.c
++++ b/drivers/net/wireless/ath/ath9k/ani.c
+@@ -152,7 +152,8 @@ static void ath9k_hw_set_ofdm_nil(struct
+ 	ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
+ 		aniState->ofdmNoiseImmunityLevel,
+ 		immunityLevel, BEACON_RSSI(ah),
+-		aniState->rssiThrLow, aniState->rssiThrHigh);
++		ATH9K_ANI_RSSI_THR_LOW,
++		ATH9K_ANI_RSSI_THR_HIGH);
+ 
+ 	if (!scan)
+ 		aniState->ofdmNoiseImmunityLevel = immunityLevel;
+@@ -173,7 +174,7 @@ static void ath9k_hw_set_ofdm_nil(struct
+ 
+ 	weak_sig = entry_ofdm->ofdm_weak_signal_on;
+ 	if (ah->opmode == NL80211_IFTYPE_STATION &&
+-	    BEACON_RSSI(ah) <= aniState->rssiThrHigh)
++	    BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_HIGH)
+ 		weak_sig = true;
+ 
+ 	if (aniState->ofdmWeakSigDetect != weak_sig)
+@@ -216,11 +217,11 @@ static void ath9k_hw_set_cck_nil(struct 
+ 
+ 	ath_dbg(common, ANI, "**** ccklevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
+ 		aniState->cckNoiseImmunityLevel, immunityLevel,
+-		BEACON_RSSI(ah), aniState->rssiThrLow,
+-		aniState->rssiThrHigh);
++		BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
++		ATH9K_ANI_RSSI_THR_HIGH);
+ 
+ 	if (ah->opmode == NL80211_IFTYPE_STATION &&
+-	    BEACON_RSSI(ah) <= aniState->rssiThrLow &&
++	    BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
+ 	    immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
+ 		immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
+ 
+@@ -418,9 +419,6 @@ void ath9k_hw_ani_monitor(struct ath_hw 
+ 		return;
+ 
+ 	aniState = &ah->curchan->ani;
+-	if (WARN_ON(!aniState))
+-		return;
+-
+ 	if (!ath9k_hw_ani_read_counters(ah))
+ 		return;
+ 
+@@ -489,23 +487,6 @@ void ath9k_hw_disable_mib_counters(struc
+ }
+ EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
+ 
+-void ath9k_hw_ani_setup(struct ath_hw *ah)
+-{
+-	int i;
+-
+-	static const int totalSizeDesired[] = { -55, -55, -55, -55, -62 };
+-	static const int coarseHigh[] = { -14, -14, -14, -14, -12 };
+-	static const int coarseLow[] = { -64, -64, -64, -64, -70 };
+-	static const int firpwr[] = { -78, -78, -78, -78, -80 };
+-
+-	for (i = 0; i < 5; i++) {
+-		ah->totalSizeDesired[i] = totalSizeDesired[i];
+-		ah->coarse_high[i] = coarseHigh[i];
+-		ah->coarse_low[i] = coarseLow[i];
+-		ah->firpwr[i] = firpwr[i];
+-	}
+-}
+-
+ void ath9k_hw_ani_init(struct ath_hw *ah)
+ {
+ 	struct ath_common *common = ath9k_hw_common(ah);
+@@ -531,8 +512,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah
+ 
+ 		ani->ofdmsTurn = true;
+ 
+-		ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH;
+-		ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW;
+ 		ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
+ 		ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+ 		ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
+--- a/drivers/net/wireless/ath/ath9k/ani.h
++++ b/drivers/net/wireless/ath/ath9k/ani.h
+@@ -104,7 +104,6 @@ struct ath9k_ani_default {
+ };
+ 
+ struct ar5416AniState {
+-	struct ath9k_channel *c;
+ 	u8 noiseImmunityLevel;
+ 	u8 ofdmNoiseImmunityLevel;
+ 	u8 cckNoiseImmunityLevel;
+@@ -113,15 +112,9 @@ struct ar5416AniState {
+ 	u8 spurImmunityLevel;
+ 	u8 firstepLevel;
+ 	u8 ofdmWeakSigDetect;
+-	u8 cckWeakSigThreshold;
+ 	u32 listenTime;
+-	int32_t rssiThrLow;
+-	int32_t rssiThrHigh;
+ 	u32 ofdmPhyErrCount;
+ 	u32 cckPhyErrCount;
+-	int16_t pktRssi[2];
+-	int16_t ofdmErrRssi[2];
+-	int16_t cckErrRssi[2];
+ 	struct ath9k_ani_default iniDef;
+ };
+ 
+@@ -147,7 +140,6 @@ struct ar5416Stats {
+ 
+ void ath9k_enable_mib_counters(struct ath_hw *ah);
+ void ath9k_hw_disable_mib_counters(struct ath_hw *ah);
+-void ath9k_hw_ani_setup(struct ath_hw *ah);
+ void ath9k_hw_ani_init(struct ath_hw *ah);
+ 
+ #endif /* ANI_H */
+--- a/drivers/net/wireless/ath/ath9k/calib.h
++++ b/drivers/net/wireless/ath/ath9k/calib.h
+@@ -33,6 +33,12 @@ struct ar5416IniArray {
+ 	u32 ia_columns;
+ };
+ 
++#define STATIC_INI_ARRAY(array) {			\
++		.ia_array = (u32 *)(array),		\
++		.ia_rows = ARRAY_SIZE(array),		\
++		.ia_columns = ARRAY_SIZE(array[0]),	\
++	}
++
+ #define INIT_INI_ARRAY(iniarray, array) do {	\
+ 		(iniarray)->ia_array = (u32 *)(array);		\
+ 		(iniarray)->ia_rows = ARRAY_SIZE(array);	\
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -378,7 +378,7 @@ static void ath_tx_count_frames(struct a
+ 
+ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
+ 				 struct ath_buf *bf, struct list_head *bf_q,
+-				 struct ath_tx_status *ts, int txok, bool retry)
++				 struct ath_tx_status *ts, int txok)
+ {
+ 	struct ath_node *an = NULL;
+ 	struct sk_buff *skb;
+@@ -490,7 +490,7 @@ static void ath_tx_complete_aggr(struct 
+ 		} else if (!isaggr && txok) {
+ 			/* transmit completion */
+ 			acked_cnt++;
+-		} else if ((tid->state & AGGR_CLEANUP) || !retry) {
++		} else if (tid->state & AGGR_CLEANUP) {
+ 			/*
+ 			 * cleanup in progress, just fail
+ 			 * the un-acked sub-frames
+@@ -604,6 +604,37 @@ static void ath_tx_complete_aggr(struct 
+ 		ath9k_queue_reset(sc, RESET_TYPE_TX_ERROR);
+ }
+ 
++static bool bf_is_ampdu_not_probing(struct ath_buf *bf)
++{
++    struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu);
++    return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
++}
++
++static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
++				  struct ath_tx_status *ts, struct ath_buf *bf,
++				  struct list_head *bf_head)
++{
++	bool txok, flush;
++
++	txok = !(ts->ts_status & ATH9K_TXERR_MASK);
++	flush = !!(ts->ts_status & ATH9K_TX_FLUSH);
++	txq->axq_tx_inprogress = false;
++
++	txq->axq_depth--;
++	if (bf_is_ampdu_not_probing(bf))
++		txq->axq_ampdu_depth--;
++
++	if (!bf_isampdu(bf)) {
++		if (!flush)
++			ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok);
++		ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok);
++	} else
++		ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok);
++
++	if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && !flush)
++		ath_txq_schedule(sc, txq);
++}
++
+ static bool ath_lookup_legacy(struct ath_buf *bf)
+ {
+ 	struct sk_buff *skb;
+@@ -1331,23 +1362,6 @@ void ath_tx_aggr_resume(struct ath_softc
+ /* Queue Management */
+ /********************/
+ 
+-static void ath_txq_drain_pending_buffers(struct ath_softc *sc,
+-					  struct ath_txq *txq)
+-{
+-	struct ath_atx_ac *ac, *ac_tmp;
+-	struct ath_atx_tid *tid, *tid_tmp;
+-
+-	list_for_each_entry_safe(ac, ac_tmp, &txq->axq_acq, list) {
+-		list_del(&ac->list);
+-		ac->sched = false;
+-		list_for_each_entry_safe(tid, tid_tmp, &ac->tid_q, list) {
+-			list_del(&tid->list);
+-			tid->sched = false;
+-			ath_tid_drain(sc, txq, tid);
+-		}
+-	}
+-}
+-
+ struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
+ {
+ 	struct ath_hw *ah = sc->sc_ah;
+@@ -1470,14 +1484,8 @@ int ath_cabq_update(struct ath_softc *sc
+ 	return 0;
+ }
+ 
+-static bool bf_is_ampdu_not_probing(struct ath_buf *bf)
+-{
+-    struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu);
+-    return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
+-}
+-
+ static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq,
+-			       struct list_head *list, bool retry_tx)
++			       struct list_head *list)
+ {
+ 	struct ath_buf *bf, *lastbf;
+ 	struct list_head bf_head;
+@@ -1499,16 +1507,7 @@ static void ath_drain_txq_list(struct at
+ 
+ 		lastbf = bf->bf_lastbf;
+ 		list_cut_position(&bf_head, list, &lastbf->list);
+-
+-		txq->axq_depth--;
+-		if (bf_is_ampdu_not_probing(bf))
+-			txq->axq_ampdu_depth--;
+-
+-		if (bf_isampdu(bf))
+-			ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, 0,
+-					     retry_tx);
+-		else
+-			ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
++		ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head);
+ 	}
+ }
+ 
+@@ -1518,7 +1517,7 @@ static void ath_drain_txq_list(struct at
+  * This assumes output has been stopped and
+  * we do not need to block ath_tx_tasklet.
+  */
+-void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx)
++void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+ {
+ 	ath_txq_lock(sc, txq);
+ 
+@@ -1526,8 +1525,7 @@ void ath_draintxq(struct ath_softc *sc, 
+ 		int idx = txq->txq_tailidx;
+ 
+ 		while (!list_empty(&txq->txq_fifo[idx])) {
+-			ath_drain_txq_list(sc, txq, &txq->txq_fifo[idx],
+-					   retry_tx);
++			ath_drain_txq_list(sc, txq, &txq->txq_fifo[idx]);
+ 
+ 			INCR(idx, ATH_TXFIFO_DEPTH);
+ 		}
+@@ -1536,16 +1534,12 @@ void ath_draintxq(struct ath_softc *sc, 
+ 
+ 	txq->axq_link = NULL;
+ 	txq->axq_tx_inprogress = false;
+-	ath_drain_txq_list(sc, txq, &txq->axq_q, retry_tx);
+-
+-	/* flush any pending frames if aggregation is enabled */
+-	if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && !retry_tx)
+-		ath_txq_drain_pending_buffers(sc, txq);
++	ath_drain_txq_list(sc, txq, &txq->axq_q);
+ 
+ 	ath_txq_unlock_complete(sc, txq);
+ }
+ 
+-bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
++bool ath_drain_all_txq(struct ath_softc *sc)
+ {
+ 	struct ath_hw *ah = sc->sc_ah;
+ 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+@@ -1581,7 +1575,7 @@ bool ath_drain_all_txq(struct ath_softc 
+ 		 */
+ 		txq = &sc->tx.txq[i];
+ 		txq->stopped = false;
+-		ath_draintxq(sc, txq, retry_tx);
++		ath_draintxq(sc, txq);
+ 	}
+ 
+ 	return !npend;
+@@ -2175,28 +2169,6 @@ static void ath_tx_rc_status(struct ath_
+ 	tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1;
+ }
+ 
+-static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
+-				  struct ath_tx_status *ts, struct ath_buf *bf,
+-				  struct list_head *bf_head)
+-{
+-	int txok;
+-
+-	txq->axq_depth--;
+-	txok = !(ts->ts_status & ATH9K_TXERR_MASK);
+-	txq->axq_tx_inprogress = false;
+-	if (bf_is_ampdu_not_probing(bf))
+-		txq->axq_ampdu_depth--;
+-
+-	if (!bf_isampdu(bf)) {
+-		ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok);
+-		ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok);
+-	} else
+-		ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok, true);
+-
+-	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
+-		ath_txq_schedule(sc, txq);
+-}
+-
+ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
+ {
+ 	struct ath_hw *ah = sc->sc_ah;
diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
index ff6ff27a1ffa63171d6d339c100ccfc2e1d2960d..6e2af403ef1be30a75c2fb81b0ab6d3a6fe8240a 100644
--- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
+++ b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1947,8 +1947,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1945,8 +1945,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  		REG_WRITE(ah, AR_OBS, 8);
  
  	if (ah->config.rx_intr_mitigation) {
diff --git a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
index 8c459180af24a0839e225a9ce2ac073e5ad4eb31..6dde93d7ad59bdcbe585e1eb634e3f9c592c1ef6 100644
--- a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
+++ b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -671,6 +671,7 @@ struct ath_softc {
+@@ -670,6 +670,7 @@ struct ath_softc {
  	struct ieee80211_hw *hw;
  	struct device *dev;
  
@@ -8,7 +8,7 @@
  	struct survey_info *cur_survey;
  	struct survey_info survey[ATH9K_NUM_CHANNELS];
  
-@@ -743,6 +744,7 @@ struct ath_softc {
+@@ -742,6 +743,7 @@ struct ath_softc {
  #endif
  };
  
@@ -80,7 +80,7 @@
  	debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1068,7 +1068,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -1065,7 +1065,7 @@ static void ath9k_disable_ps(struct ath_
  	ath_dbg(common, PS, "PowerSave disabled\n");
  }
  
@@ -89,7 +89,7 @@
  {
  	struct ath_softc *sc = hw->priv;
  	struct ath_hw *ah = sc->sc_ah;
-@@ -1122,9 +1122,11 @@ static int ath9k_config(struct ieee80211
+@@ -1119,9 +1119,11 @@ static int ath9k_config(struct ieee80211
  
  	if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
  		struct ieee80211_channel *curchan = hw->conf.channel;
@@ -101,7 +101,7 @@
  
  		if (ah->curchan)
  			old_pos = ah->curchan - &ah->channels[0];
-@@ -1167,7 +1169,23 @@ static int ath9k_config(struct ieee80211
+@@ -1164,7 +1166,23 @@ static int ath9k_config(struct ieee80211
  			memset(&sc->survey[pos], 0, sizeof(struct survey_info));
  		}
  
diff --git a/package/mac80211/patches/521-ath9k_cur_txpower.patch b/package/mac80211/patches/521-ath9k_cur_txpower.patch
index ad2d3d91842d34c26b0ac16c45df69d834f26d0c..02f8c0b4474d5a53c0ba61f89c40dff282d89e14 100644
--- a/package/mac80211/patches/521-ath9k_cur_txpower.patch
+++ b/package/mac80211/patches/521-ath9k_cur_txpower.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1192,6 +1192,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1189,6 +1189,8 @@ int ath9k_config(struct ieee80211_hw *hw
  			return -EINVAL;
  		}
  
@@ -9,7 +9,7 @@
  		/*
  		 * The most recent snapshot of channel->noisefloor for the old
  		 * channel is only available after the hardware reset. Copy it to
-@@ -1206,6 +1208,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1203,6 +1205,7 @@ int ath9k_config(struct ieee80211_hw *hw
  		sc->config.txpowlimit = 2 * conf->power_level;
  		ath9k_cmn_update_txpow(ah, sc->curtxpow,
  				       sc->config.txpowlimit, &sc->curtxpow);
diff --git a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
index 0c3842577dce89ff0e9ee4fb80e8d05fe0daf449..9e2941b7cc650a402f3073398acc220c6deb2dbb 100644
--- a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
+++ b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
@@ -10,7 +10,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2818,7 +2818,7 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2816,7 +2816,7 @@ void ath9k_hw_apply_txpower(struct ath_h
  	channel = chan->chan;
  	chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
  	new_pwr = min_t(int, chan_pwr, reg->power_limit);
@@ -21,7 +21,7 @@
  	if (ant_gain > max_gain)
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1204,7 +1204,10 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1201,7 +1201,10 @@ int ath9k_config(struct ieee80211_hw *hw
  	}
  
  	if (changed & IEEE80211_CONF_CHANGE_POWER) {
diff --git a/package/mac80211/patches/530-ath9k_extra_leds.patch b/package/mac80211/patches/530-ath9k_extra_leds.patch
index 42820b169e55eda49da1cfa68caba838f1ada284..a93b625241eda729c6f7d34d7675ce34f70d3e00 100644
--- a/package/mac80211/patches/530-ath9k_extra_leds.patch
+++ b/package/mac80211/patches/530-ath9k_extra_leds.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -549,6 +549,9 @@ struct ath9k_wow_pattern {
+@@ -548,6 +548,9 @@ struct ath9k_wow_pattern {
  void ath_init_leds(struct ath_softc *sc);
  void ath_deinit_leds(struct ath_softc *sc);
  void ath_fill_led_pin(struct ath_softc *sc);
@@ -10,7 +10,7 @@
  #else
  static inline void ath_init_leds(struct ath_softc *sc)
  {
-@@ -667,6 +670,13 @@ struct ath9k_vif_iter_data {
+@@ -666,6 +669,13 @@ struct ath9k_vif_iter_data {
  	int nadhocs;   /* number of adhoc vifs */
  };
  
@@ -24,7 +24,7 @@
  struct ath_softc {
  	struct ieee80211_hw *hw;
  	struct device *dev;
-@@ -708,9 +718,8 @@ struct ath_softc {
+@@ -707,9 +717,8 @@ struct ath_softc {
  	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
  
  #ifdef CONFIG_MAC80211_LEDS
diff --git a/package/mac80211/patches/553-ath9k_debugfs_diag.patch b/package/mac80211/patches/553-ath9k_debugfs_diag.patch
index 078a7f878ba91ab1ab3388d5718449cf28277ead..8a1fcf6624367b2321b7629125aba855e1025594 100644
--- a/package/mac80211/patches/553-ath9k_debugfs_diag.patch
+++ b/package/mac80211/patches/553-ath9k_debugfs_diag.patch
@@ -84,7 +84,7 @@
  	bool reset_power_on;
  	bool htc_reset_init;
  
-@@ -1002,6 +1010,7 @@ void ath9k_hw_set_sta_beacon_timers(stru
+@@ -988,6 +996,7 @@ void ath9k_hw_set_sta_beacon_timers(stru
  bool ath9k_hw_check_alive(struct ath_hw *ah);
  
  bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
@@ -94,7 +94,7 @@
  void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause);
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1747,6 +1747,20 @@ fail:
+@@ -1745,6 +1745,20 @@ fail:
  	return -EINVAL;
  }
  
@@ -115,7 +115,7 @@
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
  		   struct ath9k_hw_cal_data *caldata, bool fastcc)
  {
-@@ -2024,6 +2038,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2022,6 +2036,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  	}
  
  	ath9k_hw_apply_gpio_override(ah);
@@ -125,7 +125,7 @@
  		REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -463,6 +463,11 @@ irqreturn_t ath_isr(int irq, void *dev)
+@@ -462,6 +462,11 @@ irqreturn_t ath_isr(int irq, void *dev)
  	ath9k_hw_getisr(ah, &status);	/* NB: clears ISR too */
  	status &= ah->imask;	/* discard unasked-for bits */
  
diff --git a/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch b/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch
index d8c3ff0ad66cbe086fdd4ced52637cba6f71a712..93c70b63ff2e19363b7da80f98dfe61f42255f61 100644
--- a/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch
+++ b/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch
@@ -12,7 +12,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2414,17 +2414,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2412,17 +2412,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
  	}
  
  	eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE);
@@ -48,7 +48,7 @@
  	    AR_SREV_9285(ah) ||
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -922,6 +922,8 @@ struct ath_hw {
+@@ -908,6 +908,8 @@ struct ath_hw {
  	bool is_clk_25mhz;
  	int (*get_mac_revision)(void);
  	int (*external_reset)(void);
diff --git a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch
index 25b21cecead46919f3a0478e783b9114bda07101..33eb28f5f632a71daacaf869c55a9ea030409061 100644
--- a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch
+++ b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/rt2x00/rt2800pci.c
 +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
-@@ -89,7 +89,7 @@ static void rt2800pci_mcu_status(struct
+@@ -89,7 +89,7 @@ static void rt2800pci_mcu_status(struct 
  	rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
  }
  
@@ -9,7 +9,7 @@
  {
  	memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE);
  	return 0;
-@@ -983,8 +983,9 @@ static int rt2800pci_read_eeprom(struct
+@@ -983,8 +983,9 @@ static int rt2800pci_read_eeprom(struct 
  {
  	int retval;