b43: HT-PHY: switch radio to requested channel
Switching channel happens after specific SHM write to B43_SHM_SH_CHAN. This is the way we found it in BCM4331 MMIO dumps. By comparing with N-PHY code we noticed there is routing used for SYN and TX/RX. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
39ca554c96
commit
a6b7da5d2c
2 changed files with 68 additions and 1 deletions
|
@ -30,6 +30,45 @@
|
|||
static void b43_radio_2059_channel_setup(struct b43_wldev *dev,
|
||||
const struct b43_phy_ht_channeltab_e_radio2059 *e)
|
||||
{
|
||||
u8 i;
|
||||
u16 routing;
|
||||
|
||||
b43_radio_write(dev, 0x16, e->radio_syn16);
|
||||
b43_radio_write(dev, 0x17, e->radio_syn17);
|
||||
b43_radio_write(dev, 0x22, e->radio_syn22);
|
||||
b43_radio_write(dev, 0x25, e->radio_syn25);
|
||||
b43_radio_write(dev, 0x27, e->radio_syn27);
|
||||
b43_radio_write(dev, 0x28, e->radio_syn28);
|
||||
b43_radio_write(dev, 0x29, e->radio_syn29);
|
||||
b43_radio_write(dev, 0x2c, e->radio_syn2c);
|
||||
b43_radio_write(dev, 0x2d, e->radio_syn2d);
|
||||
b43_radio_write(dev, 0x37, e->radio_syn37);
|
||||
b43_radio_write(dev, 0x41, e->radio_syn41);
|
||||
b43_radio_write(dev, 0x43, e->radio_syn43);
|
||||
b43_radio_write(dev, 0x47, e->radio_syn47);
|
||||
b43_radio_write(dev, 0x4a, e->radio_syn4a);
|
||||
b43_radio_write(dev, 0x58, e->radio_syn58);
|
||||
b43_radio_write(dev, 0x5a, e->radio_syn5a);
|
||||
b43_radio_write(dev, 0x6a, e->radio_syn6a);
|
||||
b43_radio_write(dev, 0x6d, e->radio_syn6d);
|
||||
b43_radio_write(dev, 0x6e, e->radio_syn6e);
|
||||
b43_radio_write(dev, 0x92, e->radio_syn92);
|
||||
b43_radio_write(dev, 0x98, e->radio_syn98);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
routing = i ? 0x800 : 0x400;
|
||||
b43_radio_write(dev, routing | 0x4a, e->radio_rxtx4a);
|
||||
b43_radio_write(dev, routing | 0x58, e->radio_rxtx58);
|
||||
b43_radio_write(dev, routing | 0x5a, e->radio_rxtx5a);
|
||||
b43_radio_write(dev, routing | 0x6a, e->radio_rxtx6a);
|
||||
b43_radio_write(dev, routing | 0x6d, e->radio_rxtx6d);
|
||||
b43_radio_write(dev, routing | 0x6e, e->radio_rxtx6e);
|
||||
b43_radio_write(dev, routing | 0x92, e->radio_rxtx92);
|
||||
b43_radio_write(dev, routing | 0x98, e->radio_rxtx98);
|
||||
}
|
||||
|
||||
udelay(50);
|
||||
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,35 @@ struct b43_phy_ht_channeltab_e_radio2059 {
|
|||
/* The channel frequency in MHz */
|
||||
u16 freq;
|
||||
/* Values for radio registers */
|
||||
/* TODO */
|
||||
u8 radio_syn16;
|
||||
u8 radio_syn17;
|
||||
u8 radio_syn22;
|
||||
u8 radio_syn25;
|
||||
u8 radio_syn27;
|
||||
u8 radio_syn28;
|
||||
u8 radio_syn29;
|
||||
u8 radio_syn2c;
|
||||
u8 radio_syn2d;
|
||||
u8 radio_syn37;
|
||||
u8 radio_syn41;
|
||||
u8 radio_syn43;
|
||||
u8 radio_syn47;
|
||||
u8 radio_syn4a;
|
||||
u8 radio_syn58;
|
||||
u8 radio_syn5a;
|
||||
u8 radio_syn6a;
|
||||
u8 radio_syn6d;
|
||||
u8 radio_syn6e;
|
||||
u8 radio_syn92;
|
||||
u8 radio_syn98;
|
||||
u8 radio_rxtx4a;
|
||||
u8 radio_rxtx58;
|
||||
u8 radio_rxtx5a;
|
||||
u8 radio_rxtx6a;
|
||||
u8 radio_rxtx6d;
|
||||
u8 radio_rxtx6e;
|
||||
u8 radio_rxtx92;
|
||||
u8 radio_rxtx98;
|
||||
/* Values for PHY registers */
|
||||
struct b43_phy_ht_channeltab_e_phy phy_regs;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue