mirror of
https://github.com/torvalds/linux.git
synced 2024-12-24 11:51:27 +00:00
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>
This commit is contained in:
parent
037fd9b647
commit
cee2c7315f
@ -2570,13 +2570,10 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
|
||||
enum ieee80211_band band,
|
||||
int power_level)
|
||||
{
|
||||
u8 txpower;
|
||||
u8 txpower, r1;
|
||||
u16 eeprom;
|
||||
int i, is_rate_b;
|
||||
u32 reg;
|
||||
u8 r1;
|
||||
u32 offset;
|
||||
int delta;
|
||||
u32 reg, offset;
|
||||
int i, is_rate_b, delta, power_ctrl;
|
||||
|
||||
/*
|
||||
* Calculate HT40 compensation delta
|
||||
@ -2589,10 +2586,24 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
|
||||
delta += rt2800_get_gain_calibration_delta(rt2x00dev);
|
||||
|
||||
/*
|
||||
* set to normal bbp tx power control mode: +/- 0dBm
|
||||
* BBP_R1 controls TX power for all rates, it allow to set the following
|
||||
* gains -12, -6, 0, +6 dBm by setting values 2, 1, 0, 3 respectively.
|
||||
*
|
||||
* TODO: we do not use +6 dBm option to do not increase power beyond
|
||||
* regulatory limit, however this could be utilized for devices with
|
||||
* CAPABILITY_POWER_LIMIT.
|
||||
*/
|
||||
rt2800_bbp_read(rt2x00dev, 1, &r1);
|
||||
rt2x00_set_field8(&r1, BBP1_TX_POWER_CTRL, 0);
|
||||
if (delta <= -12) {
|
||||
power_ctrl = 2;
|
||||
delta += 12;
|
||||
} else if (delta <= -6) {
|
||||
power_ctrl = 1;
|
||||
delta += 6;
|
||||
} else {
|
||||
power_ctrl = 0;
|
||||
}
|
||||
rt2x00_set_field8(&r1, BBP1_TX_POWER_CTRL, power_ctrl);
|
||||
rt2800_bbp_write(rt2x00dev, 1, r1);
|
||||
offset = TX_PWR_CFG_0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user