ath9k_hw: fix invalid extension channel noisefloor readings in HT20
authorFelix Fietkau <nbd@openwrt.org>
Fri, 23 Jul 2010 02:07:48 +0000 (04:07 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 26 Jul 2010 19:32:42 +0000 (15:32 -0400)
When the hardware is configured in HT20 mode, noise floor readings for
the extension channel often return invalid values, which keep the
values in the NF history buffer at the hardware-specific maximum limit.
Fix this by discarding the extension channel values when in HT20 mode.

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

index 4a910b78de523075f302820a31ef6a4b85c9d42e..3d2c8679bc85301f83f3499a161d3cbe91fbd1e3 100644 (file)
@@ -1506,6 +1506,9 @@ static void ar5008_hw_do_getnf(struct ath_hw *ah,
        nf = MS(REG_READ(ah, AR_PHY_CH2_CCA), AR_PHY_CH2_MINCCA_PWR);
        nfarray[2] = sign_extend(nf, 9);
 
+       if (!IS_CHAN_HT40(ah->curchan))
+               return;
+
        nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
        nfarray[3] = sign_extend(nf, 9);
 
index 4922b8d4a9383d716b0dd7298709d57c37495468..adbf031fbc5a7bd37c90590870c908d3719e8be7 100644 (file)
@@ -477,7 +477,8 @@ static void ar9002_hw_do_getnf(struct ath_hw *ah,
        nfarray[0] = sign_extend(nf, 9);
 
        nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
-       nfarray[3] = sign_extend(nf, 9);
+       if (IS_CHAN_HT40(ah->curchan))
+               nfarray[3] = sign_extend(nf, 9);
 
        if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
                return;
@@ -486,7 +487,8 @@ static void ar9002_hw_do_getnf(struct ath_hw *ah,
        nfarray[1] = sign_extend(nf, 9);
 
        nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR9280_PHY_CH1_EXT_MINCCA_PWR);
-       nfarray[4] = sign_extend(nf, 9);
+       if (IS_CHAN_HT40(ah->curchan))
+               nfarray[4] = sign_extend(nf, 9);
 }
 
 static void ar9002_hw_set_nf_limits(struct ath_hw *ah)
index 7c93338540ae00c9aa73e3bb6d959d517f78f55f..a753a431bb13f186b7587cb0b67c10e76699a7d2 100644 (file)
@@ -1029,6 +1029,9 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
        nf = MS(REG_READ(ah, AR_PHY_CCA_2), AR_PHY_CH2_MINCCA_PWR);
        nfarray[2] = sign_extend(nf, 9);
 
+       if (!IS_CHAN_HT40(ah->curchan))
+               return;
+
        nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
        nfarray[3] = sign_extend(nf, 9);