static void b43_phy_ht_tx_power_ctl_idle_tssi(struct b43_wldev *dev) { struct b43_phy_ht *phy_ht = dev->phy.ht; static const u16 base[] = { 0x840, 0x860, 0x880 }; u16 save_regs[3][3]; s32 rssi_buf[6]; int core; for (core = 0; core < 3; core++) { save_regs[core][1] = b43_phy_read(dev, base[core] + 6); save_regs[core][2] = b43_phy_read(dev, base[core] + 7); save_regs[core][0] = b43_phy_read(dev, base[core] + 0); b43_phy_write(dev, base[core] + 6, 0); b43_phy_mask(dev, base[core] + 7, ~0xF); /* 0xF? Or just 0x6? */ b43_phy_set(dev, base[core] + 0, 0x0400); b43_phy_set(dev, base[core] + 0, 0x1000); } b43_phy_ht_tx_tone(dev); udelay(20); b43_phy_ht_poll_rssi(dev, HT_RSSI_TSSI_2G, rssi_buf, 1); b43_phy_ht_stop_playback(dev); b43_phy_ht_reset_cca(dev); phy_ht->idle_tssi[0] = rssi_buf[0] & 0xff; phy_ht->idle_tssi[1] = rssi_buf[2] & 0xff; phy_ht->idle_tssi[2] = rssi_buf[4] & 0xff; for (core = 0; core < 3; core++) { b43_phy_write(dev, base[core] + 0, save_regs[core][0]); b43_phy_write(dev, base[core] + 6, save_regs[core][1]); b43_phy_write(dev, base[core] + 7, save_regs[core][2]); } }
static void b43_phy_ht_tx_power_ctl_idle_tssi(struct b43_wldev *dev) { struct b43_phy_ht *phy_ht = dev->phy.ht; s32 rssi_buf[6]; /* TODO */ b43_phy_ht_tx_tone(dev); udelay(20); b43_phy_ht_poll_rssi(dev, 4, rssi_buf, 1); b43_phy_ht_stop_playback(dev); b43_phy_ht_reset_cca(dev); phy_ht->idle_tssi[0] = rssi_buf[0] & 0xff; phy_ht->idle_tssi[1] = rssi_buf[2] & 0xff; phy_ht->idle_tssi[2] = rssi_buf[4] & 0xff; /* TODO */ }