diff options
| author | Ehud Gavron <gavron@wetwork.net> | 2008-09-07 00:30:00 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2008-09-11 15:53:33 -0400 |
| commit | 940b7a3a6c257391bda0950448591dd79efebf59 (patch) | |
| tree | d6db2e6d7feee3976227e3e7c97046ed0739762d /drivers/net/wireless/b43legacy | |
| parent | c6a2afdacccd56cc0be8e9a7977f0ed1509069f6 (diff) | |
b43legacy: Fix to enhance TX speed
Recent changes in the specifications have improved the performance
of the BCM4306/2 devices that use b43legacy as the driver. These
"errors" in the specs have been present from the very first implementation
of bcm43xx.
Signed-off-by: Ehud Gavron <gavron@wetwork.net>
Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy')
| -rw-r--r-- | drivers/net/wireless/b43legacy/phy.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/drivers/net/wireless/b43legacy/phy.c b/drivers/net/wireless/b43legacy/phy.c index 768cccb9b1ba..bed67a54250c 100644 --- a/drivers/net/wireless/b43legacy/phy.c +++ b/drivers/net/wireless/b43legacy/phy.c | |||
| @@ -595,12 +595,14 @@ static void b43legacy_phy_initb5(struct b43legacy_wldev *dev) | |||
| 595 | 0x0035) & 0xFFC0) | 0x0064); | 595 | 0x0035) & 0xFFC0) | 0x0064); |
| 596 | b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev, | 596 | b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev, |
| 597 | 0x005D) & 0xFF80) | 0x000A); | 597 | 0x005D) & 0xFF80) | 0x000A); |
| 598 | b43legacy_phy_write(dev, 0x5B, 0x0000); | ||
| 599 | b43legacy_phy_write(dev, 0x5C, 0x0000); | ||
| 598 | } | 600 | } |
| 599 | 601 | ||
| 600 | if (dev->bad_frames_preempt) | 602 | if (dev->bad_frames_preempt) |
| 601 | b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD, | 603 | b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD, |
| 602 | b43legacy_phy_read(dev, | 604 | b43legacy_phy_read(dev, |
| 603 | B43legacy_PHY_RADIO_BITFIELD) | (1 << 11)); | 605 | B43legacy_PHY_RADIO_BITFIELD) | (1 << 12)); |
| 604 | 606 | ||
| 605 | if (phy->analog == 1) { | 607 | if (phy->analog == 1) { |
| 606 | b43legacy_phy_write(dev, 0x0026, 0xCE00); | 608 | b43legacy_phy_write(dev, 0x0026, 0xCE00); |
| @@ -753,7 +755,7 @@ static void b43legacy_phy_initb6(struct b43legacy_wldev *dev) | |||
| 753 | b43legacy_radio_write16(dev, 0x0050, 0x0020); | 755 | b43legacy_radio_write16(dev, 0x0050, 0x0020); |
| 754 | } | 756 | } |
| 755 | if (phy->radio_rev <= 2) { | 757 | if (phy->radio_rev <= 2) { |
| 756 | b43legacy_radio_write16(dev, 0x007C, 0x0020); | 758 | b43legacy_radio_write16(dev, 0x0050, 0x0020); |
| 757 | b43legacy_radio_write16(dev, 0x005A, 0x0070); | 759 | b43legacy_radio_write16(dev, 0x005A, 0x0070); |
| 758 | b43legacy_radio_write16(dev, 0x005B, 0x007B); | 760 | b43legacy_radio_write16(dev, 0x005B, 0x007B); |
| 759 | b43legacy_radio_write16(dev, 0x005C, 0x00B0); | 761 | b43legacy_radio_write16(dev, 0x005C, 0x00B0); |
| @@ -771,7 +773,7 @@ static void b43legacy_phy_initb6(struct b43legacy_wldev *dev) | |||
| 771 | b43legacy_phy_write(dev, 0x002A, 0x8AC0); | 773 | b43legacy_phy_write(dev, 0x002A, 0x8AC0); |
| 772 | b43legacy_phy_write(dev, 0x0038, 0x0668); | 774 | b43legacy_phy_write(dev, 0x0038, 0x0668); |
| 773 | b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF); | 775 | b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF); |
| 774 | if (phy->radio_rev <= 5) | 776 | if (phy->radio_rev == 4 || phy->radio_rev == 5) |
| 775 | b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev, | 777 | b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev, |
| 776 | 0x005D) & 0xFF80) | 0x0003); | 778 | 0x005D) & 0xFF80) | 0x0003); |
| 777 | if (phy->radio_rev <= 2) | 779 | if (phy->radio_rev <= 2) |
| @@ -1010,7 +1012,7 @@ static void b43legacy_phy_initg(struct b43legacy_wldev *dev) | |||
| 1010 | b43legacy_phy_initb5(dev); | 1012 | b43legacy_phy_initb5(dev); |
| 1011 | else | 1013 | else |
| 1012 | b43legacy_phy_initb6(dev); | 1014 | b43legacy_phy_initb6(dev); |
| 1013 | if (phy->rev >= 2 || phy->gmode) | 1015 | if (phy->rev >= 2 && phy->gmode) |
| 1014 | b43legacy_phy_inita(dev); | 1016 | b43legacy_phy_inita(dev); |
| 1015 | 1017 | ||
| 1016 | if (phy->rev >= 2) { | 1018 | if (phy->rev >= 2) { |
| @@ -1025,18 +1027,22 @@ static void b43legacy_phy_initg(struct b43legacy_wldev *dev) | |||
| 1025 | b43legacy_phy_write(dev, 0x0811, 0x0400); | 1027 | b43legacy_phy_write(dev, 0x0811, 0x0400); |
| 1026 | b43legacy_phy_write(dev, 0x0015, 0x00C0); | 1028 | b43legacy_phy_write(dev, 0x0015, 0x00C0); |
| 1027 | } | 1029 | } |
| 1028 | if (phy->rev >= 2 || phy->gmode) { | 1030 | if (phy->gmode) { |
| 1029 | tmp = b43legacy_phy_read(dev, 0x0400) & 0xFF; | 1031 | tmp = b43legacy_phy_read(dev, 0x0400) & 0xFF; |
| 1030 | if (tmp == 3 || tmp == 5) { | 1032 | if (tmp == 3) { |
| 1033 | b43legacy_phy_write(dev, 0x04C2, 0x1816); | ||
| 1034 | b43legacy_phy_write(dev, 0x04C3, 0x8606); | ||
| 1035 | } | ||
| 1036 | if (tmp == 4 || tmp == 5) { | ||
| 1031 | b43legacy_phy_write(dev, 0x04C2, 0x1816); | 1037 | b43legacy_phy_write(dev, 0x04C2, 0x1816); |
| 1032 | b43legacy_phy_write(dev, 0x04C3, 0x8006); | 1038 | b43legacy_phy_write(dev, 0x04C3, 0x8006); |
| 1033 | if (tmp == 5) | 1039 | b43legacy_phy_write(dev, 0x04CC, |
| 1034 | b43legacy_phy_write(dev, 0x04CC, | 1040 | (b43legacy_phy_read(dev, |
| 1035 | (b43legacy_phy_read(dev, | 1041 | 0x04CC) & 0x00FF) | |
| 1036 | 0x04CC) & 0x00FF) | | 1042 | 0x1F00); |
| 1037 | 0x1F00); | ||
| 1038 | } | 1043 | } |
| 1039 | b43legacy_phy_write(dev, 0x047E, 0x0078); | 1044 | if (phy->rev >= 2) |
| 1045 | b43legacy_phy_write(dev, 0x047E, 0x0078); | ||
| 1040 | } | 1046 | } |
| 1041 | if (phy->radio_rev == 8) { | 1047 | if (phy->radio_rev == 8) { |
| 1042 | b43legacy_phy_write(dev, 0x0801, b43legacy_phy_read(dev, 0x0801) | 1048 | b43legacy_phy_write(dev, 0x0801, b43legacy_phy_read(dev, 0x0801) |
| @@ -1078,7 +1084,7 @@ static void b43legacy_phy_initg(struct b43legacy_wldev *dev) | |||
| 1078 | else | 1084 | else |
| 1079 | b43legacy_phy_write(dev, 0x002F, 0x0202); | 1085 | b43legacy_phy_write(dev, 0x002F, 0x0202); |
| 1080 | } | 1086 | } |
| 1081 | if (phy->gmode || phy->rev >= 2) { | 1087 | if (phy->gmode) { |
| 1082 | b43legacy_phy_lo_adjust(dev, 0); | 1088 | b43legacy_phy_lo_adjust(dev, 0); |
| 1083 | b43legacy_phy_write(dev, 0x080F, 0x8078); | 1089 | b43legacy_phy_write(dev, 0x080F, 0x8078); |
| 1084 | } | 1090 | } |
