diff options
author | Michael Buesch <mb@bu3sch.de> | 2007-11-03 14:34:32 +0100 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-11-10 04:25:12 -0500 |
commit | 35c7e6602b81bdacb745f04236a419402777139e (patch) | |
tree | 4ee928ff39b6b6bb09677399b9e1c1772ee445e8 /drivers/net/wireless/b43/rfkill.h | |
parent | 30c4ae42317666f3aeed658cdb8803c84ac6fe77 (diff) | |
download | kernel_samsung_tuna-35c7e6602b81bdacb745f04236a419402777139e.zip kernel_samsung_tuna-35c7e6602b81bdacb745f04236a419402777139e.tar.gz kernel_samsung_tuna-35c7e6602b81bdacb745f04236a419402777139e.tar.bz2 |
b43: Rewrite and fix rfkill init
The rfkill subsystem doesn't like code like that
rfkill_allocate();
rfkill_register();
rfkill_unregister();
rfkill_register(); /* <- This will crash */
This sequence happens with
modprobe b43
ifconfig wlanX up
ifconfig wlanX down
ifconfig wlanX up
Fix this by always re-allocating the rfkill stuff before register.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/rfkill.h')
-rw-r--r-- | drivers/net/wireless/b43/rfkill.h | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/net/wireless/b43/rfkill.h b/drivers/net/wireless/b43/rfkill.h index 29544e8..adacf93 100644 --- a/drivers/net/wireless/b43/rfkill.h +++ b/drivers/net/wireless/b43/rfkill.h @@ -15,14 +15,14 @@ struct b43_rfkill { struct rfkill *rfkill; /* The poll device for the RFKILL input button */ struct input_polled_dev *poll_dev; + /* Did initialization succeed? Used for freeing. */ + bool registered; /* The unique name of this rfkill switch */ - char name[32]; + char name[sizeof("b43-phy4294967295")]; }; -/* All the init functions return void, because we are not interested +/* The init function returns void, because we are not interested * in failing the b43 init process when rfkill init failed. */ -void b43_rfkill_alloc(struct b43_wldev *dev); -void b43_rfkill_free(struct b43_wldev *dev); void b43_rfkill_init(struct b43_wldev *dev); void b43_rfkill_exit(struct b43_wldev *dev); @@ -36,12 +36,6 @@ struct b43_rfkill { /* empty */ }; -static inline void b43_rfkill_alloc(struct b43_wldev *dev) -{ -} -static inline void b43_rfkill_free(struct b43_wldev *dev) -{ -} static inline void b43_rfkill_init(struct b43_wldev *dev) { } |