Sync A PHY initialization code with specs, allowing further work on A PHY
support. Note: G PHY initialization is involved as well.
Signed-off-by: Stefano Brivio [EMAIL PROTECTED]
Signed-off-by: Michael Buesch [EMAIL PROTECTED]
---
Please test. This could break badly 802.11g devices. It will give two
warnings about unused functions - that's known.
Index: wireless-2.6/drivers/net/wireless/b43/Makefile
===
--- wireless-2.6.orig/drivers/net/wireless/b43/Makefile
+++ wireless-2.6/drivers/net/wireless/b43/Makefile
@@ -5,6 +5,7 @@ b43-y += phy.o
b43-y += sysfs.o
b43-y += xmit.o
b43-y += lo.o
+b43-y += wa.o
# b43 RFKILL button support
b43-$(CONFIG_B43_RFKILL) += rfkill.o
# b43 LED support
Index: wireless-2.6/drivers/net/wireless/b43/b43.h
===
--- wireless-2.6.orig/drivers/net/wireless/b43/b43.h
+++ wireless-2.6/drivers/net/wireless/b43/b43.h
@@ -542,6 +542,10 @@ struct b43_phy {
u16 lofcal;
u16 initval;//FIXME rename?
+
+ /* OFDM address read/write caching for hardware auto-increment. */
+ u16 ofdm_addr;
+ u8 ofdm_valid; /* 0: invalid, 1: read, 2: write */
};
/* Data structures for DMA transmission, per 80211 core. */
Index: wireless-2.6/drivers/net/wireless/b43/main.c
===
--- wireless-2.6.orig/drivers/net/wireless/b43/main.c
+++ wireless-2.6/drivers/net/wireless/b43/main.c
@@ -2264,6 +2264,9 @@ static int b43_chip_init(struct b43_wlde
b43_write16(dev, B43_MMIO_POWERUP_DELAY,
dev-dev-bus-chipco.fast_pwrup_delay);
+ /* OFDM address caching. */
+ phy-ofdm_valid = 0;
+
err = 0;
b43dbg(dev-wl, Chip initialized\n);
out:
Index: wireless-2.6/drivers/net/wireless/b43/phy.c
===
--- wireless-2.6.orig/drivers/net/wireless/b43/phy.c
+++ wireless-2.6/drivers/net/wireless/b43/phy.c
@@ -34,6 +34,8 @@
#include main.h
#include tables.h
#include lo.h
+#include wa.h
+
static const s8 b43_tssi2dbm_b_table[] = {
0x4D, 0x4C, 0x4B, 0x4A,
@@ -303,7 +305,7 @@ void b43_phy_write(struct b43_wldev *dev
b43_write16(dev, B43_MMIO_PHY_DATA, val);
}
-static void b43_radio_set_txpower_a(struct b43_wldev *dev, u16 txpower);
+static void b43_set_txpower_a(struct b43_wldev *dev, u16 txpower);
/* Adjust the transmission power output (G-PHY) */
void b43_set_txpower_g(struct b43_wldev *dev,
@@ -763,214 +765,6 @@ static void b43_phy_init_pctl(struct b43
b43_shm_clear_tssi(dev);
}
-static void b43_phy_agcsetup(struct b43_wldev *dev)
-{
- struct b43_phy *phy = dev-phy;
- u16 offset = 0x;
-
- if (phy-rev == 1)
- offset = 0x4C00;
-
- b43_ofdmtab_write16(dev, offset, 0, 0x00FE);
- b43_ofdmtab_write16(dev, offset, 1, 0x000D);
- b43_ofdmtab_write16(dev, offset, 2, 0x0013);
- b43_ofdmtab_write16(dev, offset, 3, 0x0019);
-
- if (phy-rev == 1) {
- b43_ofdmtab_write16(dev, 0x1800, 0, 0x2710);
- b43_ofdmtab_write16(dev, 0x1801, 0, 0x9B83);
- b43_ofdmtab_write16(dev, 0x1802, 0, 0x9B83);
- b43_ofdmtab_write16(dev, 0x1803, 0, 0x0F8D);
- b43_phy_write(dev, 0x0455, 0x0004);
- }
-
- b43_phy_write(dev, 0x04A5, (b43_phy_read(dev, 0x04A5)
-0x00FF) | 0x5700);
- b43_phy_write(dev, 0x041A, (b43_phy_read(dev, 0x041A)
-0xFF80) | 0x000F);
- b43_phy_write(dev, 0x041A, (b43_phy_read(dev, 0x041A)
-0xC07F) | 0x2B80);
- b43_phy_write(dev, 0x048C, (b43_phy_read(dev, 0x048C)
-0xF0FF) | 0x0300);
-
- b43_radio_write16(dev, 0x007A, b43_radio_read16(dev, 0x007A)
- | 0x0008);
-
- b43_phy_write(dev, 0x04A0, (b43_phy_read(dev, 0x04A0)
-0xFFF0) | 0x0008);
- b43_phy_write(dev, 0x04A1, (b43_phy_read(dev, 0x04A1)
-0xF0FF) | 0x0600);
- b43_phy_write(dev, 0x04A2, (b43_phy_read(dev, 0x04A2)
-0xF0FF) | 0x0700);
- b43_phy_write(dev, 0x04A0, (b43_phy_read(dev, 0x04A0)
-0xF0FF) | 0x0100);
-
- if (phy-rev == 1) {
- b43_phy_write(dev, 0x04A2, (b43_phy_read(dev, 0x04A2)
-0xFFF0) | 0x0007);
- }
-
- b43_phy_write(dev, 0x0488, (b43_phy_read(dev, 0x0488)
-0xFF00) | 0x001C);
- b43_phy_write(dev, 0x0488, (b43_phy_read(dev, 0x0488)
-