提交 2f19c287 编写于 作者: G Gábor Stefanik 提交者: John W. Linville

b43: Update dummy transmission to match V4 specs

The V4 dummy transmission has two extra bools in its prototype,
so update all callers with the 2 bools.
Signed-off-by: NGábor Stefanik <netrolller.3d@gmail.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 1758c094
...@@ -477,7 +477,7 @@ static void lo_measure_setup(struct b43_wldev *dev, ...@@ -477,7 +477,7 @@ static void lo_measure_setup(struct b43_wldev *dev,
} else } else
b43_phy_write(dev, B43_PHY_CCK(0x2B), 0x0802); b43_phy_write(dev, B43_PHY_CCK(0x2B), 0x0802);
if (phy->rev >= 2) if (phy->rev >= 2)
b43_dummy_transmission(dev); b43_dummy_transmission(dev, false, true);
b43_gphy_channel_switch(dev, 6, 0); b43_gphy_channel_switch(dev, 6, 0);
b43_radio_read16(dev, 0x51); /* dummy read */ b43_radio_read16(dev, 0x51); /* dummy read */
if (phy->type == B43_PHYTYPE_G) if (phy->type == B43_PHYTYPE_G)
......
...@@ -691,9 +691,9 @@ static void b43_synchronize_irq(struct b43_wldev *dev) ...@@ -691,9 +691,9 @@ static void b43_synchronize_irq(struct b43_wldev *dev)
} }
/* DummyTransmission function, as documented on /* DummyTransmission function, as documented on
* http://bcm-specs.sipsolutions.net/DummyTransmission * http://bcm-v4.sipsolutions.net/802.11/DummyTransmission
*/ */
void b43_dummy_transmission(struct b43_wldev *dev) void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on)
{ {
struct b43_wl *wl = dev->wl; struct b43_wl *wl = dev->wl;
struct b43_phy *phy = &dev->phy; struct b43_phy *phy = &dev->phy;
...@@ -707,19 +707,12 @@ void b43_dummy_transmission(struct b43_wldev *dev) ...@@ -707,19 +707,12 @@ void b43_dummy_transmission(struct b43_wldev *dev)
0x00000000, 0x00000000,
}; };
switch (phy->type) { if (ofdm) {
case B43_PHYTYPE_A:
max_loop = 0x1E; max_loop = 0x1E;
buffer[0] = 0x000201CC; buffer[0] = 0x000201CC;
break; } else {
case B43_PHYTYPE_B:
case B43_PHYTYPE_G:
max_loop = 0xFA; max_loop = 0xFA;
buffer[0] = 0x000B846E; buffer[0] = 0x000B846E;
break;
default:
B43_WARN_ON(1);
return;
} }
spin_lock_irq(&wl->irq_lock); spin_lock_irq(&wl->irq_lock);
...@@ -728,20 +721,35 @@ void b43_dummy_transmission(struct b43_wldev *dev) ...@@ -728,20 +721,35 @@ void b43_dummy_transmission(struct b43_wldev *dev)
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
b43_ram_write(dev, i * 4, buffer[i]); b43_ram_write(dev, i * 4, buffer[i]);
/* Commit writes */
b43_read32(dev, B43_MMIO_MACCTL);
b43_write16(dev, 0x0568, 0x0000); b43_write16(dev, 0x0568, 0x0000);
if (dev->dev->id.revision < 11)
b43_write16(dev, 0x07C0, 0x0000); b43_write16(dev, 0x07C0, 0x0000);
value = ((phy->type == B43_PHYTYPE_A) ? 1 : 0); else
b43_write16(dev, 0x07C0, 0x0100);
value = (ofdm ? 0x41 : 0x40);
b43_write16(dev, 0x050C, value); b43_write16(dev, 0x050C, value);
if ((phy->type == B43_PHYTYPE_N) || (phy->type == B43_PHYTYPE_LP))
b43_write16(dev, 0x0514, 0x1A02);
b43_write16(dev, 0x0508, 0x0000); b43_write16(dev, 0x0508, 0x0000);
b43_write16(dev, 0x050A, 0x0000); b43_write16(dev, 0x050A, 0x0000);
b43_write16(dev, 0x054C, 0x0000); b43_write16(dev, 0x054C, 0x0000);
b43_write16(dev, 0x056A, 0x0014); b43_write16(dev, 0x056A, 0x0014);
b43_write16(dev, 0x0568, 0x0826); b43_write16(dev, 0x0568, 0x0826);
b43_write16(dev, 0x0500, 0x0000); b43_write16(dev, 0x0500, 0x0000);
if (!pa_on && (phy->type == B43_PHYTYPE_N)) {
//SPEC TODO
}
switch (phy->type) {
case B43_PHYTYPE_N:
b43_write16(dev, 0x0502, 0x00D0);
break;
case B43_PHYTYPE_LP:
b43_write16(dev, 0x0502, 0x0050);
break;
default:
b43_write16(dev, 0x0502, 0x0030); b43_write16(dev, 0x0502, 0x0030);
}
if (phy->radio_ver == 0x2050 && phy->radio_rev <= 0x5) if (phy->radio_ver == 0x2050 && phy->radio_rev <= 0x5)
b43_radio_write16(dev, 0x0051, 0x0017); b43_radio_write16(dev, 0x0051, 0x0017);
......
...@@ -123,7 +123,7 @@ void __b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value ...@@ -123,7 +123,7 @@ void __b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value
u64 b43_hf_read(struct b43_wldev *dev); u64 b43_hf_read(struct b43_wldev *dev);
void b43_hf_write(struct b43_wldev *dev, u64 value); void b43_hf_write(struct b43_wldev *dev, u64 value);
void b43_dummy_transmission(struct b43_wldev *dev); void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on);
void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags); void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags);
......
...@@ -333,7 +333,7 @@ static void b43_set_all_gains(struct b43_wldev *dev, ...@@ -333,7 +333,7 @@ static void b43_set_all_gains(struct b43_wldev *dev,
b43_phy_maskset(dev, 0x04A1, 0xBFBF, tmp); b43_phy_maskset(dev, 0x04A1, 0xBFBF, tmp);
b43_phy_maskset(dev, 0x04A2, 0xBFBF, tmp); b43_phy_maskset(dev, 0x04A2, 0xBFBF, tmp);
} }
b43_dummy_transmission(dev); b43_dummy_transmission(dev, false, true);
} }
static void b43_set_original_gains(struct b43_wldev *dev) static void b43_set_original_gains(struct b43_wldev *dev)
...@@ -365,7 +365,7 @@ static void b43_set_original_gains(struct b43_wldev *dev) ...@@ -365,7 +365,7 @@ static void b43_set_original_gains(struct b43_wldev *dev)
b43_phy_maskset(dev, 0x04A0, 0xBFBF, 0x4040); b43_phy_maskset(dev, 0x04A0, 0xBFBF, 0x4040);
b43_phy_maskset(dev, 0x04A1, 0xBFBF, 0x4040); b43_phy_maskset(dev, 0x04A1, 0xBFBF, 0x4040);
b43_phy_maskset(dev, 0x04A2, 0xBFBF, 0x4000); b43_phy_maskset(dev, 0x04A2, 0xBFBF, 0x4000);
b43_dummy_transmission(dev); b43_dummy_transmission(dev, false, true);
} }
/* http://bcm-specs.sipsolutions.net/NRSSILookupTable */ /* http://bcm-specs.sipsolutions.net/NRSSILookupTable */
...@@ -1964,7 +1964,7 @@ static void b43_phy_init_pctl(struct b43_wldev *dev) ...@@ -1964,7 +1964,7 @@ static void b43_phy_init_pctl(struct b43_wldev *dev)
} }
b43_set_txpower_g(dev, &bbatt, &rfatt, 0); b43_set_txpower_g(dev, &bbatt, &rfatt, 0);
} }
b43_dummy_transmission(dev); b43_dummy_transmission(dev, false, true);
gphy->cur_idle_tssi = b43_phy_read(dev, B43_PHY_ITSSI); gphy->cur_idle_tssi = b43_phy_read(dev, B43_PHY_ITSSI);
if (B43_DEBUG) { if (B43_DEBUG) {
/* Current-Idle-TSSI sanity check. */ /* Current-Idle-TSSI sanity check. */
......
...@@ -37,7 +37,7 @@ static void b43_wa_papd(struct b43_wldev *dev) ...@@ -37,7 +37,7 @@ static void b43_wa_papd(struct b43_wldev *dev)
backup = b43_ofdmtab_read16(dev, B43_OFDMTAB_PWRDYN2, 0); backup = b43_ofdmtab_read16(dev, B43_OFDMTAB_PWRDYN2, 0);
b43_ofdmtab_write16(dev, B43_OFDMTAB_PWRDYN2, 0, 7); b43_ofdmtab_write16(dev, B43_OFDMTAB_PWRDYN2, 0, 7);
b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_APHY, 0, 0); b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_APHY, 0, 0);
b43_dummy_transmission(dev); b43_dummy_transmission(dev, true, true);
b43_ofdmtab_write16(dev, B43_OFDMTAB_PWRDYN2, 0, backup); b43_ofdmtab_write16(dev, B43_OFDMTAB_PWRDYN2, 0, backup);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册