aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/b43/b43.h4
-rw-r--r--drivers/net/wireless/b43/main.c52
2 files changed, 19 insertions, 37 deletions
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
index 54376fddfaf9..4113b6934764 100644
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
@@ -915,10 +915,6 @@ struct b43_wl {
915 char rng_name[30 + 1]; 915 char rng_name[30 + 1];
916#endif /* CONFIG_B43_HWRNG */ 916#endif /* CONFIG_B43_HWRNG */
917 917
918 /* List of all wireless devices on this chip */
919 struct list_head devlist;
920 u8 nr_devs;
921
922 bool radiotap_enabled; 918 bool radiotap_enabled;
923 bool radio_enabled; 919 bool radio_enabled;
924 920
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index cf84cf2b6874..07024c69d0b5 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -3735,40 +3735,35 @@ static int b43_switch_band(struct b43_wl *wl, struct ieee80211_channel *chan)
3735{ 3735{
3736 struct b43_wldev *up_dev = NULL; 3736 struct b43_wldev *up_dev = NULL;
3737 struct b43_wldev *down_dev; 3737 struct b43_wldev *down_dev;
3738 struct b43_wldev *d;
3739 int err; 3738 int err;
3740 bool uninitialized_var(gmode); 3739 bool uninitialized_var(gmode);
3741 int prev_status; 3740 int prev_status;
3742 3741
3743 /* Find a device and PHY which supports the band. */ 3742 /* Find a device and PHY which supports the band. */
3744 list_for_each_entry(d, &wl->devlist, list) { 3743 switch (chan->band) {
3745 switch (chan->band) { 3744 case IEEE80211_BAND_5GHZ:
3746 case IEEE80211_BAND_5GHZ: 3745 if (wl->current_dev->phy.supports_5ghz) {
3747 if (d->phy.supports_5ghz) { 3746 up_dev = wl->current_dev;
3748 up_dev = d; 3747 gmode = false;
3749 gmode = false;
3750 }
3751 break;
3752 case IEEE80211_BAND_2GHZ:
3753 if (d->phy.supports_2ghz) {
3754 up_dev = d;
3755 gmode = true;
3756 }
3757 break;
3758 default:
3759 B43_WARN_ON(1);
3760 return -EINVAL;
3761 } 3748 }
3762 if (up_dev) 3749 break;
3763 break; 3750 case IEEE80211_BAND_2GHZ:
3751 if (wl->current_dev->phy.supports_2ghz) {
3752 up_dev = wl->current_dev;
3753 gmode = true;
3754 }
3755 break;
3756 default:
3757 B43_WARN_ON(1);
3758 return -EINVAL;
3764 } 3759 }
3760
3765 if (!up_dev) { 3761 if (!up_dev) {
3766 b43err(wl, "Could not find a device for %s-GHz band operation\n", 3762 b43err(wl, "Could not find a device for %s-GHz band operation\n",
3767 band_to_string(chan->band)); 3763 band_to_string(chan->band));
3768 return -ENODEV; 3764 return -ENODEV;
3769 } 3765 }
3770 if ((up_dev == wl->current_dev) && 3766 if (!!wl->current_dev->phy.gmode == !!gmode) {
3771 (!!wl->current_dev->phy.gmode == !!gmode)) {
3772 /* This device is already running. */ 3767 /* This device is already running. */
3773 return 0; 3768 return 0;
3774 } 3769 }
@@ -5270,7 +5265,6 @@ static void b43_one_core_detach(struct b43_bus_dev *dev)
5270 b43_debugfs_remove_device(wldev); 5265 b43_debugfs_remove_device(wldev);
5271 b43_wireless_core_detach(wldev); 5266 b43_wireless_core_detach(wldev);
5272 list_del(&wldev->list); 5267 list_del(&wldev->list);
5273 wl->nr_devs--;
5274 b43_bus_set_wldev(dev, NULL); 5268 b43_bus_set_wldev(dev, NULL);
5275 kfree(wldev); 5269 kfree(wldev);
5276} 5270}
@@ -5295,8 +5289,6 @@ static int b43_one_core_attach(struct b43_bus_dev *dev, struct b43_wl *wl)
5295 if (err) 5289 if (err)
5296 goto err_kfree_wldev; 5290 goto err_kfree_wldev;
5297 5291
5298 list_add(&wldev->list, &wl->devlist);
5299 wl->nr_devs++;
5300 b43_bus_set_wldev(dev, wldev); 5292 b43_bus_set_wldev(dev, wldev);
5301 b43_debugfs_add_device(wldev); 5293 b43_debugfs_add_device(wldev);
5302 5294
@@ -5386,7 +5378,6 @@ static struct b43_wl *b43_wireless_init(struct b43_bus_dev *dev)
5386 wl->hw = hw; 5378 wl->hw = hw;
5387 mutex_init(&wl->mutex); 5379 mutex_init(&wl->mutex);
5388 spin_lock_init(&wl->hardirq_lock); 5380 spin_lock_init(&wl->hardirq_lock);
5389 INIT_LIST_HEAD(&wl->devlist);
5390 INIT_WORK(&wl->beacon_update_trigger, b43_beacon_update_trigger_work); 5381 INIT_WORK(&wl->beacon_update_trigger, b43_beacon_update_trigger_work);
5391 INIT_WORK(&wl->txpower_adjust_work, b43_phy_txpower_adjust_work); 5382 INIT_WORK(&wl->txpower_adjust_work, b43_phy_txpower_adjust_work);
5392 INIT_WORK(&wl->tx_work, b43_tx_work); 5383 INIT_WORK(&wl->tx_work, b43_tx_work);
@@ -5549,13 +5540,8 @@ static void b43_ssb_remove(struct ssb_device *sdev)
5549 /* Unregister HW RNG driver */ 5540 /* Unregister HW RNG driver */
5550 b43_rng_exit(wl); 5541 b43_rng_exit(wl);
5551 5542
5552 if (list_empty(&wl->devlist)) { 5543 b43_leds_unregister(wl);
5553 b43_leds_unregister(wl); 5544 b43_wireless_exit(dev, wl);
5554 /* Last core on the chip unregistered.
5555 * We can destroy common struct b43_wl.
5556 */
5557 b43_wireless_exit(dev, wl);
5558 }
5559} 5545}
5560 5546
5561static struct ssb_driver b43_ssb_driver = { 5547static struct ssb_driver b43_ssb_driver = {