View | Details | Raw Unified | Return to bug 9414
Collapse All | Expand All

(-)linux-2.6/drivers/net/wireless/b43/rfkill.c (-2 / +19 lines)
Lines 60-67 static void b43_rfkill_poll(struct input Link Here
60
	}
60
	}
61
	mutex_unlock(&wl->mutex);
61
	mutex_unlock(&wl->mutex);
62
62
63
	if (unlikely(report_change))
63
	/* send the radio switch event to the system - note both a key press
64
		input_report_key(poll_dev->input, KEY_WLAN, enabled);
64
	 * 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
	}
65
}
69
}
66
70
67
/* Called when the RFKILL toggled in software. */
71
/* Called when the RFKILL toggled in software. */
Lines 133-141 void b43_rfkill_init(struct b43_wldev *d Link Here
133
	rfk->poll_dev->poll = b43_rfkill_poll;
137
	rfk->poll_dev->poll = b43_rfkill_poll;
134
	rfk->poll_dev->poll_interval = 1000; /* msecs */
138
	rfk->poll_dev->poll_interval = 1000; /* msecs */
135
139
140
	rfk->poll_dev->input->name = rfk->name;
141
	rfk->poll_dev->input->id.bustype = BUS_HOST;
142
	rfk->poll_dev->input->id.vendor = dev->dev->bus->boardinfo.vendor;
143
	rfk->poll_dev->input->evbit[0] = BIT(EV_KEY);
144
	set_bit(KEY_WLAN, rfk->poll_dev->input->keybit);
145
136
	err = rfkill_register(rfk->rfkill);
146
	err = rfkill_register(rfk->rfkill);
137
	if (err)
147
	if (err)
138
		goto err_free_polldev;
148
		goto err_free_polldev;
149
	/* This code doesn't work without rfkill-input - if it is a module, be
150
	 * sure it is loaded here. If built-in or not available, an error will
151
	 * result. Just log an appropriate message */
152
	err = request_module("rfkill-input");
153
	if (err)
154
		printk(KERN_INFO "b43: rfkill-input is not available as a"
155
		       "module. If not built-in, the radio LED will fail\n");
139
	err = input_register_polled_device(rfk->poll_dev);
156
	err = input_register_polled_device(rfk->poll_dev);
140
	if (err)
157
	if (err)
141
		goto err_unreg_rfk;
158
		goto err_unreg_rfk;
(-)linux-2.6/drivers/net/wireless/b43/main.c (-9 / +15 lines)
Lines 2163-2169 static void b43_mgmtframe_txantenna(stru Link Here
2163
static void b43_chip_exit(struct b43_wldev *dev)
2163
static void b43_chip_exit(struct b43_wldev *dev)
2164
{
2164
{
2165
	b43_radio_turn_off(dev, 1);
2165
	b43_radio_turn_off(dev, 1);
2166
	b43_leds_exit(dev);
2167
	b43_gpio_cleanup(dev);
2166
	b43_gpio_cleanup(dev);
2168
	/* firmware is released later */
2167
	/* firmware is released later */
2169
}
2168
}
Lines 2191-2201 static int b43_chip_init(struct b43_wlde Link Here
2191
	err = b43_gpio_init(dev);
2190
	err = b43_gpio_init(dev);
2192
	if (err)
2191
	if (err)
2193
		goto out;	/* firmware is released later */
2192
		goto out;	/* firmware is released later */
2194
	b43_leds_init(dev);
2195
2193
2196
	err = b43_upload_initvals(dev);
2194
	err = b43_upload_initvals(dev);
2197
	if (err)
2195
	if (err)
2198
		goto err_leds_exit;
2196
		goto err_gpio_clean;
2199
	b43_radio_turn_on(dev);
2197
	b43_radio_turn_on(dev);
2200
2198
2201
	b43_write16(dev, 0x03E6, 0x0000);
2199
	b43_write16(dev, 0x03E6, 0x0000);
Lines 2271-2278 out: Link Here
2271
2269
2272
err_radio_off:
2270
err_radio_off:
2273
	b43_radio_turn_off(dev, 1);
2271
	b43_radio_turn_off(dev, 1);
2274
err_leds_exit:
2272
err_gpio_clean:
2275
	b43_leds_exit(dev);
2276
	b43_gpio_cleanup(dev);
2273
	b43_gpio_cleanup(dev);
2277
	return err;
2274
	return err;
2278
}
2275
}
Lines 2706-2712 static int b43_antenna_from_ieee80211(u8 Link Here
2706
static int b43_dev_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf)
2703
static int b43_dev_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf)
2707
{
2704
{
2708
	struct b43_wl *wl = hw_to_b43_wl(hw);
2705
	struct b43_wl *wl = hw_to_b43_wl(hw);
2709
	struct b43_wldev *dev;
2706
	struct b43_wldev *uninitialized_var(dev);
2710
	struct b43_phy *phy;
2707
	struct b43_phy *phy;
2711
	unsigned long flags;
2708
	unsigned long flags;
2712
	unsigned int new_phymode = 0xFFFF;
2709
	unsigned int new_phymode = 0xFFFF;
Lines 3277-3282 static void b43_wireless_core_exit(struc Link Here
3277
	b43_rfkill_exit(dev);
3274
	b43_rfkill_exit(dev);
3278
	mutex_lock(&dev->wl->mutex);
3275
	mutex_lock(&dev->wl->mutex);
3279
3276
3277
	b43_leds_exit(dev);
3280
	b43_rng_exit(dev->wl);
3278
	b43_rng_exit(dev->wl);
3281
	b43_pio_free(dev);
3279
	b43_pio_free(dev);
3282
	b43_dma_free(dev);
3280
	b43_dma_free(dev);
Lines 3405-3416 static int b43_wireless_core_init(struct Link Here
3405
	memset(wl->mac_addr, 0, ETH_ALEN);
3403
	memset(wl->mac_addr, 0, ETH_ALEN);
3406
	b43_upload_card_macaddress(dev);
3404
	b43_upload_card_macaddress(dev);
3407
	b43_security_init(dev);
3405
	b43_security_init(dev);
3408
	b43_rfkill_init(dev);
3409
	b43_rng_init(wl);
3406
	b43_rng_init(wl);
3410
3411
	b43_set_status(dev, B43_STAT_INITIALIZED);
3407
	b43_set_status(dev, B43_STAT_INITIALIZED);
3412
3408
3413
      out:
3409
	mutex_unlock(&dev->wl->mutex);
3410
	b43_rfkill_init(dev);
3411
	mutex_lock(&dev->wl->mutex);
3412
	b43_leds_init(dev);
3413
	/* if an LED is associated with the rfkill switch,
3414
	 * and the hardware radio enable switch is on, now is the
3415
	 * time to turn that LED on */
3416
	if (dev->led_radio.dev && dev->radio_hw_enable)
3417
		b43_led_turn_on(dev, dev->led_radio.index,
3418
				dev->led_radio.activelow);
3419
out:
3414
	return err;
3420
	return err;
3415
3421
3416
      err_chip_exit:
3422
      err_chip_exit:
(-)linux-2.6/drivers/net/wireless/b43/leds.c (-1 / +2 lines)
Lines 30-36 Link Here
30
#include "leds.h"
30
#include "leds.h"
31
31
32
32
33
static void b43_led_turn_on(struct b43_wldev *dev, u8 led_index,
33
void b43_led_turn_on(struct b43_wldev *dev, u8 led_index,
34
			    bool activelow)
34
			    bool activelow)
35
{
35
{
36
	struct b43_wl *wl = dev->wl;
36
	struct b43_wl *wl = dev->wl;
Lines 232-235 void b43_leds_exit(struct b43_wldev *dev Link Here
232
	b43_unregister_led(&dev->led_tx);
232
	b43_unregister_led(&dev->led_tx);
233
	b43_unregister_led(&dev->led_rx);
233
	b43_unregister_led(&dev->led_rx);
234
	b43_unregister_led(&dev->led_assoc);
234
	b43_unregister_led(&dev->led_assoc);
235
	b43_unregister_led(&dev->led_radio);
235
}
236
}
(-)linux-2.6/drivers/net/wireless/b43/leds.h (+2 lines)
Lines 44-49 enum b43_led_behaviour { Link Here
44
44
45
void b43_leds_init(struct b43_wldev *dev);
45
void b43_leds_init(struct b43_wldev *dev);
46
void b43_leds_exit(struct b43_wldev *dev);
46
void b43_leds_exit(struct b43_wldev *dev);
47
void b43_led_turn_on(struct b43_wldev *dev, u8 led_index,
48
			    bool activelow);
47
49
48
50
49
#else /* CONFIG_B43_LEDS */
51
#else /* CONFIG_B43_LEDS */

Return to bug 9414