diff options
Diffstat (limited to 'drivers/net/wireless/b43/wa.c')
-rw-r--r-- | drivers/net/wireless/b43/wa.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/drivers/net/wireless/b43/wa.c b/drivers/net/wireless/b43/wa.c index 0ba7f948bee2..e632125cb772 100644 --- a/drivers/net/wireless/b43/wa.c +++ b/drivers/net/wireless/b43/wa.c | |||
@@ -123,17 +123,24 @@ static void b43_wa_rssi_lt(struct b43_wldev *dev) /* RSSI lookup table */ | |||
123 | { | 123 | { |
124 | int i; | 124 | int i; |
125 | 125 | ||
126 | for (i = 0; i < 8; i++) | 126 | if (0 /* FIXME: For APHY.rev=2 this might be needed */) { |
127 | b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i + 8); | 127 | for (i = 0; i < 8; i++) |
128 | for (i = 8; i < 16; i++) | 128 | b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i + 8); |
129 | b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i - 8); | 129 | for (i = 8; i < 16; i++) |
130 | b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i - 8); | ||
131 | } else { | ||
132 | for (i = 0; i < 64; i++) | ||
133 | b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i); | ||
134 | } | ||
130 | } | 135 | } |
131 | 136 | ||
132 | static void b43_wa_analog(struct b43_wldev *dev) | 137 | static void b43_wa_analog(struct b43_wldev *dev) |
133 | { | 138 | { |
134 | struct b43_phy *phy = &dev->phy; | 139 | struct b43_phy *phy = &dev->phy; |
140 | u16 ofdmrev; | ||
135 | 141 | ||
136 | if (phy->analog > 2) { | 142 | ofdmrev = b43_phy_read(dev, B43_PHY_VERSION_OFDM) & B43_PHYVER_VERSION; |
143 | if (ofdmrev > 2) { | ||
137 | if (phy->type == B43_PHYTYPE_A) | 144 | if (phy->type == B43_PHYTYPE_A) |
138 | b43_phy_write(dev, B43_PHY_PWRDOWN, 0x1808); | 145 | b43_phy_write(dev, B43_PHY_PWRDOWN, 0x1808); |
139 | else | 146 | else |
@@ -306,16 +313,16 @@ static void b43_wa_crs_ed(struct b43_wldev *dev) | |||
306 | struct b43_phy *phy = &dev->phy; | 313 | struct b43_phy *phy = &dev->phy; |
307 | 314 | ||
308 | if (phy->rev == 1) { | 315 | if (phy->rev == 1) { |
309 | b43_phy_write(dev, B43_PHY_CRSTHRES1, 0x4F19); | 316 | b43_phy_write(dev, B43_PHY_CRSTHRES1_R1, 0x4F19); |
310 | } else if (phy->rev == 2) { | 317 | } else if (phy->rev == 2) { |
311 | b43_phy_write(dev, B43_PHY_CRSTHRES1_R1, 0x1861); | 318 | b43_phy_write(dev, B43_PHY_CRSTHRES1, 0x1861); |
312 | b43_phy_write(dev, B43_PHY_CRSTHRES2_R1, 0x1861); | 319 | b43_phy_write(dev, B43_PHY_CRSTHRES2, 0x0271); |
313 | b43_phy_write(dev, B43_PHY_ANTDWELL, | 320 | b43_phy_write(dev, B43_PHY_ANTDWELL, |
314 | b43_phy_read(dev, B43_PHY_ANTDWELL) | 321 | b43_phy_read(dev, B43_PHY_ANTDWELL) |
315 | | 0x0800); | 322 | | 0x0800); |
316 | } else { | 323 | } else { |
317 | b43_phy_write(dev, B43_PHY_CRSTHRES1_R1, 0x0098); | 324 | b43_phy_write(dev, B43_PHY_CRSTHRES1, 0x0098); |
318 | b43_phy_write(dev, B43_PHY_CRSTHRES2_R1, 0x0070); | 325 | b43_phy_write(dev, B43_PHY_CRSTHRES2, 0x0070); |
319 | b43_phy_write(dev, B43_PHY_OFDM(0xC9), 0x0080); | 326 | b43_phy_write(dev, B43_PHY_OFDM(0xC9), 0x0080); |
320 | b43_phy_write(dev, B43_PHY_ANTDWELL, | 327 | b43_phy_write(dev, B43_PHY_ANTDWELL, |
321 | b43_phy_read(dev, B43_PHY_ANTDWELL) | 328 | b43_phy_read(dev, B43_PHY_ANTDWELL) |
@@ -441,7 +448,7 @@ static void b43_wa_altagc(struct b43_wldev *dev) | |||
441 | } | 448 | } |
442 | } | 449 | } |
443 | b43_phy_write(dev, B43_PHY_DIVSRCHIDX, | 450 | b43_phy_write(dev, B43_PHY_DIVSRCHIDX, |
444 | (b43_phy_read(dev, B43_PHY_DIVSRCHIDX) & 0x7F7F) | 0x7874); | 451 | (b43_phy_read(dev, B43_PHY_DIVSRCHIDX) & 0x8080) | 0x7874); |
445 | b43_phy_write(dev, B43_PHY_OFDM(0x8E), 0x1C00); | 452 | b43_phy_write(dev, B43_PHY_OFDM(0x8E), 0x1C00); |
446 | if (phy->rev == 1) { | 453 | if (phy->rev == 1) { |
447 | b43_phy_write(dev, B43_PHY_DIVP1P2GAIN, | 454 | b43_phy_write(dev, B43_PHY_DIVP1P2GAIN, |
@@ -466,6 +473,7 @@ static void b43_wa_altagc(struct b43_wldev *dev) | |||
466 | b43_phy_write(dev, B43_PHY_OFDM(0x26), | 473 | b43_phy_write(dev, B43_PHY_OFDM(0x26), |
467 | b43_phy_read(dev, B43_PHY_OFDM(0x26)) & ~0x1000); | 474 | b43_phy_read(dev, B43_PHY_OFDM(0x26)) & ~0x1000); |
468 | } | 475 | } |
476 | b43_phy_read(dev, B43_PHY_VERSION_OFDM); /* Dummy read */ | ||
469 | } | 477 | } |
470 | 478 | ||
471 | static void b43_wa_tr_ltov(struct b43_wldev *dev) /* TR Lookup Table Original Values */ | 479 | static void b43_wa_tr_ltov(struct b43_wldev *dev) /* TR Lookup Table Original Values */ |