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 | |
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>
-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 | } |