ath9k: Store the correct max TX power level
authorSujith <Sujith.Manoharan@atheros.com>
Thu, 12 Feb 2009 04:36:36 +0000 (10:06 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 27 Feb 2009 19:51:42 +0000 (14:51 -0500)
This patch fixes a bug where the max power level
was being calculated incorrectly.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/eeprom.c
drivers/net/wireless/ath9k/eeprom.h

index b55e992..34e9d81 100644 (file)
@@ -2615,6 +2615,21 @@ static int ath9k_hw_def_set_txpower(struct ath_hw *ah,
        else
                ah->regulatory.max_power_level = ratesArray[i];
 
+       switch(ar5416_get_ntxchains(ah->txchainmask)) {
+       case 1:
+               break;
+       case 2:
+               ah->regulatory.max_power_level += INCREASE_MAXPOW_BY_TWO_CHAIN;
+               break;
+       case 3:
+               ah->regulatory.max_power_level += INCREASE_MAXPOW_BY_THREE_CHAIN;
+               break;
+       default:
+               DPRINTF(ah->ah_sc, ATH_DBG_EEPROM,
+                       "Invalid chainmask configuration\n");
+               break;
+       }
+
        return 0;
 }
 
index 99863b5..b7c656c 100644 (file)
@@ -75,6 +75,9 @@
 #define SUB_NUM_CTL_MODES_AT_5G_40 2
 #define SUB_NUM_CTL_MODES_AT_2G_40 3
 
+#define INCREASE_MAXPOW_BY_TWO_CHAIN     6  /* 10*log10(2)*2 */
+#define INCREASE_MAXPOW_BY_THREE_CHAIN   10 /* 10*log10(3)*2 */
+
 #define AR_EEPROM_MAC(i)       (0x1d+(i))
 #define ATH9K_POW_SM(_r, _s)   (((_r) & 0x3f) << (_s))
 #define FREQ2FBIN(x, y)                ((y) ? ((x) - 2300) : (((x) - 4800) / 5))