summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/561-led_trigger_names.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/561-led_trigger_names.patch')
-rw-r--r--package/mac80211/patches/561-led_trigger_names.patch146
1 files changed, 146 insertions, 0 deletions
diff --git a/package/mac80211/patches/561-led_trigger_names.patch b/package/mac80211/patches/561-led_trigger_names.patch
new file mode 100644
index 0000000000..28108ecfb6
--- /dev/null
+++ b/package/mac80211/patches/561-led_trigger_names.patch
@@ -0,0 +1,146 @@
+From: Johannes Berg <johannes.berg@intel.com>
+Subject: [PATCH] mac80211: make LED trigger names available early
+
+The throughput trigger will require doing LED
+classdev/trigger handling before register_hw(),
+so drivers should have access to the trigger
+names before it. If trigger registration fails,
+this will still make the trigger name available,
+but that's not a big problem since the default
+trigger will the simply not be found.
+
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+ net/mac80211/led.c | 36 ++++++++++++++++--------------------
+ net/mac80211/led.h | 4 ++++
+ net/mac80211/main.c | 2 ++
+ 3 files changed, 22 insertions(+), 20 deletions(-)
+
+--- a/net/mac80211/led.c
++++ b/net/mac80211/led.c
+@@ -54,12 +54,22 @@ void ieee80211_led_radio(struct ieee8021
+ led_trigger_event(local->radio_led, LED_OFF);
+ }
+
++void ieee80211_led_names(struct ieee80211_local *local)
++{
++ snprintf(local->rx_led_name, sizeof(local->rx_led_name),
++ "%srx", wiphy_name(local->hw.wiphy));
++ snprintf(local->tx_led_name, sizeof(local->tx_led_name),
++ "%stx", wiphy_name(local->hw.wiphy));
++ snprintf(local->assoc_led_name, sizeof(local->assoc_led_name),
++ "%sassoc", wiphy_name(local->hw.wiphy));
++ snprintf(local->radio_led_name, sizeof(local->radio_led_name),
++ "%sradio", wiphy_name(local->hw.wiphy));
++}
++
+ void ieee80211_led_init(struct ieee80211_local *local)
+ {
+ local->rx_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
+ if (local->rx_led) {
+- snprintf(local->rx_led_name, sizeof(local->rx_led_name),
+- "%srx", wiphy_name(local->hw.wiphy));
+ local->rx_led->name = local->rx_led_name;
+ if (led_trigger_register(local->rx_led)) {
+ kfree(local->rx_led);
+@@ -69,8 +79,6 @@ void ieee80211_led_init(struct ieee80211
+
+ local->tx_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
+ if (local->tx_led) {
+- snprintf(local->tx_led_name, sizeof(local->tx_led_name),
+- "%stx", wiphy_name(local->hw.wiphy));
+ local->tx_led->name = local->tx_led_name;
+ if (led_trigger_register(local->tx_led)) {
+ kfree(local->tx_led);
+@@ -80,8 +88,6 @@ void ieee80211_led_init(struct ieee80211
+
+ local->assoc_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
+ if (local->assoc_led) {
+- snprintf(local->assoc_led_name, sizeof(local->assoc_led_name),
+- "%sassoc", wiphy_name(local->hw.wiphy));
+ local->assoc_led->name = local->assoc_led_name;
+ if (led_trigger_register(local->assoc_led)) {
+ kfree(local->assoc_led);
+@@ -91,8 +97,6 @@ void ieee80211_led_init(struct ieee80211
+
+ local->radio_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
+ if (local->radio_led) {
+- snprintf(local->radio_led_name, sizeof(local->radio_led_name),
+- "%sradio", wiphy_name(local->hw.wiphy));
+ local->radio_led->name = local->radio_led_name;
+ if (led_trigger_register(local->radio_led)) {
+ kfree(local->radio_led);
+@@ -125,9 +129,7 @@ char *__ieee80211_get_radio_led_name(str
+ {
+ struct ieee80211_local *local = hw_to_local(hw);
+
+- if (local->radio_led)
+- return local->radio_led_name;
+- return NULL;
++ return local->radio_led_name;
+ }
+ EXPORT_SYMBOL(__ieee80211_get_radio_led_name);
+
+@@ -135,9 +137,7 @@ char *__ieee80211_get_assoc_led_name(str
+ {
+ struct ieee80211_local *local = hw_to_local(hw);
+
+- if (local->assoc_led)
+- return local->assoc_led_name;
+- return NULL;
++ return local->assoc_led_name;
+ }
+ EXPORT_SYMBOL(__ieee80211_get_assoc_led_name);
+
+@@ -145,9 +145,7 @@ char *__ieee80211_get_tx_led_name(struct
+ {
+ struct ieee80211_local *local = hw_to_local(hw);
+
+- if (local->tx_led)
+- return local->tx_led_name;
+- return NULL;
++ return local->tx_led_name;
+ }
+ EXPORT_SYMBOL(__ieee80211_get_tx_led_name);
+
+@@ -155,8 +153,6 @@ char *__ieee80211_get_rx_led_name(struct
+ {
+ struct ieee80211_local *local = hw_to_local(hw);
+
+- if (local->rx_led)
+- return local->rx_led_name;
+- return NULL;
++ return local->rx_led_name;
+ }
+ EXPORT_SYMBOL(__ieee80211_get_rx_led_name);
+--- a/net/mac80211/led.h
++++ b/net/mac80211/led.h
+@@ -18,6 +18,7 @@ extern void ieee80211_led_assoc(struct i
+ bool associated);
+ extern void ieee80211_led_radio(struct ieee80211_local *local,
+ bool enabled);
++extern void ieee80211_led_names(struct ieee80211_local *local);
+ extern void ieee80211_led_init(struct ieee80211_local *local);
+ extern void ieee80211_led_exit(struct ieee80211_local *local);
+ #else
+@@ -35,6 +36,9 @@ static inline void ieee80211_led_radio(s
+ bool enabled)
+ {
+ }
++static inline void ieee80211_led_names(struct ieee80211_local *local)
++{
++}
+ static inline void ieee80211_led_init(struct ieee80211_local *local)
+ {
+ }
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -599,6 +599,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(
+ /* init dummy netdev for use w/ NAPI */
+ init_dummy_netdev(&local->napi_dev);
+
++ ieee80211_led_names(local);
++
+ return local_to_hw(local);
+ }
+ EXPORT_SYMBOL(ieee80211_alloc_hw);