diff options
author | Stanislaw Gruszka <sgruszka@redhat.com> | 2012-10-05 07:44:09 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-10-19 15:53:08 -0400 |
commit | cee2c7315f60beeff6137ee59e99acc77d636eeb (patch) | |
tree | 2970bb48aa985a4c09f52c32153ebd4a0fb5c28e /drivers/net/wireless/rt2x00 | |
parent | 037fd9b6473393c35a31f0c43e26eb7e874e901d (diff) |
rt2800: use BBP_R1 for setting tx power
TX power delta can be negative. TX_PWR_CFG_ registers allow to set delta
only in range between 0 dBm and 15 dBm (4 bits for each rate). Se we
need to use BBP_R1 to configure negative deltas.
Not utilize +6 dBm increasing BBP_R1 option for safety reason. For now,
this can be used for devices, which export maximum allowed TX power
value.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 27 |
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 | ||