+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -659,6 +659,9 @@ static void ar9300_swap_eeprom(struct ar
+ word = swab16(eep->baseEepHeader.regDmn[1]);
+ eep->baseEepHeader.regDmn[1] = word;
+
++ dword = swab32(eep->baseEepHeader.swreg);
++ eep->baseEepHeader.swreg = dword;
++
+ dword = swab32(eep->modalHeader2G.antCtrlCommon);
+ eep->modalHeader2G.antCtrlCommon = dword;
+
+@@ -1200,7 +1203,7 @@ static u8 ar9003_hw_eeprom_get_tgt_pwr(s
+ u8 *pFreqBin;
+
+ if (is2GHz) {
+- numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
++ numPiers = AR9300_NUM_2G_20_TARGET_POWERS;
+ pEepromTargetPwr = eep->calTargetPower2G;
+ pFreqBin = eep->calTarget_freqbin_2G;
+ } else {
+@@ -1236,7 +1239,7 @@ static u8 ar9003_hw_eeprom_get_ht20_tgt_
+ u8 *pFreqBin;
+
+ if (is2GHz) {
+- numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
++ numPiers = AR9300_NUM_2G_20_TARGET_POWERS;
+ pEepromTargetPwr = eep->calTargetPower2GHT20;
+ pFreqBin = eep->calTarget_freqbin_2GHT20;
+ } else {
+@@ -1817,6 +1820,7 @@ static void ath9k_hw_ar9300_set_txpower(
+ u8 twiceMaxRegulatoryPower,
+ u8 powerLimit)
+ {
++ ah->txpower_limit = powerLimit;
+ ar9003_hw_set_target_power_eeprom(ah, chan->channel);
+ ar9003_hw_calibration_apply(ah, chan->channel);
+ }