Commit 64ea57d0 authored by Gabor Juhos's avatar Gabor Juhos Committed by John W. Linville

ath9k: add an extra boolean parameter to ath9k_hw_apply_txpower

In order to unifying regulatory limit handling
commit ca2c68cc
(ath9k_hw: clean up tx power handling) introduced
a new helper function 'ath9k_hw_apply_txpower',
and the direct calls of 'ah->eep_ops->set_txpower'
has been replaced by a call of the helper function.

This caused a change in the behaviour of the
'ath9k_hw_set_txpowerlimit' function. The purpose
of that function is to calculate and store the
rate txpower table and the regulatory limit without
touching the hardware registers. Before the commit,
the 'test' parameter of the function was passed to
the 'ah->eep_ops->set_txpower'. Now the calling of
the 'set_txpower' function happens indirectly through
'ath9k_hw_apply_txpower', so the 'test' argument of
the 'set_txpower' is always 'false'.

This patch restores the original behaviour of
'ath9k_hw_set_txpowerlimit' by adding a new
argument to 'ath9k_hw_apply_txpower.'
Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
Acked-by: default avatarFelix Fietkau <nbd@openwrt.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent fd09c85f
...@@ -869,7 +869,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, ...@@ -869,7 +869,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah,
ar5008_hw_set_channel_regs(ah, chan); ar5008_hw_set_channel_regs(ah, chan);
ar5008_hw_init_chain_masks(ah); ar5008_hw_init_chain_masks(ah);
ath9k_olc_init(ah); ath9k_olc_init(ah);
ath9k_hw_apply_txpower(ah, chan); ath9k_hw_apply_txpower(ah, chan, false);
/* Write analog registers */ /* Write analog registers */
if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) { if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
......
...@@ -54,7 +54,7 @@ void ar9003_paprd_enable(struct ath_hw *ah, bool val) ...@@ -54,7 +54,7 @@ void ar9003_paprd_enable(struct ath_hw *ah, bool val)
if (val) { if (val) {
ah->paprd_table_write_done = true; ah->paprd_table_write_done = true;
ath9k_hw_apply_txpower(ah, chan); ath9k_hw_apply_txpower(ah, chan, false);
} }
REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0, REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0,
......
...@@ -694,7 +694,7 @@ static int ar9003_hw_process_ini(struct ath_hw *ah, ...@@ -694,7 +694,7 @@ static int ar9003_hw_process_ini(struct ath_hw *ah,
ar9003_hw_override_ini(ah); ar9003_hw_override_ini(ah);
ar9003_hw_set_channel_regs(ah, chan); ar9003_hw_set_channel_regs(ah, chan);
ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
ath9k_hw_apply_txpower(ah, chan); ath9k_hw_apply_txpower(ah, chan, false);
if (AR_SREV_9462(ah)) { if (AR_SREV_9462(ah)) {
if (REG_READ_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_0, if (REG_READ_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_0,
......
...@@ -1454,7 +1454,7 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah, ...@@ -1454,7 +1454,7 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
return false; return false;
} }
ath9k_hw_set_clockrate(ah); ath9k_hw_set_clockrate(ah);
ath9k_hw_apply_txpower(ah, chan); ath9k_hw_apply_txpower(ah, chan, false);
ath9k_hw_rfbus_done(ah); ath9k_hw_rfbus_done(ah);
if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan)) if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
...@@ -2652,7 +2652,8 @@ static int get_antenna_gain(struct ath_hw *ah, struct ath9k_channel *chan) ...@@ -2652,7 +2652,8 @@ static int get_antenna_gain(struct ath_hw *ah, struct ath9k_channel *chan)
return ah->eep_ops->get_eeprom(ah, gain_param); return ah->eep_ops->get_eeprom(ah, gain_param);
} }
void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan) void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan,
bool test)
{ {
struct ath_regulatory *reg = ath9k_hw_regulatory(ah); struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
struct ieee80211_channel *channel; struct ieee80211_channel *channel;
...@@ -2673,7 +2674,7 @@ void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan) ...@@ -2673,7 +2674,7 @@ void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan)
ah->eep_ops->set_txpower(ah, chan, ah->eep_ops->set_txpower(ah, chan,
ath9k_regd_get_ctl(reg, chan), ath9k_regd_get_ctl(reg, chan),
ant_reduction, new_pwr, false); ant_reduction, new_pwr, test);
} }
void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test) void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test)
...@@ -2686,7 +2687,7 @@ void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test) ...@@ -2686,7 +2687,7 @@ void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test)
if (test) if (test)
channel->max_power = MAX_RATE_POWER / 2; channel->max_power = MAX_RATE_POWER / 2;
ath9k_hw_apply_txpower(ah, chan); ath9k_hw_apply_txpower(ah, chan, test);
if (test) if (test)
channel->max_power = DIV_ROUND_UP(reg->max_power_level, 2); channel->max_power = DIV_ROUND_UP(reg->max_power_level, 2);
......
...@@ -985,7 +985,8 @@ void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len); ...@@ -985,7 +985,8 @@ void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len);
/* PHY */ /* PHY */
void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled, void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
u32 *coef_mantissa, u32 *coef_exponent); u32 *coef_mantissa, u32 *coef_exponent);
void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan); void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan,
bool test);
/* /*
* Code Specific to AR5008, AR9001 or AR9002, * Code Specific to AR5008, AR9001 or AR9002,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment