--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -411,6 +411,8 @@ static void ath9k_hw_init_defaults(struc
+ ah->sta_id1_defaults =
+ AR_STA_ID1_CRPT_MIC_ENABLE |
+ AR_STA_ID1_MCAST_KSRCH;
++ if (AR_SREV_9100(ah))
++ ah->sta_id1_defaults |= AR_STA_ID1_AR9100_BA_FIX;
+ ah->enable_32kHz_clock = DONT_USE_32KHZ;
+ ah->slottime = 20;
+ ah->globaltxtimeout = (u32) -1;
+--- a/drivers/net/wireless/ath/ath9k/reg.h
++++ b/drivers/net/wireless/ath/ath9k/reg.h
+@@ -1396,6 +1396,7 @@ enum {
+ #define AR_STA_ID1_PCF 0x00100000
+ #define AR_STA_ID1_USE_DEFANT 0x00200000
+ #define AR_STA_ID1_DEFANT_UPDATE 0x00400000
++#define AR_STA_ID1_AR9100_BA_FIX 0x00400000
+ #define AR_STA_ID1_RTS_USE_DEF 0x00800000
+ #define AR_STA_ID1_ACKCTS_6MB 0x01000000
+ #define AR_STA_ID1_BASE_RATE_11B 0x02000000
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1878,6 +1878,8 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+ !(AR_SREV_9271(ah)))
+ /* CB71: GPIO 0 is pulled down to indicate 3 rx chains */
+ pCap->rx_chainmask = ath9k_hw_gpio_get(ah, 0) ? 0x5 : 0x7;
++ else if (AR_SREV_9100(ah))
++ pCap->rx_chainmask = 0x7;
+ else
+ /* Use rx_chainmask from EEPROM. */
+ pCap->rx_chainmask = ah->eep_ops->get_eeprom(ah, EEP_RX_MASK);