Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: N-PHY: add placeholders for new devices support

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
303415e2 12db5481

+231 -54
+231 -54
drivers/net/wireless/b43/phy_n.c
··· 140 140 b43_phy_write(dev, B43_NPHY_RFSEQMODE, seq_mode); 141 141 } 142 142 143 + static void b43_nphy_rf_ctl_override_rev19(struct b43_wldev *dev, u16 field, 144 + u16 value, u8 core, bool off, 145 + u8 override_id) 146 + { 147 + /* TODO */ 148 + } 149 + 143 150 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RFCtrlOverrideRev7 */ 144 151 static void b43_nphy_rf_ctl_override_rev7(struct b43_wldev *dev, u16 field, 145 152 u16 value, u8 core, bool off, 146 153 u8 override) 147 154 { 155 + struct b43_phy *phy = &dev->phy; 148 156 const struct nphy_rf_control_override_rev7 *e; 149 157 u16 en_addrs[3][2] = { 150 158 { 0x0E7, 0x0EC }, { 0x342, 0x343 }, { 0x346, 0x347 } ··· 161 153 u16 en_mask = field; 162 154 u16 val_addr; 163 155 u8 i; 156 + 157 + if (phy->rev >= 19 || phy->rev < 3) { 158 + B43_WARN_ON(1); 159 + return; 160 + } 164 161 165 162 /* Remember: we can get NULL! */ 166 163 e = b43_nphy_get_rf_ctl_over_rev7(dev, field, override); ··· 276 263 { 277 264 u16 reg, tmp, tmp2, val; 278 265 int core; 266 + 267 + /* TODO: What about rev19+? Revs 3+ and 7+ are a bit similar */ 279 268 280 269 for (core = 0; core < 2; core++) { 281 270 if ((core_sel == 1 && core != 0) || ··· 1401 1386 u16 wait, bool iqmode, bool dac_test, 1402 1387 bool modify_bbmult) 1403 1388 { 1389 + struct b43_phy *phy = &dev->phy; 1404 1390 struct b43_phy_n *nphy = dev->phy.n; 1405 1391 int i; 1406 1392 u16 seq_mode; 1407 1393 u32 tmp; 1408 1394 1409 1395 b43_nphy_stay_in_carrier_search(dev, true); 1396 + 1397 + if (phy->rev >= 7) { 1398 + /* TODO */ 1399 + } 1410 1400 1411 1401 if ((nphy->bb_mult_save & 0x80000000) == 0) { 1412 1402 tmp = b43_ntab_read(dev, B43_NTAB16(15, 87)); ··· 1540 1520 } 1541 1521 } 1542 1522 1523 + static void b43_nphy_rssi_select_rev19(struct b43_wldev *dev, u8 code, 1524 + enum n_rssi_type rssi_type) 1525 + { 1526 + /* TODO */ 1527 + } 1528 + 1543 1529 static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, 1544 1530 enum n_rssi_type rssi_type) 1545 1531 { ··· 1615 1589 enum ieee80211_band band = 1616 1590 b43_current_band(dev->wl); 1617 1591 1618 - if (b43_nphy_ipa(dev)) 1619 - val = (band == IEEE80211_BAND_5GHZ) ? 0xC : 0xE; 1620 - else 1621 - val = 0x11; 1622 - reg = (i == 0) ? 0x2000 : 0x3000; 1623 - reg |= B2055_PADDRV; 1624 - b43_radio_write(dev, reg, val); 1592 + if (dev->phy.rev < 7) { 1593 + if (b43_nphy_ipa(dev)) 1594 + val = (band == IEEE80211_BAND_5GHZ) ? 0xC : 0xE; 1595 + else 1596 + val = 0x11; 1597 + reg = (i == 0) ? B2056_TX0 : B2056_TX1; 1598 + reg |= B2056_TX_TX_SSI_MUX; 1599 + b43_radio_write(dev, reg, val); 1600 + } 1625 1601 1626 1602 reg = (i == 0) ? 1627 1603 B43_NPHY_AFECTL_OVER1 : ··· 1710 1682 static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, 1711 1683 enum n_rssi_type type) 1712 1684 { 1713 - if (dev->phy.rev >= 3) 1685 + if (dev->phy.rev >= 19) 1686 + b43_nphy_rssi_select_rev19(dev, code, type); 1687 + else if (dev->phy.rev >= 3) 1714 1688 b43_nphy_rev3_rssi_select(dev, code, type); 1715 1689 else 1716 1690 b43_nphy_rev2_rssi_select(dev, code, type); ··· 1755 1725 int out; 1756 1726 u16 save_regs_phy[9]; 1757 1727 u16 s[2]; 1728 + 1729 + /* TODO: rev7+ is treated like rev3+, what about rev19+? */ 1758 1730 1759 1731 if (dev->phy.rev >= 3) { 1760 1732 save_regs_phy[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1); ··· 2241 2209 */ 2242 2210 static void b43_nphy_rssi_cal(struct b43_wldev *dev) 2243 2211 { 2244 - if (dev->phy.rev >= 3) { 2212 + if (dev->phy.rev >= 19) { 2213 + /* TODO */ 2214 + } else if (dev->phy.rev >= 3) { 2245 2215 b43_nphy_rev3_rssi_cal(dev); 2246 2216 } else { 2247 2217 b43_nphy_rev2_rssi_cal(dev, N_RSSI_NB); ··· 2256 2222 * Workarounds 2257 2223 **************************************************/ 2258 2224 2259 - static void b43_nphy_gain_ctl_workarounds_rev3plus(struct b43_wldev *dev) 2225 + static void b43_nphy_gain_ctl_workarounds_rev19(struct b43_wldev *dev) 2226 + { 2227 + /* TODO */ 2228 + } 2229 + 2230 + static void b43_nphy_gain_ctl_workarounds_rev7(struct b43_wldev *dev) 2231 + { 2232 + struct b43_phy *phy = &dev->phy; 2233 + 2234 + switch (phy->rev) { 2235 + /* TODO */ 2236 + } 2237 + } 2238 + 2239 + static void b43_nphy_gain_ctl_workarounds_rev3(struct b43_wldev *dev) 2260 2240 { 2261 2241 struct ssb_sprom *sprom = dev->dev->bus_sprom; 2262 2242 ··· 2467 2419 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/WorkaroundsGainCtrl */ 2468 2420 static void b43_nphy_gain_ctl_workarounds(struct b43_wldev *dev) 2469 2421 { 2470 - if (dev->phy.rev >= 7) 2471 - ; /* TODO */ 2422 + if (dev->phy.rev >= 19) 2423 + b43_nphy_gain_ctl_workarounds_rev19(dev); 2424 + else if (dev->phy.rev >= 7) 2425 + b43_nphy_gain_ctl_workarounds_rev7(dev); 2472 2426 else if (dev->phy.rev >= 3) 2473 - b43_nphy_gain_ctl_workarounds_rev3plus(dev); 2427 + b43_nphy_gain_ctl_workarounds_rev3(dev); 2474 2428 else 2475 2429 b43_nphy_gain_ctl_workarounds_rev1_2(dev); 2476 2430 } ··· 3109 3059 b43_phy_set(dev, B43_NPHY_IQFLIP, 3110 3060 B43_NPHY_IQFLIP_ADC1 | B43_NPHY_IQFLIP_ADC2); 3111 3061 3062 + /* TODO: rev19+ */ 3112 3063 if (dev->phy.rev >= 7) 3113 3064 b43_nphy_workarounds_rev7plus(dev); 3114 3065 else if (dev->phy.rev >= 3) ··· 3191 3140 nphy->bb_mult_save = 0; 3192 3141 } 3193 3142 3143 + if (dev->phy.rev >= 7) { 3144 + /* TODO */ 3145 + } 3146 + 3194 3147 if (nphy->hang_avoid) 3195 3148 b43_nphy_stay_in_carrier_search(dev, 0); 3196 3149 } ··· 3204 3149 struct nphy_txgains target, 3205 3150 struct nphy_iqcal_params *params) 3206 3151 { 3152 + struct b43_phy *phy = &dev->phy; 3207 3153 int i, j, indx; 3208 3154 u16 gain; 3209 3155 ··· 3213 3157 params->pga = target.pga[core]; 3214 3158 params->pad = target.pad[core]; 3215 3159 params->ipa = target.ipa[core]; 3216 - params->cal_gain = (params->txgm << 12) | (params->pga << 8) | 3217 - (params->pad << 4) | (params->ipa); 3160 + if (phy->rev >= 19) { 3161 + /* TODO */ 3162 + } else if (phy->rev >= 7) { 3163 + /* TODO */ 3164 + } else { 3165 + params->cal_gain = (params->txgm << 12) | (params->pga << 8) | (params->pad << 4) | (params->ipa); 3166 + } 3218 3167 for (j = 0; j < 5; j++) 3219 3168 params->ncorr[j] = 0x79; 3220 3169 } else { ··· 3260 3199 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxPwrCtrlEnable */ 3261 3200 static void b43_nphy_tx_power_ctrl(struct b43_wldev *dev, bool enable) 3262 3201 { 3202 + struct b43_phy *phy = &dev->phy; 3263 3203 struct b43_phy_n *nphy = dev->phy.n; 3264 3204 u8 i; 3265 3205 u16 bmask, val, tmp; ··· 3330 3268 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, ~(bmask), val); 3331 3269 3332 3270 if (band == IEEE80211_BAND_5GHZ) { 3333 - b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, 3334 - ~B43_NPHY_TXPCTL_CMD_INIT, 0x64); 3335 - if (dev->phy.rev > 1) 3336 - b43_phy_maskset(dev, B43_NPHY_TXPCTL_INIT, 3337 - ~B43_NPHY_TXPCTL_INIT_PIDXI1, 3271 + if (phy->rev >= 19) { 3272 + /* TODO */ 3273 + } else if (phy->rev >= 7) { 3274 + /* TODO */ 3275 + } else { 3276 + b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, 3277 + ~B43_NPHY_TXPCTL_CMD_INIT, 3338 3278 0x64); 3279 + if (phy->rev > 1) 3280 + b43_phy_maskset(dev, 3281 + B43_NPHY_TXPCTL_INIT, 3282 + ~B43_NPHY_TXPCTL_INIT_PIDXI1, 3283 + 0x64); 3284 + } 3339 3285 } 3340 3286 3341 3287 if (dev->phy.rev >= 3) { ··· 3358 3288 B43_NPHY_TXPCTL_INIT, 3359 3289 ~0xff, nphy->tx_pwr_idx[1]); 3360 3290 } 3291 + } 3292 + 3293 + if (phy->rev >= 7) { 3294 + /* TODO */ 3361 3295 } 3362 3296 3363 3297 if (dev->phy.rev >= 3) { ··· 3405 3331 if (nphy->hang_avoid) 3406 3332 b43_nphy_stay_in_carrier_search(dev, 1); 3407 3333 3334 + /* TODO: rev19+ */ 3408 3335 if (dev->phy.rev >= 7) { 3409 3336 txpi[0] = txpi[1] = 30; 3410 3337 } else if (dev->phy.rev >= 3) { ··· 3508 3433 u8 core; 3509 3434 u16 r; /* routing */ 3510 3435 3511 - if (phy->rev >= 7) { 3436 + if (phy->rev >= 19) { 3437 + /* TODO */ 3438 + } else if (phy->rev >= 7) { 3512 3439 for (core = 0; core < 2; core++) { 3513 3440 r = core ? 0x190 : 0x170; 3514 3441 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { ··· 3598 3521 if (b43_nphy_ipa(dev)) 3599 3522 b43_nphy_ipa_internal_tssi_setup(dev); 3600 3523 3601 - if (phy->rev >= 7) 3524 + if (phy->rev >= 19) 3525 + b43_nphy_rf_ctl_override_rev19(dev, 0x2000, 0, 3, false, 0); 3526 + else if (phy->rev >= 7) 3602 3527 b43_nphy_rf_ctl_override_rev7(dev, 0x2000, 0, 3, false, 0); 3603 3528 else if (phy->rev >= 3) 3604 3529 b43_nphy_rf_ctl_override(dev, 0x2000, 0, 3, false); ··· 3610 3531 udelay(20); 3611 3532 tmp = b43_nphy_poll_rssi(dev, N_RSSI_TSSI_2G, rssi, 1); 3612 3533 b43_nphy_stop_playback(dev); 3534 + 3613 3535 b43_nphy_rssi_select(dev, 0, N_RSSI_W1); 3614 3536 3615 - if (phy->rev >= 7) 3537 + if (phy->rev >= 19) 3538 + b43_nphy_rf_ctl_override_rev19(dev, 0x2000, 0, 3, true, 0); 3539 + else if (phy->rev >= 7) 3616 3540 b43_nphy_rf_ctl_override_rev7(dev, 0x2000, 0, 3, true, 0); 3617 3541 else if (phy->rev >= 3) 3618 3542 b43_nphy_rf_ctl_override(dev, 0x2000, 0, 3, true); 3619 3543 3620 - if (phy->rev >= 3) { 3544 + if (phy->rev >= 19) { 3545 + /* TODO */ 3546 + return; 3547 + } else if (phy->rev >= 3) { 3621 3548 nphy->pwr_ctl_info[0].idle_tssi_5g = (tmp >> 24) & 0xFF; 3622 3549 nphy->pwr_ctl_info[1].idle_tssi_5g = (tmp >> 8) & 0xFF; 3623 3550 } else { ··· 3815 3730 udelay(1); 3816 3731 } 3817 3732 3818 - if (dev->phy.rev >= 7) { 3733 + if (phy->rev >= 19) { 3734 + /* TODO */ 3735 + } else if (phy->rev >= 7) { 3819 3736 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, 3820 3737 ~B43_NPHY_TXPCTL_CMD_INIT, 0x19); 3821 3738 b43_phy_maskset(dev, B43_NPHY_TXPCTL_INIT, ··· 3880 3793 b43_ntab_write_bulk(dev, B43_NTAB32(26, 192), 128, table); 3881 3794 b43_ntab_write_bulk(dev, B43_NTAB32(27, 192), 128, table); 3882 3795 3883 - if (phy->rev >= 3) { 3796 + if (phy->rev < 3) 3797 + return; 3798 + 3884 3799 #if 0 3885 - nphy->gmval = (table[0] >> 16) & 0x7000; 3800 + nphy->gmval = (table[0] >> 16) & 0x7000; 3886 3801 #endif 3887 3802 3888 - for (i = 0; i < 128; i++) { 3803 + for (i = 0; i < 128; i++) { 3804 + if (phy->rev >= 19) { 3805 + /* TODO */ 3806 + return; 3807 + } else if (phy->rev >= 7) { 3808 + /* TODO */ 3809 + return; 3810 + } else { 3889 3811 pga_gain = (table[i] >> 24) & 0xF; 3890 3812 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) 3891 - rfpwr_offset = 3892 - b43_ntab_papd_pga_gain_delta_ipa_2g[pga_gain]; 3813 + rfpwr_offset = b43_ntab_papd_pga_gain_delta_ipa_2g[pga_gain]; 3893 3814 else 3894 - rfpwr_offset = 3895 - 0; /* FIXME */ 3896 - b43_ntab_write(dev, B43_NTAB32(26, 576 + i), 3897 - rfpwr_offset); 3898 - b43_ntab_write(dev, B43_NTAB32(27, 576 + i), 3899 - rfpwr_offset); 3815 + rfpwr_offset = 0; /* FIXME */ 3900 3816 } 3817 + 3818 + b43_ntab_write(dev, B43_NTAB32(26, 576 + i), rfpwr_offset); 3819 + b43_ntab_write(dev, B43_NTAB32(27, 576 + i), rfpwr_offset); 3901 3820 } 3902 3821 } 3903 3822 ··· 3920 3827 nphy->rfctrl_intc2_save = b43_phy_read(dev, 3921 3828 B43_NPHY_RFCTL_INTC2); 3922 3829 band = b43_current_band(dev->wl); 3923 - if (dev->phy.rev >= 3) { 3830 + if (dev->phy.rev >= 7) { 3831 + /* TODO */ 3832 + return; 3833 + } else if (dev->phy.rev >= 3) { 3924 3834 if (band == IEEE80211_BAND_5GHZ) 3925 3835 tmp = 0x600; 3926 3836 else ··· 4370 4274 rssical_phy_regs = nphy->rssical_cache.rssical_phy_regs_5G; 4371 4275 } 4372 4276 4373 - if (dev->phy.rev >= 7) { 4277 + if (dev->phy.rev >= 19) { 4278 + /* TODO */ 4279 + } else if (dev->phy.rev >= 7) { 4280 + /* TODO */ 4374 4281 } else { 4375 4282 b43_radio_maskset(dev, B2056_RX0 | B2056_RX_RSSI_MISC, 0xE3, 4376 4283 rssical_radio_regs[0]); ··· 4397 4298 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_Y, rssical_phy_regs[11]); 4398 4299 } 4399 4300 4301 + static void b43_nphy_tx_cal_radio_setup_rev19(struct b43_wldev *dev) 4302 + { 4303 + /* TODO */ 4304 + } 4305 + 4306 + static void b43_nphy_tx_cal_radio_setup_rev7(struct b43_wldev *dev) 4307 + { 4308 + /* TODO */ 4309 + } 4310 + 4400 4311 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxCalRadioSetup */ 4401 4312 static void b43_nphy_tx_cal_radio_setup(struct b43_wldev *dev) 4402 4313 { 4314 + struct b43_phy *phy = &dev->phy; 4403 4315 struct b43_phy_n *nphy = dev->phy.n; 4404 4316 u16 *save = nphy->tx_rx_cal_radio_saveregs; 4405 4317 u16 tmp; 4406 4318 u8 offset, i; 4407 4319 4408 - if (dev->phy.rev >= 3) { 4320 + if (phy->rev >= 19) { 4321 + b43_nphy_tx_cal_radio_setup_rev19(dev); 4322 + } else if (phy->rev >= 7) { 4323 + b43_nphy_tx_cal_radio_setup_rev7(dev); 4324 + } else if (phy->rev >= 3) { 4409 4325 for (i = 0; i < 2; i++) { 4410 4326 tmp = (i == 0) ? 0x2000 : 0x3000; 4411 4327 offset = i * 11; ··· 4661 4547 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxCalPhySetup */ 4662 4548 static void b43_nphy_tx_cal_phy_setup(struct b43_wldev *dev) 4663 4549 { 4550 + struct b43_phy *phy = &dev->phy; 4664 4551 u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs; 4665 4552 u16 tmp; 4666 4553 ··· 4701 4586 regs[10] = b43_phy_read(dev, B43_NPHY_PAPD_EN1); 4702 4587 b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x0001); 4703 4588 b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x0001); 4589 + 4590 + if (phy->rev >= 19) 4591 + ; /* TODO */ 4592 + else if (phy->rev >= 7) 4593 + ; /* TODO */ 4594 + 4595 + if (0 /* FIXME */) { 4596 + if (phy->rev >= 19) { 4597 + /* TODO */ 4598 + } else if (phy->rev >= 8) { 4599 + /* TODO */ 4600 + } else if (phy->rev == 7) { 4601 + /* TODO */ 4602 + } 4603 + } 4704 4604 } else { 4705 4605 b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, 0xA000); 4706 4606 b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, 0xA000); ··· 4744 4614 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/SaveCal */ 4745 4615 static void b43_nphy_save_cal(struct b43_wldev *dev) 4746 4616 { 4617 + struct b43_phy *phy = &dev->phy; 4747 4618 struct b43_phy_n *nphy = dev->phy.n; 4748 4619 4749 4620 struct b43_phy_n_iq_comp *rxcal_coeffs = NULL; ··· 4769 4638 4770 4639 b43_nphy_rx_iq_coeffs(dev, false, rxcal_coeffs); 4771 4640 /* TODO use some definitions */ 4772 - if (dev->phy.rev >= 3) { 4641 + if (phy->rev >= 19) { 4642 + /* TODO */ 4643 + } else if (phy->rev >= 7) { 4644 + /* TODO */ 4645 + } else if (phy->rev >= 3) { 4773 4646 txcal_radio_regs[0] = b43_radio_read(dev, 0x2021); 4774 4647 txcal_radio_regs[1] = b43_radio_read(dev, 0x2022); 4775 4648 txcal_radio_regs[2] = b43_radio_read(dev, 0x3021); ··· 4800 4665 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RestoreCal */ 4801 4666 static void b43_nphy_restore_cal(struct b43_wldev *dev) 4802 4667 { 4668 + struct b43_phy *phy = &dev->phy; 4803 4669 struct b43_phy_n *nphy = dev->phy.n; 4804 4670 4805 4671 u16 coef[4]; ··· 4848 4712 } 4849 4713 4850 4714 /* TODO use some definitions */ 4851 - if (dev->phy.rev >= 3) { 4715 + if (phy->rev >= 19) { 4716 + /* TODO */ 4717 + } else if (phy->rev >= 7) { 4718 + /* TODO */ 4719 + } else if (phy->rev >= 3) { 4852 4720 b43_radio_write(dev, 0x2021, txcal_radio_regs[0]); 4853 4721 b43_radio_write(dev, 0x2022, txcal_radio_regs[1]); 4854 4722 b43_radio_write(dev, 0x3021, txcal_radio_regs[2]); ··· 4929 4789 } 4930 4790 } 4931 4791 4932 - b43_phy_write(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x8AA9); 4792 + if (phy->rev >= 19) { 4793 + /* TODO */ 4794 + } else if (phy->rev >= 7) { 4795 + /* TODO */ 4796 + } else { 4797 + b43_phy_write(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x8AA9); 4798 + } 4933 4799 4934 4800 if (!b43_is_40mhz(dev)) 4935 4801 freq = 2500; ··· 5329 5183 static int b43_nphy_cal_rx_iq(struct b43_wldev *dev, 5330 5184 struct nphy_txgains target, u8 type, bool debug) 5331 5185 { 5186 + if (dev->phy.rev >= 7) 5187 + type = 0; 5188 + 5332 5189 if (dev->phy.rev >= 3) 5333 5190 return b43_nphy_rev3_cal_rx_iq(dev, target, type, debug); 5334 5191 else ··· 5418 5269 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/SuperSwitchInit */ 5419 5270 static void b43_nphy_superswitch_init(struct b43_wldev *dev, bool init) 5420 5271 { 5272 + if (dev->phy.rev >= 7) 5273 + return; 5274 + 5421 5275 if (dev->phy.rev >= 3) { 5422 5276 if (!init) 5423 5277 return; ··· 5505 5353 if (dev->phy.rev >= 3) { 5506 5354 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S1, 0); 5507 5355 b43_phy_write(dev, B43_NPHY_RFCTL_OVER, 0); 5356 + if (phy->rev >= 7) { 5357 + /* TODO */ 5358 + } 5359 + if (phy->rev >= 19) { 5360 + /* TODO */ 5361 + } 5362 + 5508 5363 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S0, 0); 5509 5364 b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S1, 0); 5510 5365 } else { ··· 5549 5390 b43_phy_write(dev, B43_NPHY_PLOAD_CSENSE_EXTLEN, 0x50); 5550 5391 b43_phy_write(dev, B43_NPHY_TXRIFS_FRDEL, 0x30); 5551 5392 5552 - b43_nphy_update_mimo_config(dev, nphy->preamble_override); 5393 + if (phy->rev < 8) 5394 + b43_nphy_update_mimo_config(dev, nphy->preamble_override); 5395 + 5553 5396 b43_nphy_update_txrx_chain(dev); 5554 5397 5555 5398 if (phy->rev < 2) { ··· 5583 5422 5584 5423 b43_mac_phy_clock_set(dev, true); 5585 5424 5586 - b43_nphy_pa_override(dev, false); 5587 - b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX); 5588 - b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); 5589 - b43_nphy_pa_override(dev, true); 5425 + if (phy->rev < 7) { 5426 + b43_nphy_pa_override(dev, false); 5427 + b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX); 5428 + b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); 5429 + b43_nphy_pa_override(dev, true); 5430 + } 5590 5431 5591 5432 b43_nphy_classifier(dev, 0, 0); 5592 5433 b43_nphy_read_clip_detection(dev, clip); ··· 5807 5644 5808 5645 u8 tmp; 5809 5646 5810 - if (phy->rev >= 7) { 5647 + if (phy->rev >= 19) { 5648 + return -ESRCH; 5649 + /* TODO */ 5650 + } else if (phy->rev >= 7) { 5811 5651 r2057_get_chantabent_rev7(dev, channel->center_freq, 5812 5652 &tabent_r7, &tabent_r7_2g); 5813 5653 if (!tabent_r7 && !tabent_r7_2g) ··· 5847 5681 b43_phy_mask(dev, 0x310, (u16)~0x8000); 5848 5682 } 5849 5683 5850 - if (phy->rev >= 7) { 5684 + if (phy->rev >= 19) { 5685 + /* TODO */ 5686 + } else if (phy->rev >= 7) { 5851 5687 const struct b43_phy_n_sfo_cfg *phy_regs = tabent_r7 ? 5852 5688 &(tabent_r7->phy_regs) : &(tabent_r7_2g->phy_regs); 5853 5689 ··· 6026 5858 static void b43_nphy_op_software_rfkill(struct b43_wldev *dev, 6027 5859 bool blocked) 6028 5860 { 5861 + struct b43_phy *phy = &dev->phy; 5862 + 6029 5863 if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED) 6030 5864 b43err(dev->wl, "MAC not suspended\n"); 6031 5865 6032 5866 if (blocked) { 6033 5867 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, 6034 5868 ~B43_NPHY_RFCTL_CMD_CHIP0PU); 6035 - if (dev->phy.rev >= 7) { 5869 + if (phy->rev >= 19) { 6036 5870 /* TODO */ 6037 - } else if (dev->phy.rev >= 3) { 5871 + } else if (phy->rev >= 7) { 5872 + /* TODO */ 5873 + } else if (phy->rev >= 3) { 6038 5874 b43_radio_mask(dev, 0x09, ~0x2); 6039 5875 6040 5876 b43_radio_write(dev, 0x204D, 0); ··· 6056 5884 b43_radio_write(dev, 0x3064, 0); 6057 5885 } 6058 5886 } else { 6059 - if (dev->phy.rev >= 7) { 5887 + if (phy->rev >= 19) { 5888 + /* TODO */ 5889 + } else if (phy->rev >= 7) { 6060 5890 if (!dev->phy.radio_on) 6061 5891 b43_radio_2057_init(dev); 6062 5892 b43_switch_channel(dev, dev->phy.channel); 6063 - } else if (dev->phy.rev >= 3) { 5893 + } else if (phy->rev >= 3) { 6064 5894 if (!dev->phy.radio_on) 6065 5895 b43_radio_init2056(dev); 6066 5896 b43_switch_channel(dev, dev->phy.channel); ··· 6075 5901 /* http://bcm-v4.sipsolutions.net/802.11/PHY/Anacore */ 6076 5902 static void b43_nphy_op_switch_analog(struct b43_wldev *dev, bool on) 6077 5903 { 5904 + struct b43_phy *phy = &dev->phy; 6078 5905 u16 override = on ? 0x0 : 0x7FFF; 6079 5906 u16 core = on ? 0xD : 0x00FD; 6080 5907 6081 - if (dev->phy.rev >= 3) { 5908 + if (phy->rev >= 19) { 5909 + /* TODO */ 5910 + } else if (phy->rev >= 3) { 6082 5911 if (on) { 6083 5912 b43_phy_write(dev, B43_NPHY_AFECTL_C1, core); 6084 5913 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, override);