Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 461d8a6b authored by Felix Fietkau's avatar Felix Fietkau Committed by Kalle Valo
Browse files

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 lower 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.

Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 1226f9e1
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -2942,16 +2942,19 @@ void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan,
	struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
	struct ieee80211_channel *channel;
	int chan_pwr, new_pwr;
	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);

	ah->eep_ops->set_txpower(ah, chan,
				 ath9k_regd_get_ctl(reg, chan),
	ah->eep_ops->set_txpower(ah, chan, ctl,
				 get_antenna_gain(ah, chan), new_pwr, test);
}