aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/b43/phy_n.c43
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,