ath9k_hw: fix the PA predistortion rate mask
authorFelix Fietkau <nbd@openwrt.org>
Mon, 13 Dec 2010 07:40:53 +0000 (08:40 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 13 Dec 2010 20:23:33 +0000 (15:23 -0500)
The EEPROM PAPRD rate mask fields only contain mask values for actual
rates in the low 25 bits. The upper bits are reserved for tx power
scale values. Add the proper mask definitions and use them before
writing the values to the register.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
drivers/net/wireless/ath/ath9k/ar9003_paprd.c

index 620821ea6927ec334e896fa7ebf0d0f1c19442d0..efb6a02be37760c8169aa6c1a416b2fd8350627d 100644 (file)
 #define AR9300_ANT_16S               25
 #define AR9300_FUTURE_MODAL_SZ       6
 
+#define AR9300_PAPRD_RATE_MASK         0x01ffffff
+#define AR9300_PAPRD_SCALE_1           0x0e000000
+#define AR9300_PAPRD_SCALE_1_S         25
+#define AR9300_PAPRD_SCALE_2           0x70000000
+#define AR9300_PAPRD_SCALE_2_S         28
+
 /* Delta from which to start power to pdadc table */
 /* This offset is used in both open loop and closed loop power control
  * schemes. In open loop power control, it is not really needed, but for
index 74cff4365c43f89254e52d20e5ff3e06536b950c..cdca4c3265b914ac9937444f1bac369cfe5f30a2 100644 (file)
@@ -52,8 +52,8 @@ static void ar9003_paprd_setup_single_table(struct ath_hw *ah)
        else
                hdr = &eep->modalHeader2G;
 
-       am_mask = le32_to_cpu(hdr->papdRateMaskHt20);
-       ht40_mask = le32_to_cpu(hdr->papdRateMaskHt40);
+       am_mask = le32_to_cpu(hdr->papdRateMaskHt20) & AR9300_PAPRD_RATE_MASK;
+       ht40_mask = le32_to_cpu(hdr->papdRateMaskHt40) & AR9300_PAPRD_RATE_MASK;
 
        REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2AM, AR_PHY_PAPRD_AM2AM_MASK, am_mask);
        REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2PM, AR_PHY_PAPRD_AM2PM_MASK, am_mask);