rt2x00: Remove MAC80211_LEDS dependency
PATCH 1/1 rt2x00: Remove MAC80211_LEDS dependency
Implement triggers inside rt2x00 itself based on input from mac80211. This replaces the method of using the mac80211 trigger events which do not work for USB drivers due to the scheduling requirement.
After this patch RT2500USB_LEDS and RT73USB_LEDS no longer need to be tagged as broken since they now support LED handling again without having to check for in_atomic().
Signed-off-by Ivo van Doorn <[email protected]>
--- drivers/net/wireless/rt2x00/Kconfig | 14 +-- drivers/net/wireless/rt2x00/rt2400pci.c | 63 ++++++++------ drivers/net/wireless/rt2x00/rt2500pci.c | 63 ++++++++------ drivers/net/wireless/rt2x00/rt2500usb.c | 85 +++++++++---------- drivers/net/wireless/rt2x00/rt2x00.h | 5 +- drivers/net/wireless/rt2x00/rt2x00dev.c | 10 ++- drivers/net/wireless/rt2x00/rt2x00leds.c | 131 +++++++++++++++--------------- drivers/net/wireless/rt2x00/rt2x00leds.h | 21 +---- drivers/net/wireless/rt2x00/rt2x00lib.h | 12 +++ drivers/net/wireless/rt2x00/rt2x00mac.c | 6 ++ drivers/net/wireless/rt2x00/rt61pci.c | 64 +++++++++----- drivers/net/wireless/rt2x00/rt73usb.c | 70 +++++++++------- 12 files changed, 297 insertions(+), 247 deletions(-)
drivers/net/wireless/rt2x00/Kconfig +5 -9
@@ -38,10 +38,6 @@ config RT2X00_LIB_RFKILL config RT2X00_LIB_LEDS boolean depends on RT2X00_LIB - select NEW_LEDS - select LEDS_CLASS - select LEDS_TRIGGERS - select MAC80211_LEDS config RT2400PCI tristate "Ralink rt2400 pci/pcmcia support"
@@ -64,7 +60,7 @@ config RT2400PCI_RFKILL config RT2400PCI_LEDS bool "RT2400 leds support" - depends on RT2400PCI + depends on RT2400PCI && LEDS_CLASS select RT2X00_LIB_LEDS ---help--- This adds support for led triggers provided my mac80211.
@@ -90,7 +86,7 @@ config RT2500PCI_RFKILL config RT2500PCI_LEDS bool "RT2500 leds support" - depends on RT2500PCI + depends on RT2500PCI && LEDS_CLASS select RT2X00_LIB_LEDS ---help--- This adds support for led triggers provided my mac80211.
@@ -118,7 +114,7 @@ config RT61PCI_RFKILL config RT61PCI_LEDS bool "RT61 leds support" - depends on RT61PCI + depends on RT61PCI && LEDS_CLASS select RT2X00_LIB_LEDS ---help--- This adds support for led triggers provided my mac80211.
@@ -134,7 +130,7 @@ config RT2500USB config RT2500USB_LEDS bool "RT2500 leds support" - depends on RT2500USB && BROKEN + depends on RT2500USB && LEDS_CLASS select RT2X00_LIB_LEDS ---help--- This adds support for led triggers provided my mac80211.
@@ -152,7 +148,7 @@ config RT73USB config RT73USB_LEDS bool "RT73 leds support" - depends on RT73USB && BROKEN + depends on RT73USB && LEDS_CLASS select RT2X00_LIB_LEDS ---help--- This adds support for led triggers provided my mac80211.
drivers/net/wireless/rt2x00/rt2400pci.c +36 -27
100 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2500pci.c +36 -27
100 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2500usb.c +40 -45
119 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2x00.h +1 -4
@@ -385,6 +385,7 @@ struct rt2x00_intf {unsigned int delayed_flags;#define DELAYED_UPDATE_BEACON 0x00000001#define DELAYED_CONFIG_ERP 0x00000002 +#define DELAYED_LED_ASSOC 0x00000004 };static inline struct rt2x00_intf *vif_to_intf (struct ieee80211_vif *vif)
@@ -533,8 +534,6 @@ struct rt2x00lib_ops { struct link_qual *qual);void (*reset_tuner) (struct rt2x00_dev *rt2x00dev);void (*link_tuner) (struct rt2x00_dev *rt2x00dev); -void (*led_brightness) (struct led_classdev *led_cdev, -enum led_brightness brightness);/* * TX control handlers
@@ -694,8 +693,6 @@ struct rt2x00_dev {* by mac8011 or the kernel. */ #ifdef CONFIG_RT2X00_LIB_LEDS -unsigned int led_flags; -struct rt2x00_trigger trigger_qual;struct rt2x00_led led_radio;struct rt2x00_led led_assoc;struct rt2x00_led led_qual;
drivers/net/wireless/rt2x00/rt2x00dev.c +8 -2
@@ -108,11 +108,13 @@ int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)/* * Enable radio. */ - status = rt2x00dev->ops->lib->set_device_state (rt2x00dev, -STATE_RADIO_ON ); + status = + rt2x00dev->ops->lib->set_device_state (rt2x00dev,STATE_RADIO_ON );if (status)return status; +rt2x00leds_led_radio (rt2x00dev, true); +__set_bit (DEVICE_ENABLED_RADIO , &rt2x00dev->flags);/*
@@ -155,6 +157,7 @@ void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)* Disable radio. */ rt2x00dev->ops->lib->set_device_state (rt2x00dev,STATE_RADIO_OFF ); +rt2x00leds_led_radio (rt2x00dev, false); }void rt2x00lib_toggle_rx (struct rt2x00_dev *rt2x00dev,enum dev_state state)
@@ -449,6 +452,9 @@ static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,if (delayed_flags &DELAYED_CONFIG_ERP )rt2x00lib_config_erp (rt2x00dev, intf, &intf->conf); + +if (delayed_flags &DELAYED_LED_ASSOC ) +rt2x00leds_led_assoc (rt2x00dev, !!rt2x00dev->intf_associated); }static void rt2x00lib_intf_scheduled (struct work_struct *work)
drivers/net/wireless/rt2x00/rt2x00leds.c +67 -64
228 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2x00leds.h +4 -17
@@ -26,18 +26,10 @@#ifndef RT2X00LEDS_H #define RT2X00LEDS_H -/* -* Flags used by driver to indicate which -* which led types are supported. -*/ -#define LED_SUPPORT_RADIO 0x000001 -#define LED_SUPPORT_ASSOC 0x000002 -#define LED_SUPPORT_ACTIVITY 0x000004 -#define LED_SUPPORT_QUALITY 0x000008 -enum led_type {LED_TYPE_RADIO ,LED_TYPE_ASSOC , +LED_TYPE_ACTIVITY ,LED_TYPE_QUALITY , };
@@ -48,14 +40,9 @@ struct rt2x00_led {struct led_classdev led_dev;enum led_type type; - unsigned int registered; -}; - -struct rt2x00_trigger { -struct led_trigger trigger; - -enum led_type type; -unsigned int registered; +unsigned int flags; +#define LED_INITIALIZED ( 1 << 0 ) +#define LED_REGISTERED ( 1 << 1 ) };#endif /* CONFIG_RT2X00_LIB_LEDS */
drivers/net/wireless/rt2x00/rt2x00lib.h +12 -0
@@ -185,6 +185,8 @@ static inline void rt2x00rfkill_resume(struct rt2x00_dev *rt2x00dev)*/ #ifdef CONFIG_RT2X00_LIB_LEDS void rt2x00leds_led_quality (struct rt2x00_dev *rt2x00dev,int rssi); +void rt2x00leds_led_assoc (struct rt2x00_dev *rt2x00dev,bool enabled); +void rt2x00leds_led_radio (struct rt2x00_dev *rt2x00dev,bool enabled);void rt2x00leds_register (struct rt2x00_dev *rt2x00dev);void rt2x00leds_unregister (struct rt2x00_dev *rt2x00dev);void rt2x00leds_suspend (struct rt2x00_dev *rt2x00dev);
@@ -195,6 +197,16 @@ static inline void rt2x00leds_led_quality(struct rt2x00_dev *rt2x00dev, { } +static inline void rt2x00leds_led_assoc (struct rt2x00_dev *rt2x00dev, +bool enabled) +{ +} + +static inline void rt2x00leds_led_radio (struct rt2x00_dev *rt2x00dev, +bool enabled) +{ +} +static inline void rt2x00leds_register (struct rt2x00_dev *rt2x00dev) { }
drivers/net/wireless/rt2x00/rt2x00mac.c +6 -0
@@ -485,6 +485,12 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw, rt2x00dev->intf_associated++; else rt2x00dev->intf_associated--; + +if (!test_bit (DRIVER_REQUIRE_SCHEDULED , &rt2x00dev->flags)) +rt2x00leds_led_assoc (rt2x00dev, + !!rt2x00dev->intf_associated); +else + delayed |=DELAYED_LED_ASSOC ; }/*
drivers/net/wireless/rt2x00/rt61pci.c +41 -23
96 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt73usb.c +41 -29
106 lines not on this page · raw message
Signature · 1 line
1.5.4.5