diff options
Diffstat (limited to 'drivers/net/wireless/b43/phy_common.c')
-rw-r--r-- | drivers/net/wireless/b43/phy_common.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43/phy_common.c b/drivers/net/wireless/b43/phy_common.c index af37abccccb3..026b61c03fb9 100644 --- a/drivers/net/wireless/b43/phy_common.c +++ b/drivers/net/wireless/b43/phy_common.c | |||
@@ -178,13 +178,27 @@ void b43_phy_unlock(struct b43_wldev *dev) | |||
178 | b43_power_saving_ctl_bits(dev, 0); | 178 | b43_power_saving_ctl_bits(dev, 0); |
179 | } | 179 | } |
180 | 180 | ||
181 | static inline void assert_mac_suspended(struct b43_wldev *dev) | ||
182 | { | ||
183 | if (!B43_DEBUG) | ||
184 | return; | ||
185 | if ((b43_status(dev) >= B43_STAT_INITIALIZED) && | ||
186 | (dev->mac_suspended <= 0)) { | ||
187 | b43dbg(dev->wl, "PHY/RADIO register access with " | ||
188 | "enabled MAC.\n"); | ||
189 | dump_stack(); | ||
190 | } | ||
191 | } | ||
192 | |||
181 | u16 b43_radio_read(struct b43_wldev *dev, u16 reg) | 193 | u16 b43_radio_read(struct b43_wldev *dev, u16 reg) |
182 | { | 194 | { |
195 | assert_mac_suspended(dev); | ||
183 | return dev->phy.ops->radio_read(dev, reg); | 196 | return dev->phy.ops->radio_read(dev, reg); |
184 | } | 197 | } |
185 | 198 | ||
186 | void b43_radio_write(struct b43_wldev *dev, u16 reg, u16 value) | 199 | void b43_radio_write(struct b43_wldev *dev, u16 reg, u16 value) |
187 | { | 200 | { |
201 | assert_mac_suspended(dev); | ||
188 | dev->phy.ops->radio_write(dev, reg, value); | 202 | dev->phy.ops->radio_write(dev, reg, value); |
189 | } | 203 | } |
190 | 204 | ||
@@ -208,11 +222,13 @@ void b43_radio_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set) | |||
208 | 222 | ||
209 | u16 b43_phy_read(struct b43_wldev *dev, u16 reg) | 223 | u16 b43_phy_read(struct b43_wldev *dev, u16 reg) |
210 | { | 224 | { |
225 | assert_mac_suspended(dev); | ||
211 | return dev->phy.ops->phy_read(dev, reg); | 226 | return dev->phy.ops->phy_read(dev, reg); |
212 | } | 227 | } |
213 | 228 | ||
214 | void b43_phy_write(struct b43_wldev *dev, u16 reg, u16 value) | 229 | void b43_phy_write(struct b43_wldev *dev, u16 reg, u16 value) |
215 | { | 230 | { |
231 | assert_mac_suspended(dev); | ||
216 | dev->phy.ops->phy_write(dev, reg, value); | 232 | dev->phy.ops->phy_write(dev, reg, value); |
217 | } | 233 | } |
218 | 234 | ||
@@ -280,8 +296,10 @@ void b43_software_rfkill(struct b43_wldev *dev, enum rfkill_state state) | |||
280 | state = RFKILL_STATE_SOFT_BLOCKED; | 296 | state = RFKILL_STATE_SOFT_BLOCKED; |
281 | } | 297 | } |
282 | 298 | ||
299 | b43_mac_suspend(dev); | ||
283 | phy->ops->software_rfkill(dev, state); | 300 | phy->ops->software_rfkill(dev, state); |
284 | phy->radio_on = (state == RFKILL_STATE_UNBLOCKED); | 301 | phy->radio_on = (state == RFKILL_STATE_UNBLOCKED); |
302 | b43_mac_enable(dev); | ||
285 | } | 303 | } |
286 | 304 | ||
287 | /** | 305 | /** |