aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/581-ath9k_cleanup_txpower_handling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/581-ath9k_cleanup_txpower_handling.patch')
-rw-r--r--package/mac80211/patches/581-ath9k_cleanup_txpower_handling.patch627
1 files changed, 0 insertions, 627 deletions
diff --git a/package/mac80211/patches/581-ath9k_cleanup_txpower_handling.patch b/package/mac80211/patches/581-ath9k_cleanup_txpower_handling.patch
deleted file mode 100644
index 029ce3d7af..0000000000
--- a/package/mac80211/patches/581-ath9k_cleanup_txpower_handling.patch
+++ /dev/null
@@ -1,627 +0,0 @@
---- a/drivers/net/wireless/ath/ath.h
-+++ b/drivers/net/wireless/ath/ath.h
-@@ -71,7 +71,6 @@ struct ath_regulatory {
- char alpha2[2];
- u16 country_code;
- u16 max_power_level;
-- u32 tp_scale;
- u16 current_rd;
- u16 current_rd_ext;
- int16_t power_limit;
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3040,6 +3040,10 @@ static u32 ath9k_hw_ar9300_get_eeprom(st
- return (pBase->miscConfiguration >> 0x3) & 0x1;
- case EEP_ANT_DIV_CTL1:
- return eep->base_ext1.ant_div_control;
-+ case EEP_ANTENNA_GAIN_5G:
-+ return eep->modalHeader5G.antennaGain;
-+ case EEP_ANTENNA_GAIN_2G:
-+ return eep->modalHeader2G.antennaGain;
- default:
- return 0;
- }
-@@ -4727,20 +4731,14 @@ static u16 ar9003_hw_get_max_edge_power(
- static void ar9003_hw_set_power_per_rate_table(struct ath_hw *ah,
- struct ath9k_channel *chan,
- u8 *pPwrArray, u16 cfgCtl,
-- u8 twiceAntennaReduction,
-- u8 twiceMaxRegulatoryPower,
-+ u8 antenna_reduction,
- u16 powerLimit)
- {
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ath_common *common = ath9k_hw_common(ah);
- struct ar9300_eeprom *pEepData = &ah->eeprom.ar9300_eep;
- u16 twiceMaxEdgePower = MAX_RATE_POWER;
-- static const u16 tpScaleReductionTable[5] = {
-- 0, 3, 6, 9, MAX_RATE_POWER
-- };
- int i;
-- int16_t twiceLargestAntenna;
-- u16 scaledPower = 0, minCtlPower, maxRegAllowedPower;
-+ u16 scaledPower = 0, minCtlPower;
- static const u16 ctlModesFor11a[] = {
- CTL_11A, CTL_5GHT20, CTL_11A_EXT, CTL_5GHT40
- };
-@@ -4758,28 +4756,7 @@ static void ar9003_hw_set_power_per_rate
- bool is2ghz = IS_CHAN_2GHZ(chan);
-
- ath9k_hw_get_channel_centers(ah, chan, &centers);
--
-- /* Compute TxPower reduction due to Antenna Gain */
-- if (is2ghz)
-- twiceLargestAntenna = pEepData->modalHeader2G.antennaGain;
-- else
-- twiceLargestAntenna = pEepData->modalHeader5G.antennaGain;
--
-- twiceLargestAntenna = (int16_t)min((twiceAntennaReduction) -
-- twiceLargestAntenna, 0);
--
-- /*
-- * scaledPower is the minimum of the user input power level
-- * and the regulatory allowed power level
-- */
-- maxRegAllowedPower = twiceMaxRegulatoryPower + twiceLargestAntenna;
--
-- if (regulatory->tp_scale != ATH9K_TP_SCALE_MAX) {
-- maxRegAllowedPower -=
-- (tpScaleReductionTable[(regulatory->tp_scale)] * 2);
-- }
--
-- scaledPower = min(powerLimit, maxRegAllowedPower);
-+ scaledPower = powerLimit - antenna_reduction;
-
- /*
- * Reduce scaled Power by number of chains active to get
-@@ -4966,7 +4943,6 @@ static inline u8 mcsidx_to_tgtpwridx(uns
- static void ath9k_hw_ar9300_set_txpower(struct ath_hw *ah,
- struct ath9k_channel *chan, u16 cfgCtl,
- u8 twiceAntennaReduction,
-- u8 twiceMaxRegulatoryPower,
- u8 powerLimit, bool test)
- {
- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-@@ -5019,7 +4995,6 @@ static void ath9k_hw_ar9300_set_txpower(
- ar9003_hw_set_power_per_rate_table(ah, chan,
- targetPowerValT2, cfgCtl,
- twiceAntennaReduction,
-- twiceMaxRegulatoryPower,
- powerLimit);
-
- if (ah->eep_ops->get_eeprom(ah, EEP_PAPRD)) {
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -429,7 +429,6 @@ static void ath9k_hw_init_defaults(struc
-
- regulatory->country_code = CTRY_DEFAULT;
- regulatory->power_limit = MAX_RATE_POWER;
-- regulatory->tp_scale = ATH9K_TP_SCALE_MAX;
-
- ah->hw_version.magic = AR5416_MAGIC;
- ah->hw_version.subvendorid = 0;
-@@ -1396,9 +1395,7 @@ static bool ath9k_hw_chip_reset(struct a
- static bool ath9k_hw_channel_change(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ath_common *common = ath9k_hw_common(ah);
-- struct ieee80211_channel *channel = chan->chan;
- u32 qnum;
- int r;
-
-@@ -1423,14 +1420,7 @@ static bool ath9k_hw_channel_change(stru
- return false;
- }
- ath9k_hw_set_clockrate(ah);
--
-- ah->eep_ops->set_txpower(ah, chan,
-- ath9k_regd_get_ctl(regulatory, chan),
-- channel->max_antenna_gain * 2,
-- channel->max_power * 2,
-- min((u32) MAX_RATE_POWER,
-- (u32) regulatory->power_limit), false);
--
-+ ath9k_hw_apply_txpower(ah, chan);
- ath9k_hw_rfbus_done(ah);
-
- if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan))
-@@ -2466,23 +2456,56 @@ bool ath9k_hw_disable(struct ath_hw *ah)
- }
- EXPORT_SYMBOL(ath9k_hw_disable);
-
-+static int get_antenna_gain(struct ath_hw *ah, struct ath9k_channel *chan)
-+{
-+ enum eeprom_param gain_param;
-+
-+ if (IS_CHAN_2GHZ(chan))
-+ gain_param = EEP_ANTENNA_GAIN_2G;
-+ else
-+ gain_param = EEP_ANTENNA_GAIN_5G;
-+
-+ return ah->eep_ops->get_eeprom(ah, gain_param);
-+}
-+
-+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, max_gain;
-+ int ant_gain, ant_reduction = 0;
-+
-+ if (!chan)
-+ return;
-+
-+ 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);
-+ max_gain = chan_pwr - new_pwr + channel->max_antenna_gain * 2;
-+
-+ ant_gain = get_antenna_gain(ah, chan);
-+ 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, false);
-+}
-+
- void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test)
- {
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-+ struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
- struct ath9k_channel *chan = ah->curchan;
- struct ieee80211_channel *channel = chan->chan;
-- int reg_pwr = min_t(int, MAX_RATE_POWER, limit);
-- int chan_pwr = channel->max_power * 2;
-
-+ reg->power_limit = min_t(int, limit, MAX_RATE_POWER);
- if (test)
-- reg_pwr = chan_pwr = MAX_RATE_POWER;
-+ channel->max_power = MAX_RATE_POWER / 2;
-
-- regulatory->power_limit = reg_pwr;
-+ ath9k_hw_apply_txpower(ah, chan);
-
-- ah->eep_ops->set_txpower(ah, chan,
-- ath9k_regd_get_ctl(regulatory, chan),
-- channel->max_antenna_gain * 2,
-- chan_pwr, reg_pwr, test);
-+ if (test)
-+ channel->max_power = DIV_ROUND_UP(reg->max_power_level, 2);
- }
- EXPORT_SYMBOL(ath9k_hw_set_txpowerlimit);
-
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -389,14 +389,6 @@ enum ath9k_power_mode {
- ATH9K_PM_UNDEFINED
- };
-
--enum ath9k_tp_scale {
-- ATH9K_TP_SCALE_MAX = 0,
-- ATH9K_TP_SCALE_50,
-- ATH9K_TP_SCALE_25,
-- ATH9K_TP_SCALE_12,
-- ATH9K_TP_SCALE_MIN
--};
--
- enum ser_reg_mode {
- SER_REG_MODE_OFF = 0,
- SER_REG_MODE_ON = 1,
-@@ -964,6 +956,7 @@ void ath9k_hw_htc_resetinit(struct ath_h
- /* PHY */
- void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
- u32 *coef_mantissa, u32 *coef_exponent);
-+void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan);
-
- /*
- * Code Specific to AR5008, AR9001 or AR9002,
---- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
-+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
-@@ -350,6 +350,8 @@ static u32 ath9k_hw_4k_get_eeprom(struct
- return pModal->antdiv_ctl1;
- case EEP_TXGAIN_TYPE:
- return pBase->txGainType;
-+ case EEP_ANTENNA_GAIN_2G:
-+ return pModal->antennaGainCh[0];
- default:
- return 0;
- }
-@@ -462,8 +464,7 @@ static void ath9k_hw_set_4k_power_per_ra
- struct ath9k_channel *chan,
- int16_t *ratesArray,
- u16 cfgCtl,
-- u16 AntennaReduction,
-- u16 twiceMaxRegulatoryPower,
-+ u16 antenna_reduction,
- u16 powerLimit)
- {
- #define CMP_TEST_GRP \
-@@ -472,20 +473,16 @@ static void ath9k_hw_set_4k_power_per_ra
- || (((cfgCtl & ~CTL_MODE_M) | (pCtlMode[ctlMode] & CTL_MODE_M)) == \
- ((pEepData->ctlIndex[i] & CTL_MODE_M) | SD_NO_CTL))
-
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- int i;
-- int16_t twiceLargestAntenna;
- u16 twiceMinEdgePower;
- u16 twiceMaxEdgePower = MAX_RATE_POWER;
-- u16 scaledPower = 0, minCtlPower, maxRegAllowedPower;
-+ u16 scaledPower = 0, minCtlPower;
- u16 numCtlModes;
- const u16 *pCtlMode;
- u16 ctlMode, freq;
- struct chan_centers centers;
- struct cal_ctl_data_4k *rep;
- struct ar5416_eeprom_4k *pEepData = &ah->eeprom.map4k;
-- static const u16 tpScaleReductionTable[5] =
-- { 0, 3, 6, 9, MAX_RATE_POWER };
- struct cal_target_power_leg targetPowerOfdm, targetPowerCck = {
- 0, { 0, 0, 0, 0}
- };
-@@ -503,19 +500,7 @@ static void ath9k_hw_set_4k_power_per_ra
-
- ath9k_hw_get_channel_centers(ah, chan, &centers);
-
-- twiceLargestAntenna = pEepData->modalHeader.antennaGainCh[0];
-- twiceLargestAntenna = (int16_t)min(AntennaReduction -
-- twiceLargestAntenna, 0);
--
-- maxRegAllowedPower = twiceMaxRegulatoryPower + twiceLargestAntenna;
-- if (regulatory->tp_scale != ATH9K_TP_SCALE_MAX) {
-- maxRegAllowedPower -=
-- (tpScaleReductionTable[(regulatory->tp_scale)] * 2);
-- }
--
-- scaledPower = min(powerLimit, maxRegAllowedPower);
-- scaledPower = max((u16)0, scaledPower);
--
-+ scaledPower = powerLimit - antenna_reduction;
- numCtlModes = ARRAY_SIZE(ctlModesFor11g) - SUB_NUM_CTL_MODES_AT_2G_40;
- pCtlMode = ctlModesFor11g;
-
-@@ -671,7 +656,6 @@ static void ath9k_hw_4k_set_txpower(stru
- struct ath9k_channel *chan,
- u16 cfgCtl,
- u8 twiceAntennaReduction,
-- u8 twiceMaxRegulatoryPower,
- u8 powerLimit, bool test)
- {
- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-@@ -691,7 +675,6 @@ static void ath9k_hw_4k_set_txpower(stru
- ath9k_hw_set_4k_power_per_rate_table(ah, chan,
- &ratesArray[0], cfgCtl,
- twiceAntennaReduction,
-- twiceMaxRegulatoryPower,
- powerLimit);
-
- ath9k_hw_set_4k_power_cal_table(ah, chan);
---- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
-+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
-@@ -336,6 +336,9 @@ static u32 ath9k_hw_ar9287_get_eeprom(st
- return pBase->tempSensSlopePalOn;
- else
- return 0;
-+ case EEP_ANTENNA_GAIN_2G:
-+ return max_t(u8, pModal->antennaGainCh[0],
-+ pModal->antennaGainCh[1]);
- default:
- return 0;
- }
-@@ -554,8 +557,7 @@ static void ath9k_hw_set_ar9287_power_pe
- struct ath9k_channel *chan,
- int16_t *ratesArray,
- u16 cfgCtl,
-- u16 AntennaReduction,
-- u16 twiceMaxRegulatoryPower,
-+ u16 antenna_reduction,
- u16 powerLimit)
- {
- #define CMP_CTL \
-@@ -569,12 +571,8 @@ static void ath9k_hw_set_ar9287_power_pe
- #define REDUCE_SCALED_POWER_BY_TWO_CHAIN 6
- #define REDUCE_SCALED_POWER_BY_THREE_CHAIN 10
-
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- u16 twiceMaxEdgePower = MAX_RATE_POWER;
-- static const u16 tpScaleReductionTable[5] =
-- { 0, 3, 6, 9, MAX_RATE_POWER };
- int i;
-- int16_t twiceLargestAntenna;
- struct cal_ctl_data_ar9287 *rep;
- struct cal_target_power_leg targetPowerOfdm = {0, {0, 0, 0, 0} },
- targetPowerCck = {0, {0, 0, 0, 0} };
-@@ -582,7 +580,7 @@ static void ath9k_hw_set_ar9287_power_pe
- targetPowerCckExt = {0, {0, 0, 0, 0} };
- struct cal_target_power_ht targetPowerHt20,
- targetPowerHt40 = {0, {0, 0, 0, 0} };
-- u16 scaledPower = 0, minCtlPower, maxRegAllowedPower;
-+ u16 scaledPower = 0, minCtlPower;
- static const u16 ctlModesFor11g[] = {
- CTL_11B, CTL_11G, CTL_2GHT20,
- CTL_11B_EXT, CTL_11G_EXT, CTL_2GHT40
-@@ -597,24 +595,7 @@ static void ath9k_hw_set_ar9287_power_pe
- tx_chainmask = ah->txchainmask;
-
- ath9k_hw_get_channel_centers(ah, chan, &centers);
--
-- /* Compute TxPower reduction due to Antenna Gain */
-- twiceLargestAntenna = max(pEepData->modalHeader.antennaGainCh[0],
-- pEepData->modalHeader.antennaGainCh[1]);
-- twiceLargestAntenna = (int16_t)min((AntennaReduction) -
-- twiceLargestAntenna, 0);
--
-- /*
-- * scaledPower is the minimum of the user input power level
-- * and the regulatory allowed power level.
-- */
-- maxRegAllowedPower = twiceMaxRegulatoryPower + twiceLargestAntenna;
--
-- if (regulatory->tp_scale != ATH9K_TP_SCALE_MAX)
-- maxRegAllowedPower -=
-- (tpScaleReductionTable[(regulatory->tp_scale)] * 2);
--
-- scaledPower = min(powerLimit, maxRegAllowedPower);
-+ scaledPower = powerLimit - antenna_reduction;
-
- /*
- * Reduce scaled Power by number of chains active
-@@ -815,7 +796,6 @@ static void ath9k_hw_set_ar9287_power_pe
- static void ath9k_hw_ar9287_set_txpower(struct ath_hw *ah,
- struct ath9k_channel *chan, u16 cfgCtl,
- u8 twiceAntennaReduction,
-- u8 twiceMaxRegulatoryPower,
- u8 powerLimit, bool test)
- {
- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-@@ -834,7 +814,6 @@ static void ath9k_hw_ar9287_set_txpower(
- ath9k_hw_set_ar9287_power_per_rate_table(ah, chan,
- &ratesArray[0], cfgCtl,
- twiceAntennaReduction,
-- twiceMaxRegulatoryPower,
- powerLimit);
-
- ath9k_hw_set_ar9287_power_cal_table(ah, chan);
---- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
-+++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
-@@ -400,6 +400,7 @@ static u32 ath9k_hw_def_get_eeprom(struc
- struct ar5416_eeprom_def *eep = &ah->eeprom.def;
- struct modal_eep_header *pModal = eep->modalHeader;
- struct base_eep_header *pBase = &eep->baseEepHeader;
-+ int band = 0;
-
- switch (param) {
- case EEP_NFTHRESH_5:
-@@ -467,6 +468,14 @@ static u32 ath9k_hw_def_get_eeprom(struc
- return pBase->pwr_table_offset;
- else
- return AR5416_PWR_TABLE_OFFSET_DB;
-+ case EEP_ANTENNA_GAIN_2G:
-+ band = 1;
-+ /* fall through */
-+ case EEP_ANTENNA_GAIN_5G:
-+ return max_t(u8, max_t(u8,
-+ pModal[band].antennaGainCh[0],
-+ pModal[band].antennaGainCh[1]),
-+ pModal[band].antennaGainCh[2]);
- default:
- return 0;
- }
-@@ -986,21 +995,15 @@ static void ath9k_hw_set_def_power_per_r
- struct ath9k_channel *chan,
- int16_t *ratesArray,
- u16 cfgCtl,
-- u16 AntennaReduction,
-- u16 twiceMaxRegulatoryPower,
-+ u16 antenna_reduction,
- u16 powerLimit)
- {
- #define REDUCE_SCALED_POWER_BY_TWO_CHAIN 6 /* 10*log10(2)*2 */
- #define REDUCE_SCALED_POWER_BY_THREE_CHAIN 9 /* 10*log10(3)*2 */
-
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ar5416_eeprom_def *pEepData = &ah->eeprom.def;
- u16 twiceMaxEdgePower = MAX_RATE_POWER;
-- static const u16 tpScaleReductionTable[5] =
-- { 0, 3, 6, 9, MAX_RATE_POWER };
--
- int i;
-- int16_t twiceLargestAntenna;
- struct cal_ctl_data *rep;
- struct cal_target_power_leg targetPowerOfdm, targetPowerCck = {
- 0, { 0, 0, 0, 0}
-@@ -1012,7 +1015,7 @@ static void ath9k_hw_set_def_power_per_r
- struct cal_target_power_ht targetPowerHt20, targetPowerHt40 = {
- 0, {0, 0, 0, 0}
- };
-- u16 scaledPower = 0, minCtlPower, maxRegAllowedPower;
-+ u16 scaledPower = 0, minCtlPower;
- static const u16 ctlModesFor11a[] = {
- CTL_11A, CTL_5GHT20, CTL_11A_EXT, CTL_5GHT40
- };
-@@ -1031,27 +1034,7 @@ static void ath9k_hw_set_def_power_per_r
-
- ath9k_hw_get_channel_centers(ah, chan, &centers);
-
-- twiceLargestAntenna = max(
-- pEepData->modalHeader
-- [IS_CHAN_2GHZ(chan)].antennaGainCh[0],
-- pEepData->modalHeader
-- [IS_CHAN_2GHZ(chan)].antennaGainCh[1]);
--
-- twiceLargestAntenna = max((u8)twiceLargestAntenna,
-- pEepData->modalHeader
-- [IS_CHAN_2GHZ(chan)].antennaGainCh[2]);
--
-- twiceLargestAntenna = (int16_t)min(AntennaReduction -
-- twiceLargestAntenna, 0);
--
-- maxRegAllowedPower = twiceMaxRegulatoryPower + twiceLargestAntenna;
--
-- if (regulatory->tp_scale != ATH9K_TP_SCALE_MAX) {
-- maxRegAllowedPower -=
-- (tpScaleReductionTable[(regulatory->tp_scale)] * 2);
-- }
--
-- scaledPower = min(powerLimit, maxRegAllowedPower);
-+ scaledPower = powerLimit - antenna_reduction;
-
- switch (ar5416_get_ntxchains(tx_chainmask)) {
- case 1:
-@@ -1256,7 +1239,6 @@ static void ath9k_hw_def_set_txpower(str
- struct ath9k_channel *chan,
- u16 cfgCtl,
- u8 twiceAntennaReduction,
-- u8 twiceMaxRegulatoryPower,
- u8 powerLimit, bool test)
- {
- #define RT_AR_DELTA(x) (ratesArray[x] - cck_ofdm_delta)
-@@ -1278,7 +1260,6 @@ static void ath9k_hw_def_set_txpower(str
- ath9k_hw_set_def_power_per_rate_table(ah, chan,
- &ratesArray[0], cfgCtl,
- twiceAntennaReduction,
-- twiceMaxRegulatoryPower,
- powerLimit);
-
- ath9k_hw_set_def_power_cal_table(ah, chan);
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -763,10 +763,8 @@ static void ar5008_hw_set_channel_regs(s
- static int ar5008_hw_process_ini(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ath_common *common = ath9k_hw_common(ah);
- int i, regWrites = 0;
-- struct ieee80211_channel *channel = chan->chan;
- u32 modesIndex, freqIndex;
-
- switch (chan->chanmode) {
-@@ -903,14 +901,7 @@ static int ar5008_hw_process_ini(struct
- ar5008_hw_set_channel_regs(ah, chan);
- ar5008_hw_init_chain_masks(ah);
- ath9k_olc_init(ah);
--
-- /* Set TX power */
-- ah->eep_ops->set_txpower(ah, chan,
-- ath9k_regd_get_ctl(regulatory, chan),
-- channel->max_antenna_gain * 2,
-- channel->max_power * 2,
-- min((u32) MAX_RATE_POWER,
-- (u32) regulatory->power_limit), false);
-+ ath9k_hw_apply_txpower(ah, chan);
-
- /* Write analog registers */
- if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
---- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-@@ -19,7 +19,6 @@
-
- void ar9003_paprd_enable(struct ath_hw *ah, bool val)
- {
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ath9k_channel *chan = ah->curchan;
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-
-@@ -54,13 +53,7 @@ void ar9003_paprd_enable(struct ath_hw *
-
- if (val) {
- ah->paprd_table_write_done = true;
--
-- ah->eep_ops->set_txpower(ah, chan,
-- ath9k_regd_get_ctl(regulatory, chan),
-- chan->chan->max_antenna_gain * 2,
-- chan->chan->max_power * 2,
-- min((u32) MAX_RATE_POWER,
-- (u32) regulatory->power_limit), false);
-+ ath9k_hw_apply_txpower(ah, chan);
- }
-
- REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0,
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -628,9 +628,7 @@ static void ar9003_hw_prog_ini(struct at
- static int ar9003_hw_process_ini(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
-- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- unsigned int regWrites = 0, i;
-- struct ieee80211_channel *channel = chan->chan;
- u32 modesIndex;
-
- switch (chan->chanmode) {
-@@ -683,14 +681,7 @@ static int ar9003_hw_process_ini(struct
- ar9003_hw_override_ini(ah);
- ar9003_hw_set_channel_regs(ah, chan);
- ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
--
-- /* Set TX power */
-- ah->eep_ops->set_txpower(ah, chan,
-- ath9k_regd_get_ctl(regulatory, chan),
-- channel->max_antenna_gain * 2,
-- channel->max_power * 2,
-- min((u32) MAX_RATE_POWER,
-- (u32) regulatory->power_limit), false);
-+ ath9k_hw_apply_txpower(ah, chan);
-
- return 0;
- }
---- a/drivers/net/wireless/ath/ath9k/common.c
-+++ b/drivers/net/wireless/ath/ath9k/common.c
-@@ -161,10 +161,12 @@ EXPORT_SYMBOL(ath9k_cmn_count_streams);
- void ath9k_cmn_update_txpow(struct ath_hw *ah, u16 cur_txpow,
- u16 new_txpow, u16 *txpower)
- {
-- if (cur_txpow != new_txpow) {
-+ struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
-+
-+ if (reg->power_limit != new_txpow) {
- ath9k_hw_set_txpowerlimit(ah, new_txpow, false);
- /* read back in case value is clamped */
-- *txpower = ath9k_hw_regulatory(ah)->power_limit;
-+ *txpower = reg->max_power_level;
- }
- }
- EXPORT_SYMBOL(ath9k_cmn_update_txpow);
---- a/drivers/net/wireless/ath/ath9k/eeprom.h
-+++ b/drivers/net/wireless/ath/ath9k/eeprom.h
-@@ -253,7 +253,9 @@ enum eeprom_param {
- EEP_PAPRD,
- EEP_MODAL_VER,
- EEP_ANT_DIV_CTL1,
-- EEP_CHAIN_MASK_REDUCE
-+ EEP_CHAIN_MASK_REDUCE,
-+ EEP_ANTENNA_GAIN_2G,
-+ EEP_ANTENNA_GAIN_5G
- };
-
- enum ar5416_rates {
-@@ -657,8 +659,7 @@ struct eeprom_ops {
- void (*set_addac)(struct ath_hw *hw, struct ath9k_channel *chan);
- void (*set_txpower)(struct ath_hw *hw, struct ath9k_channel *chan,
- u16 cfgCtl, u8 twiceAntennaReduction,
-- u8 twiceMaxRegulatoryPower, u8 powerLimit,
-- bool test);
-+ u8 powerLimit, bool test);
- u16 (*get_spur_channel)(struct ath_hw *ah, u16 i, bool is2GHz);
- };
-
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -626,7 +626,6 @@ static void ath9k_init_band_txpower(stru
- struct ieee80211_supported_band *sband;
- struct ieee80211_channel *chan;
- struct ath_hw *ah = sc->sc_ah;
-- struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
- int i;
-
- sband = &sc->sbands[band];
-@@ -635,7 +634,6 @@ static void ath9k_init_band_txpower(stru
- ah->curchan = &ah->channels[chan->hw_value];
- ath9k_cmn_update_ichannel(ah->curchan, chan, NL80211_CHAN_HT20);
- ath9k_hw_set_txpowerlimit(ah, MAX_RATE_POWER, true);
-- chan->max_power = reg->max_power_level / 2;
- }
- }
-