aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2800lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800lib.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 01dc8891070c..934dd9d9d4dc 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -2570,13 +2570,10 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
2570 enum ieee80211_band band, 2570 enum ieee80211_band band,
2571 int power_level) 2571 int power_level)
2572{ 2572{
2573 u8 txpower; 2573 u8 txpower, r1;
2574 u16 eeprom; 2574 u16 eeprom;
2575 int i, is_rate_b; 2575 u32 reg, offset;
2576 u32 reg; 2576 int i, is_rate_b, delta, power_ctrl;
2577 u8 r1;
2578 u32 offset;
2579 int delta;
2580 2577
2581 /* 2578 /*
2582 * Calculate HT40 compensation delta 2579 * Calculate HT40 compensation delta
@@ -2589,10 +2586,24 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
2589 delta += rt2800_get_gain_calibration_delta(rt2x00dev); 2586 delta += rt2800_get_gain_calibration_delta(rt2x00dev);
2590 2587
2591 /* 2588 /*
2592 * set to normal bbp tx power control mode: +/- 0dBm 2589 * BBP_R1 controls TX power for all rates, it allow to set the following
2590 * gains -12, -6, 0, +6 dBm by setting values 2, 1, 0, 3 respectively.
2591 *
2592 * TODO: we do not use +6 dBm option to do not increase power beyond
2593 * regulatory limit, however this could be utilized for devices with
2594 * CAPABILITY_POWER_LIMIT.
2593 */ 2595 */
2594 rt2800_bbp_read(rt2x00dev, 1, &r1); 2596 rt2800_bbp_read(rt2x00dev, 1, &r1);
2595 rt2x00_set_field8(&r1, BBP1_TX_POWER_CTRL, 0); 2597 if (delta <= -12) {
2598 power_ctrl = 2;
2599 delta += 12;
2600 } else if (delta <= -6) {
2601 power_ctrl = 1;
2602 delta += 6;
2603 } else {
2604 power_ctrl = 0;
2605 }
2606 rt2x00_set_field8(&r1, BBP1_TX_POWER_CTRL, power_ctrl);
2596 rt2800_bbp_write(rt2x00dev, 1, r1); 2607 rt2800_bbp_write(rt2x00dev, 1, r1);
2597 offset = TX_PWR_CFG_0; 2608 offset = TX_PWR_CFG_0;
2598 2609