Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1065de1562b1552a24f83e379bcb5fed351a8bc4
Commit:     1065de1562b1552a24f83e379bcb5fed351a8bc4
Parent:     42a9174f541d2338d35b91869415d9ae9312ca0d
Author:     Larry Finger <[EMAIL PROTECTED]>
AuthorDate: Thu Sep 20 20:10:07 2007 -0500
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:52:25 2007 -0700

    [B43LEGACY]: Change the hardware radio enable logic and cleanup code
    
    This change cleans up the radio-related messages in several ways.
    
    (1) The state of the rfkill switch is assumed to be on, rather than
        tested. Now, any user without such a switch will not see any
        messages. For devices with such a switch, a message will be
        logged only if the initial state is off, or if the switch is toggled.
    (2) The routine for testing the switch state is no longer inline.
    (3) The LED handling routine is simplified.
    (4) The "Radio turned off" message that has confused some users has been
        changed to "Radio initialized".
    
    This patch is patterned after a similar change to b43 by Michael Buesch.
    
    Signed-off-by: Larry Finger <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 drivers/net/wireless/b43legacy/leds.c  |   12 ++++--------
 drivers/net/wireless/b43legacy/main.c  |   25 ++++++++++++++++++++-----
 drivers/net/wireless/b43legacy/main.h  |   20 --------------------
 drivers/net/wireless/b43legacy/radio.c |    2 +-
 4 files changed, 25 insertions(+), 34 deletions(-)

diff --git a/drivers/net/wireless/b43legacy/leds.c 
b/drivers/net/wireless/b43legacy/leds.c
index 498912d..a584ea8 100644
--- a/drivers/net/wireless/b43legacy/leds.c
+++ b/drivers/net/wireless/b43legacy/leds.c
@@ -182,6 +182,7 @@ void b43legacy_leds_update(struct b43legacy_wldev *dev, int 
activity)
        unsigned long interval = 0;
        u16 ledctl;
        unsigned long flags;
+       bool radio_enabled = (phy->radio_on && dev->radio_hw_enable);
 
        spin_lock_irqsave(&dev->wl->leds_lock, flags);
        ledctl = b43legacy_read16(dev, B43legacy_MMIO_GPIO_CONTROL);
@@ -201,20 +202,15 @@ void b43legacy_leds_update(struct b43legacy_wldev *dev, 
int activity)
                        turn_on = activity;
                        break;
                case B43legacy_LED_RADIO_ALL:
-                       turn_on = phy->radio_on &&
-                                 b43legacy_is_hw_radio_enabled(dev);
+                       turn_on = radio_enabled;
                        break;
                case B43legacy_LED_RADIO_A:
                        break;
                case B43legacy_LED_RADIO_B:
-                       turn_on = (phy->radio_on &&
-                                  b43legacy_is_hw_radio_enabled(dev) &&
-                                  (phy->type == B43legacy_PHYTYPE_B ||
-                                   phy->type == B43legacy_PHYTYPE_G));
+                       turn_on = radio_enabled;
                        break;
                case B43legacy_LED_MODE_BG:
-                       if (phy->type == B43legacy_PHYTYPE_G &&
-                           b43legacy_is_hw_radio_enabled(dev))
+                       if (phy->type == B43legacy_PHYTYPE_G && radio_enabled)
                                turn_on = 1;
                        break;
                case B43legacy_LED_TRANSFER:
diff --git a/drivers/net/wireless/b43legacy/main.c 
b/drivers/net/wireless/b43legacy/main.c
index 3e935d0..a793f18 100644
--- a/drivers/net/wireless/b43legacy/main.c
+++ b/drivers/net/wireless/b43legacy/main.c
@@ -2007,6 +2007,21 @@ static void b43legacy_mgmtframe_txantenna(struct 
b43legacy_wldev *dev,
                              B43legacy_SHM_SH_PRPHYCTL, tmp);
 }
 
+/* Returns TRUE, if the radio is enabled in hardware. */
+static bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev)
+{
+       if (dev->phy.rev >= 3) {
+               if (!(b43legacy_read32(dev, B43legacy_MMIO_RADIO_HWENABLED_HI)
+                     & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK))
+                       return 1;
+       } else {
+               if (b43legacy_read16(dev, B43legacy_MMIO_RADIO_HWENABLED_LO)
+                   & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK)
+                       return 1;
+       }
+       return 0;
+}
+
 /* This is the opposite of b43legacy_chip_init() */
 static void b43legacy_chip_exit(struct b43legacy_wldev *dev)
 {
@@ -2046,9 +2061,6 @@ static int b43legacy_chip_init(struct b43legacy_wldev 
*dev)
        if (err)
                goto err_gpio_cleanup;
        b43legacy_radio_turn_on(dev);
-       dev->radio_hw_enable = b43legacy_is_hw_radio_enabled(dev);
-       b43legacyinfo(dev->wl, "Radio %s by hardware\n",
-              (dev->radio_hw_enable == 0) ? "disabled" : "enabled");
 
        b43legacy_write16(dev, 0x03E6, 0x0000);
        err = b43legacy_phy_init(dev);
@@ -2170,14 +2182,14 @@ static void b43legacy_periodic_every15sec(struct 
b43legacy_wldev *dev)
 
 static void b43legacy_periodic_every1sec(struct b43legacy_wldev *dev)
 {
-       int radio_hw_enable;
+       bool radio_hw_enable;
 
        /* check if radio hardware enabled status changed */
        radio_hw_enable = b43legacy_is_hw_radio_enabled(dev);
        if (unlikely(dev->radio_hw_enable != radio_hw_enable)) {
                dev->radio_hw_enable = radio_hw_enable;
                b43legacyinfo(dev->wl, "Radio hardware status changed to %s\n",
-                      (radio_hw_enable == 0) ? "disabled" : "enabled");
+                      (radio_hw_enable) ? "enabled" : "disabled");
                b43legacy_leds_update(dev, 0);
        }
 }
@@ -2933,6 +2945,9 @@ static void setup_struct_phy_for_init(struct 
b43legacy_wldev *dev,
 
        /* Flags */
        phy->locked = 0;
+       /* Assume the radio is enabled. If it's not enabled, the state will
+        * immediately get fixed on the first periodic work run. */
+       dev->radio_hw_enable = 1;
 
        phy->savedpctlreg = 0xFFFF;
        phy->aci_enable = 0;
diff --git a/drivers/net/wireless/b43legacy/main.h 
b/drivers/net/wireless/b43legacy/main.h
index 673935e..68435c5 100644
--- a/drivers/net/wireless/b43legacy/main.h
+++ b/drivers/net/wireless/b43legacy/main.h
@@ -97,26 +97,6 @@ int b43legacy_is_ofdm_rate(int rate)
        return !b43legacy_is_cck_rate(rate);
 }
 
-static inline
-int b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev)
-{
-       /* function to return state of hardware enable of radio
-        * returns 0 if radio disabled, 1 if radio enabled
-        */
-       struct b43legacy_phy *phy = &dev->phy;
-
-       if (phy->rev >= 3)
-               return ((b43legacy_read32(dev,
-                               B43legacy_MMIO_RADIO_HWENABLED_HI)
-                               & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK)
-                               == 0) ? 1 : 0;
-       else
-               return ((b43legacy_read16(dev,
-                               B43legacy_MMIO_RADIO_HWENABLED_LO)
-                               & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK)
-                               == 0) ? 0 : 1;
-}
-
 void b43legacy_tsf_read(struct b43legacy_wldev *dev, u64 *tsf);
 void b43legacy_tsf_write(struct b43legacy_wldev *dev, u64 tsf);
 
diff --git a/drivers/net/wireless/b43legacy/radio.c 
b/drivers/net/wireless/b43legacy/radio.c
index 54067f0..a361dee 100644
--- a/drivers/net/wireless/b43legacy/radio.c
+++ b/drivers/net/wireless/b43legacy/radio.c
@@ -2134,7 +2134,7 @@ void b43legacy_radio_turn_off(struct b43legacy_wldev *dev)
        } else
                b43legacy_phy_write(dev, 0x0015, 0xAA00);
        phy->radio_on = 0;
-       b43legacydbg(dev->wl, "Radio turned off\n");
+       b43legacydbg(dev->wl, "Radio initialized\n");
        b43legacy_leds_update(dev, 0);
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to