aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2013-10-03 14:00:43 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-10-10 13:48:06 -0400
commit271f1a4d70c34ff1ff7a9e3b1fd56068757f24b1 (patch)
treef42abf288f8ca4c200b49b7dfcdc8301926a301e /drivers/net
parent0ffd2a9a44ceb80e4e58fc3570bb5c941211d77f (diff)
rt2x00: rt2800lib: fix VGC programming for RT3572 and RT3593
According to the DPO_RT5572_LinuxSTA_2.6.1.3_20121022 reference driver, programming of the 'BBP 66' register on the RT3572 and RT3593 chipsets must be done via the 'rt2800_bbp_write_with_rx_chain' function. This ensures that value is correclty set for all RX chains. References: RT35xx_ChipAGCAdjust and RT35xx_SetAGCInitValue functions in chips/rt35xx.c Signed-off-by: Gabor Juhos <juhosg@openwrt.org> Acked-by: Stanislaw Gruszka <stf_xl@wp.pl> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index eff0f56cf618..47ef81ba605d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -4442,11 +4442,17 @@ static inline void rt2800_set_vgc(struct rt2x00_dev *rt2x00dev,
4442 struct link_qual *qual, u8 vgc_level) 4442 struct link_qual *qual, u8 vgc_level)
4443{ 4443{
4444 if (qual->vgc_level != vgc_level) { 4444 if (qual->vgc_level != vgc_level) {
4445 if (rt2x00_rt(rt2x00dev, RT5592)) { 4445 if (rt2x00_rt(rt2x00dev, RT3572) ||
4446 rt2x00_rt(rt2x00dev, RT3593)) {
4447 rt2800_bbp_write_with_rx_chain(rt2x00dev, 66,
4448 vgc_level);
4449 } else if (rt2x00_rt(rt2x00dev, RT5592)) {
4446 rt2800_bbp_write(rt2x00dev, 83, qual->rssi > -65 ? 0x4a : 0x7a); 4450 rt2800_bbp_write(rt2x00dev, 83, qual->rssi > -65 ? 0x4a : 0x7a);
4447 rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, vgc_level); 4451 rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, vgc_level);
4448 } else 4452 } else {
4449 rt2800_bbp_write(rt2x00dev, 66, vgc_level); 4453 rt2800_bbp_write(rt2x00dev, 66, vgc_level);
4454 }
4455
4450 qual->vgc_level = vgc_level; 4456 qual->vgc_level = vgc_level;
4451 qual->vgc_level_reg = vgc_level; 4457 qual->vgc_level_reg = vgc_level;
4452 } 4458 }