You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Wed, 22 Mar 2017 20:37:04 +0100
|
|
Subject: [PATCH] ath9k_hw: fix channel maximum power level test
|
|
|
|
The tx power applied by set_txpower is limited by the CTL (conformance
|
|
test limit) entries in the EEPROM. These can change based on the user
|
|
configured regulatory domain.
|
|
Depending on the EEPROM data this can cause the tx power to become too
|
|
limited, if the original regdomain CTLs impose lowr limits than the CTLs
|
|
of the user configured regdomain.
|
|
|
|
To fix this issue, set the initial channel limits without any CTL
|
|
restrictions and only apply the CTL at run time when setting the channel
|
|
and the real tx power.
|
|
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
|
@@ -2937,10 +2937,14 @@ void ath9k_hw_apply_txpower(struct ath_h
|
|
struct ieee80211_channel *channel;
|
|
int chan_pwr, new_pwr, max_gain;
|
|
int ant_gain, ant_reduction = 0;
|
|
+ u16 ctl = NO_CTL;
|
|
|
|
if (!chan)
|
|
return;
|
|
|
|
+ if (!test)
|
|
+ ctl = ath9k_regd_get_ctl(reg, chan);
|
|
+
|
|
channel = chan->chan;
|
|
chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
|
|
new_pwr = min_t(int, chan_pwr, reg->power_limit);
|
|
@@ -2950,9 +2954,7 @@ void ath9k_hw_apply_txpower(struct ath_h
|
|
if (ant_gain > max_gain)
|
|
ant_reduction = ant_gain - max_gain;
|
|
|
|
- ah->eep_ops->set_txpower(ah, chan,
|
|
- ath9k_regd_get_ctl(reg, chan),
|
|
- ant_reduction, new_pwr, test);
|
|
+ ah->eep_ops->set_txpower(ah, chan, ctl, ant_reduction, new_pwr, test);
|
|
}
|
|
|
|
void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test)
|
|
|