diff options
Diffstat (limited to 'package/mac80211/patches/561-led_trigger_names.patch')
| -rw-r--r-- | package/mac80211/patches/561-led_trigger_names.patch | 146 | 
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 000000000..28108ecfb --- /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); | 
