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

Reply via email to