Implementation the functions enable and disable stay carrier search
Signed-off-by: Li YanBo <[email protected]>
---
drivers/net/wireless/b43/phy_n.c | 63 +++++++++++++++++++++++++++++--------
1 files changed, 49 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index c1d9a5c..6dfa5c0 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -82,6 +82,55 @@ static void b43_chantab_phy_upload(struct b43_wldev *dev,
b43_phy_write(dev, B43_NPHY_BW6, e->phy_bw6);
}
+static void b43_nphy_reset_cca(struct b43_wldev *dev)
+{
+ u16 bbcfg;
+
+ ssb_write32(dev->dev, SSB_TMSLOW,
+ ssb_read32(dev->dev, SSB_TMSLOW) | SSB_TMSLOW_FGC);
+ bbcfg = b43_phy_read(dev, B43_NPHY_BBCFG);
+ b43_phy_set(dev, B43_NPHY_BBCFG, B43_NPHY_BBCFG_RSTCCA);
+ b43_phy_write(dev, B43_NPHY_BBCFG,
+ bbcfg & ~B43_NPHY_BBCFG_RSTCCA);
+ ssb_write32(dev->dev, SSB_TMSLOW,
+ ssb_read32(dev->dev, SSB_TMSLOW) & ~SSB_TMSLOW_FGC);
+}
+
+static void b43_nphy_stay_carrier_search_enable(struct b43_wldev *dev)
+{
+ struct b43_phy_n *nphy = dev->phy.n;
+
+ B43_WARN_ON(nphy->deaf_cnt < 0);
+
+ if (nphy->deaf_cnt == 0) {
+ if (dev->dev->id.revision == 16)
+ b43_mac_suspend(dev);
+ nphy->cctl = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1);
+ b43_phy_mask(dev, B43_NPHY_CLASSCTL, ~0x7);
+ if (dev->dev->id.revision == 16)
+ b43_mac_enable(dev);
+ nphy->clip1_dtc = b43_phy_read(dev, B43_NPHY_CLIP1GAIN_SLEN);
+ nphy->clip2_dtc = b43_phy_read(dev, B43_NPHY_CLIP2GAIN_SLEN);
+ b43_phy_write(dev, B43_NPHY_CLIP1GAIN_SLEN, 0xffff);
+ b43_phy_write(dev, B43_NPHY_CLIP2GAIN_SLEN, 0xffff);
+ }
+ nphy->deaf_cnt++;
+ b43_nphy_reset_cca(dev);
+}
+
+static void b43_nphy_stay_carrier_search_disable(struct b43_wldev *dev)
+{
+ struct b43_phy_n *nphy = dev->phy.n;
+
+ nphy->deaf_cnt--;
+ B43_WARN_ON(nphy->deaf_cnt < 0);
+ if (nphy->deaf_cnt == 0) {
+ b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, nphy->cctl);
+ b43_phy_write(dev, B43_NPHY_CLIP1GAIN_SLEN, nphy->clip1_dtc);
+ b43_phy_write(dev, B43_NPHY_CLIP2GAIN_SLEN, nphy->clip1_dtc);
+ }
+}
+
enum b43_nphy_txpid {
B43_N_5G_MEDIUM_FREQ = 0,
B43_N_5G_LOW_FREQ,
@@ -548,20 +597,6 @@ static void b43_nphy_workarounds(struct b43_wldev *dev)
b43_nphy_stay_carrier_search_disable(dev);
}
-static void b43_nphy_reset_cca(struct b43_wldev *dev)
-{
- u16 bbcfg;
-
- ssb_write32(dev->dev, SSB_TMSLOW,
- ssb_read32(dev->dev, SSB_TMSLOW) | SSB_TMSLOW_FGC);
- bbcfg = b43_phy_read(dev, B43_NPHY_BBCFG);
- b43_phy_set(dev, B43_NPHY_BBCFG, B43_NPHY_BBCFG_RSTCCA);
- b43_phy_write(dev, B43_NPHY_BBCFG,
- bbcfg & ~B43_NPHY_BBCFG_RSTCCA);
- ssb_write32(dev->dev, SSB_TMSLOW,
- ssb_read32(dev->dev, SSB_TMSLOW) & ~SSB_TMSLOW_FGC);
-}
-
enum b43_nphy_rf_sequence {
B43_RFSEQ_RX2TX,
B43_RFSEQ_TX2RX,
--
1.5.6.3
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev