···163 b43_register_led(dev, &dev->led_radio, name,164 b43_rfkill_led_name(dev),165 led_index, activelow);000166 break;167 case B43_LED_WEIRD:168 case B43_LED_ASSOC:···235 b43_unregister_led(&dev->led_tx);236 b43_unregister_led(&dev->led_rx);237 b43_unregister_led(&dev->led_assoc);0238}
···163 b43_register_led(dev, &dev->led_radio, name,164 b43_rfkill_led_name(dev),165 led_index, activelow);166+ /* Sync the RF-kill LED state with the switch state. */167+ if (dev->radio_hw_enable)168+ b43_led_turn_on(dev, led_index, activelow);169 break;170 case B43_LED_WEIRD:171 case B43_LED_ASSOC:···232 b43_unregister_led(&dev->led_tx);233 b43_unregister_led(&dev->led_rx);234 b43_unregister_led(&dev->led_assoc);235+ b43_unregister_led(&dev->led_radio);236}
+11-11
drivers/net/wireless/b43/main.c
···2163static void b43_chip_exit(struct b43_wldev *dev)2164{2165 b43_radio_turn_off(dev, 1);2166- b43_leds_exit(dev);2167 b43_gpio_cleanup(dev);2168 /* firmware is released later */2169}···2190 err = b43_gpio_init(dev);2191 if (err)2192 goto out; /* firmware is released later */2193- b43_leds_init(dev);21942195 err = b43_upload_initvals(dev);2196 if (err)2197- goto err_leds_exit;2198 b43_radio_turn_on(dev);21992200 b43_write16(dev, 0x03E6, 0x0000);···22692270err_radio_off:2271 b43_radio_turn_off(dev, 1);2272-err_leds_exit:2273- b43_leds_exit(dev);2274 b43_gpio_cleanup(dev);2275 return err;2276}···3270 return;3271 b43_set_status(dev, B43_STAT_UNINIT);32723273- mutex_unlock(&dev->wl->mutex);3274- b43_rfkill_exit(dev);3275- mutex_lock(&dev->wl->mutex);3276-3277 b43_rng_exit(dev->wl);3278 b43_pio_free(dev);3279 b43_dma_free(dev);···3399 memset(wl->mac_addr, 0, ETH_ALEN);3400 b43_upload_card_macaddress(dev);3401 b43_security_init(dev);3402- b43_rfkill_init(dev);3403 b43_rng_init(wl);34043405 b43_set_status(dev, B43_STAT_INITIALIZED);34063407- out:03408 return err;34093410 err_chip_exit:···3493 int did_init = 0;3494 int err = 0;349500003496 mutex_lock(&wl->mutex);34973498 if (b43_status(dev) < B43_STAT_INITIALIZED) {···3525{3526 struct b43_wl *wl = hw_to_b43_wl(hw);3527 struct b43_wldev *dev = wl->current_dev;0035283529 mutex_lock(&wl->mutex);3530 if (b43_status(dev) >= B43_STAT_STARTED)
···2163static void b43_chip_exit(struct b43_wldev *dev)2164{2165 b43_radio_turn_off(dev, 1);02166 b43_gpio_cleanup(dev);2167 /* firmware is released later */2168}···2191 err = b43_gpio_init(dev);2192 if (err)2193 goto out; /* firmware is released later */021942195 err = b43_upload_initvals(dev);2196 if (err)2197+ goto err_gpio_clean;2198 b43_radio_turn_on(dev);21992200 b43_write16(dev, 0x03E6, 0x0000);···22712272err_radio_off:2273 b43_radio_turn_off(dev, 1);2274+err_gpio_clean:02275 b43_gpio_cleanup(dev);2276 return err;2277}···3273 return;3274 b43_set_status(dev, B43_STAT_UNINIT);32753276+ b43_leds_exit(dev);0003277 b43_rng_exit(dev->wl);3278 b43_pio_free(dev);3279 b43_dma_free(dev);···3405 memset(wl->mac_addr, 0, ETH_ALEN);3406 b43_upload_card_macaddress(dev);3407 b43_security_init(dev);03408 b43_rng_init(wl);34093410 b43_set_status(dev, B43_STAT_INITIALIZED);34113412+ b43_leds_init(dev);3413+out:3414 return err;34153416 err_chip_exit:···3499 int did_init = 0;3500 int err = 0;35013502+ /* First register RFkill.3503+ * LEDs that are registered later depend on it. */3504+ b43_rfkill_init(dev);3505+3506 mutex_lock(&wl->mutex);35073508 if (b43_status(dev) < B43_STAT_INITIALIZED) {···3527{3528 struct b43_wl *wl = hw_to_b43_wl(hw);3529 struct b43_wldev *dev = wl->current_dev;3530+3531+ b43_rfkill_exit(dev);35323533 mutex_lock(&wl->mutex);3534 if (b43_status(dev) >= B43_STAT_STARTED)
+32-5
drivers/net/wireless/b43/rfkill.c
···25#include "rfkill.h"26#include "b43.h"27002829/* Returns TRUE, if the radio is enabled in hardware. */30static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)···52 bool report_change = 0;5354 mutex_lock(&wl->mutex);55- B43_WARN_ON(b43_status(dev) < B43_STAT_INITIALIZED);00056 enabled = b43_is_hw_radio_enabled(dev);57 if (unlikely(enabled != dev->radio_hw_enable)) {58 dev->radio_hw_enable = enabled;···65 }66 mutex_unlock(&wl->mutex);6768- if (unlikely(report_change))69- input_report_key(poll_dev->input, KEY_WLAN, enabled);000070}7172/* Called when the RFKILL toggled in software. */···78{79 struct b43_wldev *dev = data;80 struct b43_wl *wl = dev->wl;81- int err = 0;8283 if (!wl->rfkill.registered)84 return 0;8586 mutex_lock(&wl->mutex);87- B43_WARN_ON(b43_status(dev) < B43_STAT_INITIALIZED);0088 switch (state) {89 case RFKILL_STATE_ON:90 if (!dev->radio_hw_enable) {···144 rfk->poll_dev->poll = b43_rfkill_poll;145 rfk->poll_dev->poll_interval = 1000; /* msecs */146000000147 err = rfkill_register(rfk->rfkill);148 if (err)149 goto err_free_polldev;0000000000150 err = input_register_polled_device(rfk->poll_dev);151 if (err)152 goto err_unreg_rfk;
···25#include "rfkill.h"26#include "b43.h"2728+#include <linux/kmod.h>29+3031/* Returns TRUE, if the radio is enabled in hardware. */32static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)···50 bool report_change = 0;5152 mutex_lock(&wl->mutex);53+ if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) {54+ mutex_unlock(&wl->mutex);55+ return;56+ }57 enabled = b43_is_hw_radio_enabled(dev);58 if (unlikely(enabled != dev->radio_hw_enable)) {59 dev->radio_hw_enable = enabled;···60 }61 mutex_unlock(&wl->mutex);6263+ /* send the radio switch event to the system - note both a key press64+ * and a release are required */65+ if (unlikely(report_change)) {66+ input_report_key(poll_dev->input, KEY_WLAN, 1);67+ input_report_key(poll_dev->input, KEY_WLAN, 0);68+ }69}7071/* Called when the RFKILL toggled in software. */···69{70 struct b43_wldev *dev = data;71 struct b43_wl *wl = dev->wl;72+ int err = -EBUSY;7374 if (!wl->rfkill.registered)75 return 0;7677 mutex_lock(&wl->mutex);78+ if (b43_status(dev) < B43_STAT_INITIALIZED)79+ goto out_unlock;80+ err = 0;81 switch (state) {82 case RFKILL_STATE_ON:83 if (!dev->radio_hw_enable) {···133 rfk->poll_dev->poll = b43_rfkill_poll;134 rfk->poll_dev->poll_interval = 1000; /* msecs */135136+ rfk->poll_dev->input->name = rfk->name;137+ rfk->poll_dev->input->id.bustype = BUS_HOST;138+ rfk->poll_dev->input->id.vendor = dev->dev->bus->boardinfo.vendor;139+ rfk->poll_dev->input->evbit[0] = BIT(EV_KEY);140+ set_bit(KEY_WLAN, rfk->poll_dev->input->keybit);141+142 err = rfkill_register(rfk->rfkill);143 if (err)144 goto err_free_polldev;145+146+#ifdef CONFIG_RFKILL_INPUT_MODULE147+ /* B43 RF-kill isn't useful without the rfkill-input subsystem.148+ * Try to load the module. */149+ err = request_module("rfkill-input");150+ if (err)151+ b43warn(wl, "Failed to load the rfkill-input module. "152+ "The built-in radio LED will not work.\n");153+#endif /* CONFIG_RFKILL_INPUT */154+155 err = input_register_polled_device(rfk->poll_dev);156 if (err)157 goto err_unreg_rfk;
···219 ssize_t buf_size;220 ssize_t res;221 unsigned long flags;222+ unsigned long long tsf;223224 buf_size = min(count, sizeof (really_big_buffer) - 1);225 down(&big_buffer_sem);
+4-3
drivers/net/wireless/ipw2200.c
···10751 mutex_unlock(&priv->mutex);10752}1075310754-static int ipw_setup_deferred_work(struct ipw_priv *priv)10755{10756 int ret = 0;10757···11600#endif116011160211603-static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)011604{11605 int err = 0;11606 struct net_device *net_dev;···11768 return err;11769}1177011771-static void ipw_pci_remove(struct pci_dev *pdev)11772{11773 struct ipw_priv *priv = pci_get_drvdata(pdev);11774 struct list_head *p, *q;
···10751 mutex_unlock(&priv->mutex);10752}1075310754+static int __devinit ipw_setup_deferred_work(struct ipw_priv *priv)10755{10756 int ret = 0;10757···11600#endif116011160211603+static int __devinit ipw_pci_probe(struct pci_dev *pdev,11604+ const struct pci_device_id *ent)11605{11606 int err = 0;11607 struct net_device *net_dev;···11767 return err;11768}1176911770+static void __devexit ipw_pci_remove(struct pci_dev *pdev)11771{11772 struct ipw_priv *priv = pci_get_drvdata(pdev);11773 struct list_head *p, *q;
+4-1
drivers/net/wireless/iwlwifi/iwl3945-base.c
···4743 * when we loaded driver, and is now set to "enable".4744 * After we're Alive, RF_KILL gets handled by4745 * iwl_rx_card_state_notif() */4746- if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))04747 queue_work(priv->workqueue, &priv->restart);047484749 handled |= CSR_INT_BIT_RF_KILL;4750 }···6173 mutex_lock(&priv->mutex);61746175 if (rc) {06176 IWL_ERROR("Failed to register network "6177 "device (error %d)\n", rc);6178 return;
···4743 * when we loaded driver, and is now set to "enable".4744 * After we're Alive, RF_KILL gets handled by4745 * iwl_rx_card_state_notif() */4746+ if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {4747+ clear_bit(STATUS_RF_KILL_HW, &priv->status);4748 queue_work(priv->workqueue, &priv->restart);4749+ }47504751 handled |= CSR_INT_BIT_RF_KILL;4752 }···6171 mutex_lock(&priv->mutex);61726173 if (rc) {6174+ iwl_rate_control_unregister(priv->hw);6175 IWL_ERROR("Failed to register network "6176 "device (error %d)\n", rc);6177 return;
+4-1
drivers/net/wireless/iwlwifi/iwl4965-base.c
···5059 * when we loaded driver, and is now set to "enable".5060 * After we're Alive, RF_KILL gets handled by5061 * iwl_rx_card_state_notif() */5062- if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))05063 queue_work(priv->workqueue, &priv->restart);050645065 handled |= CSR_INT_BIT_RF_KILL;5066 }···6529 mutex_lock(&priv->mutex);65306531 if (rc) {06532 IWL_ERROR("Failed to register network "6533 "device (error %d)\n", rc);6534 return;
···5059 * when we loaded driver, and is now set to "enable".5060 * After we're Alive, RF_KILL gets handled by5061 * iwl_rx_card_state_notif() */5062+ if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {5063+ clear_bit(STATUS_RF_KILL_HW, &priv->status);5064 queue_work(priv->workqueue, &priv->restart);5065+ }50665067 handled |= CSR_INT_BIT_RF_KILL;5068 }···6527 mutex_lock(&priv->mutex);65286529 if (rc) {6530+ iwl_rate_control_unregister(priv->hw);6531 IWL_ERROR("Failed to register network "6532 "device (error %d)\n", rc);6533 return;