|
@@ -1258,7 +1258,7 @@ static void ath9k_hw_def_set_txpower(struct ath_hw *ah,
|
|
|
u16 cfgCtl,
|
|
|
u8 twiceAntennaReduction,
|
|
|
u8 twiceMaxRegulatoryPower,
|
|
|
- u8 powerLimit)
|
|
|
+ u8 powerLimit, bool test)
|
|
|
{
|
|
|
#define RT_AR_DELTA(x) (ratesArray[x] - cck_ofdm_delta)
|
|
|
struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
|
|
@@ -1285,12 +1285,44 @@ static void ath9k_hw_def_set_txpower(struct ath_hw *ah,
|
|
|
|
|
|
ath9k_hw_set_def_power_cal_table(ah, chan, &txPowerIndexOffset);
|
|
|
|
|
|
+ regulatory->max_power_level = 0;
|
|
|
for (i = 0; i < ARRAY_SIZE(ratesArray); i++) {
|
|
|
ratesArray[i] = (int16_t)(txPowerIndexOffset + ratesArray[i]);
|
|
|
if (ratesArray[i] > AR5416_MAX_RATE_POWER)
|
|
|
ratesArray[i] = AR5416_MAX_RATE_POWER;
|
|
|
+ if (ratesArray[i] > regulatory->max_power_level)
|
|
|
+ regulatory->max_power_level = ratesArray[i];
|
|
|
}
|
|
|
|
|
|
+ if (!test) {
|
|
|
+ i = rate6mb;
|
|
|
+
|
|
|
+ if (IS_CHAN_HT40(chan))
|
|
|
+ i = rateHt40_0;
|
|
|
+ else if (IS_CHAN_HT20(chan))
|
|
|
+ i = rateHt20_0;
|
|
|
+
|
|
|
+ regulatory->max_power_level = ratesArray[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ switch(ar5416_get_ntxchains(ah->txchainmask)) {
|
|
|
+ case 1:
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ regulatory->max_power_level += INCREASE_MAXPOW_BY_TWO_CHAIN;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ regulatory->max_power_level += INCREASE_MAXPOW_BY_THREE_CHAIN;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ ath_print(ath9k_hw_common(ah), ATH_DBG_EEPROM,
|
|
|
+ "Invalid chainmask configuration\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (test)
|
|
|
+ return;
|
|
|
+
|
|
|
if (AR_SREV_9280_20_OR_LATER(ah)) {
|
|
|
for (i = 0; i < Ar5416RateSize; i++) {
|
|
|
int8_t pwr_table_offset;
|
|
@@ -1387,34 +1419,6 @@ static void ath9k_hw_def_set_txpower(struct ath_hw *ah,
|
|
|
REG_WRITE(ah, AR_PHY_POWER_TX_SUB,
|
|
|
ATH9K_POW_SM(pModal->pwrDecreaseFor3Chain, 6)
|
|
|
| ATH9K_POW_SM(pModal->pwrDecreaseFor2Chain, 0));
|
|
|
-
|
|
|
- i = rate6mb;
|
|
|
-
|
|
|
- if (IS_CHAN_HT40(chan))
|
|
|
- i = rateHt40_0;
|
|
|
- else if (IS_CHAN_HT20(chan))
|
|
|
- i = rateHt20_0;
|
|
|
-
|
|
|
- if (AR_SREV_9280_20_OR_LATER(ah))
|
|
|
- regulatory->max_power_level =
|
|
|
- ratesArray[i] + AR5416_PWR_TABLE_OFFSET_DB * 2;
|
|
|
- else
|
|
|
- regulatory->max_power_level = ratesArray[i];
|
|
|
-
|
|
|
- switch(ar5416_get_ntxchains(ah->txchainmask)) {
|
|
|
- case 1:
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- regulatory->max_power_level += INCREASE_MAXPOW_BY_TWO_CHAIN;
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- regulatory->max_power_level += INCREASE_MAXPOW_BY_THREE_CHAIN;
|
|
|
- break;
|
|
|
- default:
|
|
|
- ath_print(ath9k_hw_common(ah), ATH_DBG_EEPROM,
|
|
|
- "Invalid chainmask configuration\n");
|
|
|
- break;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
static u8 ath9k_hw_def_get_num_ant_config(struct ath_hw *ah,
|