aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43legacy/main.c
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2007-09-20 21:10:07 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:25 -0400
commit1065de1562b1552a24f83e379bcb5fed351a8bc4 (patch)
tree742e644b0f4fee21b63b27deda2a95818c6e0ae4 /drivers/net/wireless/b43legacy/main.c
parent42a9174f541d2338d35b91869415d9ae9312ca0d (diff)
[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 <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless/b43legacy/main.c')
-rw-r--r--drivers/net/wireless/b43legacy/main.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
index 3e935d0d4b80..a793f183a2c0 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,
2007 B43legacy_SHM_SH_PRPHYCTL, tmp); 2007 B43legacy_SHM_SH_PRPHYCTL, tmp);
2008} 2008}
2009 2009
2010/* Returns TRUE, if the radio is enabled in hardware. */
2011static bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev)
2012{
2013 if (dev->phy.rev >= 3) {
2014 if (!(b43legacy_read32(dev, B43legacy_MMIO_RADIO_HWENABLED_HI)
2015 & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK))
2016 return 1;
2017 } else {
2018 if (b43legacy_read16(dev, B43legacy_MMIO_RADIO_HWENABLED_LO)
2019 & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK)
2020 return 1;
2021 }
2022 return 0;
2023}
2024
2010/* This is the opposite of b43legacy_chip_init() */ 2025/* This is the opposite of b43legacy_chip_init() */
2011static void b43legacy_chip_exit(struct b43legacy_wldev *dev) 2026static void b43legacy_chip_exit(struct b43legacy_wldev *dev)
2012{ 2027{
@@ -2046,9 +2061,6 @@ static int b43legacy_chip_init(struct b43legacy_wldev *dev)
2046 if (err) 2061 if (err)
2047 goto err_gpio_cleanup; 2062 goto err_gpio_cleanup;
2048 b43legacy_radio_turn_on(dev); 2063 b43legacy_radio_turn_on(dev);
2049 dev->radio_hw_enable = b43legacy_is_hw_radio_enabled(dev);
2050 b43legacyinfo(dev->wl, "Radio %s by hardware\n",
2051 (dev->radio_hw_enable == 0) ? "disabled" : "enabled");
2052 2064
2053 b43legacy_write16(dev, 0x03E6, 0x0000); 2065 b43legacy_write16(dev, 0x03E6, 0x0000);
2054 err = b43legacy_phy_init(dev); 2066 err = b43legacy_phy_init(dev);
@@ -2170,14 +2182,14 @@ static void b43legacy_periodic_every15sec(struct b43legacy_wldev *dev)
2170 2182
2171static void b43legacy_periodic_every1sec(struct b43legacy_wldev *dev) 2183static void b43legacy_periodic_every1sec(struct b43legacy_wldev *dev)
2172{ 2184{
2173 int radio_hw_enable; 2185 bool radio_hw_enable;
2174 2186
2175 /* check if radio hardware enabled status changed */ 2187 /* check if radio hardware enabled status changed */
2176 radio_hw_enable = b43legacy_is_hw_radio_enabled(dev); 2188 radio_hw_enable = b43legacy_is_hw_radio_enabled(dev);
2177 if (unlikely(dev->radio_hw_enable != radio_hw_enable)) { 2189 if (unlikely(dev->radio_hw_enable != radio_hw_enable)) {
2178 dev->radio_hw_enable = radio_hw_enable; 2190 dev->radio_hw_enable = radio_hw_enable;
2179 b43legacyinfo(dev->wl, "Radio hardware status changed to %s\n", 2191 b43legacyinfo(dev->wl, "Radio hardware status changed to %s\n",
2180 (radio_hw_enable == 0) ? "disabled" : "enabled"); 2192 (radio_hw_enable) ? "enabled" : "disabled");
2181 b43legacy_leds_update(dev, 0); 2193 b43legacy_leds_update(dev, 0);
2182 } 2194 }
2183} 2195}
@@ -2933,6 +2945,9 @@ static void setup_struct_phy_for_init(struct b43legacy_wldev *dev,
2933 2945
2934 /* Flags */ 2946 /* Flags */
2935 phy->locked = 0; 2947 phy->locked = 0;
2948 /* Assume the radio is enabled. If it's not enabled, the state will
2949 * immediately get fixed on the first periodic work run. */
2950 dev->radio_hw_enable = 1;
2936 2951
2937 phy->savedpctlreg = 0xFFFF; 2952 phy->savedpctlreg = 0xFFFF;
2938 phy->aci_enable = 0; 2953 phy->aci_enable = 0;