···163163 b43_register_led(dev, &dev->led_radio, name,164164 b43_rfkill_led_name(dev),165165 led_index, activelow);166166+ /* Sync the RF-kill LED state with the switch state. */167167+ if (dev->radio_hw_enable)168168+ b43_led_turn_on(dev, led_index, activelow);166169 break;167170 case B43_LED_WEIRD:168171 case B43_LED_ASSOC:···235232 b43_unregister_led(&dev->led_tx);236233 b43_unregister_led(&dev->led_rx);237234 b43_unregister_led(&dev->led_assoc);235235+ b43_unregister_led(&dev->led_radio);238236}
+11-11
drivers/net/wireless/b43/main.c
···21632163static void b43_chip_exit(struct b43_wldev *dev)21642164{21652165 b43_radio_turn_off(dev, 1);21662166- b43_leds_exit(dev);21672166 b43_gpio_cleanup(dev);21682167 /* firmware is released later */21692168}···21902191 err = b43_gpio_init(dev);21912192 if (err)21922193 goto out; /* firmware is released later */21932193- b43_leds_init(dev);2194219421952195 err = b43_upload_initvals(dev);21962196 if (err)21972197- goto err_leds_exit;21972197+ goto err_gpio_clean;21982198 b43_radio_turn_on(dev);2199219922002200 b43_write16(dev, 0x03E6, 0x0000);···2269227122702272err_radio_off:22712273 b43_radio_turn_off(dev, 1);22722272-err_leds_exit:22732273- b43_leds_exit(dev);22742274+err_gpio_clean:22742275 b43_gpio_cleanup(dev);22752276 return err;22762277}···32703273 return;32713274 b43_set_status(dev, B43_STAT_UNINIT);3272327532733273- mutex_unlock(&dev->wl->mutex);32743274- b43_rfkill_exit(dev);32753275- mutex_lock(&dev->wl->mutex);32763276-32763276+ b43_leds_exit(dev);32773277 b43_rng_exit(dev->wl);32783278 b43_pio_free(dev);32793279 b43_dma_free(dev);···33993405 memset(wl->mac_addr, 0, ETH_ALEN);34003406 b43_upload_card_macaddress(dev);34013407 b43_security_init(dev);34023402- b43_rfkill_init(dev);34033408 b43_rng_init(wl);3404340934053410 b43_set_status(dev, B43_STAT_INITIALIZED);3406341134073407- out:34123412+ b43_leds_init(dev);34133413+out:34083414 return err;3409341534103416 err_chip_exit:···34933499 int did_init = 0;34943500 int err = 0;3495350135023502+ /* First register RFkill.35033503+ * LEDs that are registered later depend on it. */35043504+ b43_rfkill_init(dev);35053505+34963506 mutex_lock(&wl->mutex);3497350734983508 if (b43_status(dev) < B43_STAT_INITIALIZED) {···35253527{35263528 struct b43_wl *wl = hw_to_b43_wl(hw);35273529 struct b43_wldev *dev = wl->current_dev;35303530+35313531+ b43_rfkill_exit(dev);3528353235293533 mutex_lock(&wl->mutex);35303534 if (b43_status(dev) >= B43_STAT_STARTED)
+32-5
drivers/net/wireless/b43/rfkill.c
···2525#include "rfkill.h"2626#include "b43.h"27272828+#include <linux/kmod.h>2929+28302931/* Returns TRUE, if the radio is enabled in hardware. */3032static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)···5250 bool report_change = 0;53515452 mutex_lock(&wl->mutex);5555- B43_WARN_ON(b43_status(dev) < B43_STAT_INITIALIZED);5353+ if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) {5454+ mutex_unlock(&wl->mutex);5555+ return;5656+ }5657 enabled = b43_is_hw_radio_enabled(dev);5758 if (unlikely(enabled != dev->radio_hw_enable)) {5859 dev->radio_hw_enable = enabled;···6560 }6661 mutex_unlock(&wl->mutex);67626868- if (unlikely(report_change))6969- input_report_key(poll_dev->input, KEY_WLAN, enabled);6363+ /* send the radio switch event to the system - note both a key press6464+ * and a release are required */6565+ if (unlikely(report_change)) {6666+ input_report_key(poll_dev->input, KEY_WLAN, 1);6767+ input_report_key(poll_dev->input, KEY_WLAN, 0);6868+ }7069}71707271/* Called when the RFKILL toggled in software. */···7869{7970 struct b43_wldev *dev = data;8071 struct b43_wl *wl = dev->wl;8181- int err = 0;7272+ int err = -EBUSY;82738374 if (!wl->rfkill.registered)8475 return 0;85768677 mutex_lock(&wl->mutex);8787- B43_WARN_ON(b43_status(dev) < B43_STAT_INITIALIZED);7878+ if (b43_status(dev) < B43_STAT_INITIALIZED)7979+ goto out_unlock;8080+ err = 0;8881 switch (state) {8982 case RFKILL_STATE_ON:9083 if (!dev->radio_hw_enable) {···144133 rfk->poll_dev->poll = b43_rfkill_poll;145134 rfk->poll_dev->poll_interval = 1000; /* msecs */146135136136+ rfk->poll_dev->input->name = rfk->name;137137+ rfk->poll_dev->input->id.bustype = BUS_HOST;138138+ rfk->poll_dev->input->id.vendor = dev->dev->bus->boardinfo.vendor;139139+ rfk->poll_dev->input->evbit[0] = BIT(EV_KEY);140140+ set_bit(KEY_WLAN, rfk->poll_dev->input->keybit);141141+147142 err = rfkill_register(rfk->rfkill);148143 if (err)149144 goto err_free_polldev;145145+146146+#ifdef CONFIG_RFKILL_INPUT_MODULE147147+ /* B43 RF-kill isn't useful without the rfkill-input subsystem.148148+ * Try to load the module. */149149+ err = request_module("rfkill-input");150150+ if (err)151151+ b43warn(wl, "Failed to load the rfkill-input module. "152152+ "The built-in radio LED will not work.\n");153153+#endif /* CONFIG_RFKILL_INPUT */154154+150155 err = input_register_polled_device(rfk->poll_dev);151156 if (err)152157 goto err_unreg_rfk;
+1-1
drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c
···219219 ssize_t buf_size;220220 ssize_t res;221221 unsigned long flags;222222- u64 tsf;222222+ unsigned long long tsf;223223224224 buf_size = min(count, sizeof (really_big_buffer) - 1);225225 down(&big_buffer_sem);
···47434743 * when we loaded driver, and is now set to "enable".47444744 * After we're Alive, RF_KILL gets handled by47454745 * iwl_rx_card_state_notif() */47464746- if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))47464746+ if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {47474747+ clear_bit(STATUS_RF_KILL_HW, &priv->status);47474748 queue_work(priv->workqueue, &priv->restart);47494749+ }4748475047494751 handled |= CSR_INT_BIT_RF_KILL;47504752 }···61736171 mutex_lock(&priv->mutex);6174617261756173 if (rc) {61746174+ iwl_rate_control_unregister(priv->hw);61766175 IWL_ERROR("Failed to register network "61776176 "device (error %d)\n", rc);61786177 return;
+4-1
drivers/net/wireless/iwlwifi/iwl4965-base.c
···50595059 * when we loaded driver, and is now set to "enable".50605060 * After we're Alive, RF_KILL gets handled by50615061 * iwl_rx_card_state_notif() */50625062- if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))50625062+ if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {50635063+ clear_bit(STATUS_RF_KILL_HW, &priv->status);50635064 queue_work(priv->workqueue, &priv->restart);50655065+ }5064506650655067 handled |= CSR_INT_BIT_RF_KILL;50665068 }···65296527 mutex_lock(&priv->mutex);6530652865316529 if (rc) {65306530+ iwl_rate_control_unregister(priv->hw);65326531 IWL_ERROR("Failed to register network "65336532 "device (error %d)\n", rc);65346533 return;