diff options
-rw-r--r-- | drivers/net/wireless/b43legacy/leds.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/b43legacy/main.h | 20 | ||||
-rw-r--r-- | 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 498912ddeddb..a584ea810502 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) | |||
182 | unsigned long interval = 0; | 182 | unsigned long interval = 0; |
183 | u16 ledctl; | 183 | u16 ledctl; |
184 | unsigned long flags; | 184 | unsigned long flags; |
185 | bool radio_enabled = (phy->radio_on && dev->radio_hw_enable); | ||
185 | 186 | ||
186 | spin_lock_irqsave(&dev->wl->leds_lock, flags); | 187 | spin_lock_irqsave(&dev->wl->leds_lock, flags); |
187 | ledctl = b43legacy_read16(dev, B43legacy_MMIO_GPIO_CONTROL); | 188 | ledctl = b43legacy_read16(dev, B43legacy_MMIO_GPIO_CONTROL); |
@@ -201,20 +202,15 @@ void b43legacy_leds_update(struct b43legacy_wldev *dev, int activity) | |||
201 | turn_on = activity; | 202 | turn_on = activity; |
202 | break; | 203 | break; |
203 | case B43legacy_LED_RADIO_ALL: | 204 | case B43legacy_LED_RADIO_ALL: |
204 | turn_on = phy->radio_on && | 205 | turn_on = radio_enabled; |
205 | b43legacy_is_hw_radio_enabled(dev); | ||
206 | break; | 206 | break; |
207 | case B43legacy_LED_RADIO_A: | 207 | case B43legacy_LED_RADIO_A: |
208 | break; | 208 | break; |
209 | case B43legacy_LED_RADIO_B: | 209 | case B43legacy_LED_RADIO_B: |
210 | turn_on = (phy->radio_on && | 210 | turn_on = radio_enabled; |
211 | b43legacy_is_hw_radio_enabled(dev) && | ||
212 | (phy->type == B43legacy_PHYTYPE_B || | ||
213 | phy->type == B43legacy_PHYTYPE_G)); | ||
214 | break; | 211 | break; |
215 | case B43legacy_LED_MODE_BG: | 212 | case B43legacy_LED_MODE_BG: |
216 | if (phy->type == B43legacy_PHYTYPE_G && | 213 | if (phy->type == B43legacy_PHYTYPE_G && radio_enabled) |
217 | b43legacy_is_hw_radio_enabled(dev)) | ||
218 | turn_on = 1; | 214 | turn_on = 1; |
219 | break; | 215 | break; |
220 | case B43legacy_LED_TRANSFER: | 216 | case B43legacy_LED_TRANSFER: |
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. */ | ||
2011 | static 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() */ |
2011 | static void b43legacy_chip_exit(struct b43legacy_wldev *dev) | 2026 | static 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 | ||
2171 | static void b43legacy_periodic_every1sec(struct b43legacy_wldev *dev) | 2183 | static 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; |
diff --git a/drivers/net/wireless/b43legacy/main.h b/drivers/net/wireless/b43legacy/main.h index 673935e67e64..68435c50d8e0 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) | |||
97 | return !b43legacy_is_cck_rate(rate); | 97 | return !b43legacy_is_cck_rate(rate); |
98 | } | 98 | } |
99 | 99 | ||
100 | static inline | ||
101 | int b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev) | ||
102 | { | ||
103 | /* function to return state of hardware enable of radio | ||
104 | * returns 0 if radio disabled, 1 if radio enabled | ||
105 | */ | ||
106 | struct b43legacy_phy *phy = &dev->phy; | ||
107 | |||
108 | if (phy->rev >= 3) | ||
109 | return ((b43legacy_read32(dev, | ||
110 | B43legacy_MMIO_RADIO_HWENABLED_HI) | ||
111 | & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK) | ||
112 | == 0) ? 1 : 0; | ||
113 | else | ||
114 | return ((b43legacy_read16(dev, | ||
115 | B43legacy_MMIO_RADIO_HWENABLED_LO) | ||
116 | & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK) | ||
117 | == 0) ? 0 : 1; | ||
118 | } | ||
119 | |||
120 | void b43legacy_tsf_read(struct b43legacy_wldev *dev, u64 *tsf); | 100 | void b43legacy_tsf_read(struct b43legacy_wldev *dev, u64 *tsf); |
121 | void b43legacy_tsf_write(struct b43legacy_wldev *dev, u64 tsf); | 101 | void b43legacy_tsf_write(struct b43legacy_wldev *dev, u64 tsf); |
122 | 102 | ||
diff --git a/drivers/net/wireless/b43legacy/radio.c b/drivers/net/wireless/b43legacy/radio.c index 54067f082825..a361dee664af 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) | |||
2134 | } else | 2134 | } else |
2135 | b43legacy_phy_write(dev, 0x0015, 0xAA00); | 2135 | b43legacy_phy_write(dev, 0x0015, 0xAA00); |
2136 | phy->radio_on = 0; | 2136 | phy->radio_on = 0; |
2137 | b43legacydbg(dev->wl, "Radio turned off\n"); | 2137 | b43legacydbg(dev->wl, "Radio initialized\n"); |
2138 | b43legacy_leds_update(dev, 0); | 2138 | b43legacy_leds_update(dev, 0); |
2139 | } | 2139 | } |
2140 | 2140 | ||