diff options
-rw-r--r-- | drivers/net/wireless/b43/b43.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/b43/main.c | 52 |
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 | ||
5561 | static struct ssb_driver b43_ssb_driver = { | 5547 | static struct ssb_driver b43_ssb_driver = { |