b43: HT-PHY: Move radio preparation into init function
authorRafał Miłecki <zajec5@gmail.com>
Tue, 9 Sep 2014 19:17:06 +0000 (21:17 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 11 Sep 2014 19:27:35 +0000 (15:27 -0400)
Radio should be prepared only before initialization. We need this to be
able to call b43_radio_2059_init conditionally (in the future).
This also documents RF control register a bit.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/b43/phy_ht.c
drivers/net/wireless/b43/phy_ht.h

index c4dc8b020f604ed51d585a790d931ef2b668f350..7b445419036f4cd429e37552010148f512470f20 100644 (file)
@@ -89,6 +89,14 @@ static void b43_radio_2059_channel_setup(struct b43_wldev *dev,
        udelay(300);
 }
 
+static void b43_radio_2059_init_pre(struct b43_wldev *dev)
+{
+       b43_phy_mask(dev, B43_PHY_HT_RF_CTL_CMD, ~B43_PHY_HT_RF_CTL_CMD_CHIP0_PU);
+       b43_phy_set(dev, B43_PHY_HT_RF_CTL_CMD, B43_PHY_HT_RF_CTL_CMD_FORCE);
+       b43_phy_mask(dev, B43_PHY_HT_RF_CTL_CMD, ~B43_PHY_HT_RF_CTL_CMD_FORCE);
+       b43_phy_set(dev, B43_PHY_HT_RF_CTL_CMD, B43_PHY_HT_RF_CTL_CMD_CHIP0_PU);
+}
+
 static void b43_radio_2059_init(struct b43_wldev *dev)
 {
        const u16 routing[] = { R2059_C1, R2059_C2, R2059_C3 };
@@ -97,6 +105,9 @@ static void b43_radio_2059_init(struct b43_wldev *dev)
        };
        u16 i, j;
 
+       /* Prepare (reset?) radio */
+       b43_radio_2059_init_pre(dev);
+
        b43_radio_write(dev, R2059_ALL | 0x51, 0x0070);
        b43_radio_write(dev, R2059_ALL | 0x5a, 0x0003);
 
@@ -1002,19 +1013,10 @@ static void b43_phy_ht_op_software_rfkill(struct b43_wldev *dev,
        if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED)
                b43err(dev->wl, "MAC not suspended\n");
 
-       /* In the following PHY ops we copy wl's dummy behaviour.
-        * TODO: Find out if reads (currently hidden in masks/masksets) are
-        * needed and replace following ops with just writes or w&r.
-        * Note: B43_PHY_HT_RF_CTL1 register is tricky, wrong operation can
-        * cause delayed (!) machine lock up. */
        if (blocked) {
-               b43_phy_mask(dev, B43_PHY_HT_RF_CTL1, 0);
+               b43_phy_mask(dev, B43_PHY_HT_RF_CTL_CMD,
+                            ~B43_PHY_HT_RF_CTL_CMD_CHIP0_PU);
        } else {
-               b43_phy_mask(dev, B43_PHY_HT_RF_CTL1, 0);
-               b43_phy_maskset(dev, B43_PHY_HT_RF_CTL1, 0, 0x1);
-               b43_phy_mask(dev, B43_PHY_HT_RF_CTL1, 0);
-               b43_phy_maskset(dev, B43_PHY_HT_RF_CTL1, 0, 0x2);
-
                if (dev->phy.radio_ver == 0x2059)
                        b43_radio_2059_init(dev);
                else
index 6cae370d10184653440495f03cd69b71822a359f..67b208e2f47e156dcbcfa49a53c2c504ff46e93f 100644 (file)
@@ -81,7 +81,9 @@
 #define B43_PHY_HT_RF_SEQ_STATUS               B43_PHY_EXTG(0x004)
 /* Values for the status are the same as for the trigger */
 
-#define B43_PHY_HT_RF_CTL1                     B43_PHY_EXTG(0x010)
+#define B43_PHY_HT_RF_CTL_CMD                  0x810
+#define  B43_PHY_HT_RF_CTL_CMD_FORCE           0x0001
+#define  B43_PHY_HT_RF_CTL_CMD_CHIP0_PU                0x0002
 
 #define B43_PHY_HT_RF_CTL_INT_C1               B43_PHY_EXTG(0x04c)
 #define B43_PHY_HT_RF_CTL_INT_C2               B43_PHY_EXTG(0x06c)