diff options
| -rw-r--r-- | drivers/net/wireless/b43/phy_n.c | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c index 0f0c1306b0ad..92bfe352ba08 100644 --- a/drivers/net/wireless/b43/phy_n.c +++ b/drivers/net/wireless/b43/phy_n.c | |||
| @@ -6099,26 +6099,45 @@ static void b43_nphy_channel_setup(struct b43_wldev *dev, | |||
| 6099 | 6099 | ||
| 6100 | if (dev->phy.rev >= 3 && | 6100 | if (dev->phy.rev >= 3 && |
| 6101 | dev->phy.n->spur_avoid != B43_SPUR_AVOID_DISABLE) { | 6101 | dev->phy.n->spur_avoid != B43_SPUR_AVOID_DISABLE) { |
| 6102 | bool avoid = false; | 6102 | u8 spuravoid = 0; |
| 6103 | |||
| 6103 | if (dev->phy.n->spur_avoid == B43_SPUR_AVOID_FORCE) { | 6104 | if (dev->phy.n->spur_avoid == B43_SPUR_AVOID_FORCE) { |
| 6104 | avoid = true; | 6105 | spuravoid = 1; |
| 6105 | } else if (!b43_is_40mhz(dev)) { | 6106 | } else if (phy->rev >= 19) { |
| 6106 | if ((ch >= 5 && ch <= 8) || ch == 13 || ch == 14) | 6107 | /* TODO */ |
| 6107 | avoid = true; | 6108 | } else if (phy->rev >= 18) { |
| 6108 | } else { /* 40MHz */ | 6109 | /* TODO */ |
| 6109 | if (nphy->aband_spurwar_en && | 6110 | } else if (phy->rev >= 17) { |
| 6110 | (ch == 38 || ch == 102 || ch == 118)) | 6111 | /* TODO: Off for channels 1-11, but check 12-14! */ |
| 6111 | avoid = dev->dev->chip_id == 0x4716; | 6112 | } else if (phy->rev >= 16) { |
| 6113 | /* TODO: Off for 2 GHz, but check 5 GHz! */ | ||
| 6114 | } else if (phy->rev >= 7) { | ||
| 6115 | if (!b43_is_40mhz(dev)) { /* 20MHz */ | ||
| 6116 | if (ch == 13 || ch == 14 || ch == 153) | ||
| 6117 | spuravoid = 1; | ||
| 6118 | } else { /* 40 MHz */ | ||
| 6119 | if (ch == 54) | ||
| 6120 | spuravoid = 1; | ||
| 6121 | } | ||
| 6122 | } else { | ||
| 6123 | if (!b43_is_40mhz(dev)) { /* 20MHz */ | ||
| 6124 | if ((ch >= 5 && ch <= 8) || ch == 13 || ch == 14) | ||
| 6125 | spuravoid = 1; | ||
| 6126 | } else { /* 40MHz */ | ||
| 6127 | if (nphy->aband_spurwar_en && | ||
| 6128 | (ch == 38 || ch == 102 || ch == 118)) | ||
| 6129 | spuravoid = dev->dev->chip_id == 0x4716; | ||
| 6130 | } | ||
| 6112 | } | 6131 | } |
| 6113 | 6132 | ||
| 6114 | b43_nphy_pmu_spur_avoid(dev, avoid); | 6133 | b43_nphy_pmu_spur_avoid(dev, spuravoid); |
| 6115 | 6134 | ||
| 6116 | b43_mac_switch_freq(dev, avoid); | 6135 | b43_mac_switch_freq(dev, spuravoid); |
| 6117 | 6136 | ||
| 6118 | if (dev->phy.rev == 3 || dev->phy.rev == 4) | 6137 | if (dev->phy.rev == 3 || dev->phy.rev == 4) |
| 6119 | ; /* TODO: reset PLL */ | 6138 | ; /* TODO: reset PLL */ |
| 6120 | 6139 | ||
| 6121 | if (avoid) | 6140 | if (spuravoid) |
| 6122 | b43_phy_set(dev, B43_NPHY_BBCFG, B43_NPHY_BBCFG_RSTRX); | 6141 | b43_phy_set(dev, B43_NPHY_BBCFG, B43_NPHY_BBCFG_RSTRX); |
| 6123 | else | 6142 | else |
| 6124 | b43_phy_mask(dev, B43_NPHY_BBCFG, | 6143 | b43_phy_mask(dev, B43_NPHY_BBCFG, |
