ath9k: unset the default LED pin if used by platform leds

Unset the default LED gpio pin if the same gpio pin is used by a LED
defined via platform LED. This prevents that the default led trigger
gets assigned to this LED and the GPIO value gets changed on
wifi up/down in case the led is not used for signaling the wifi state.

Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
Mathias Kresin 2017-03-21 23:21:57 +01:00
parent af9afa2811
commit 192f0a3db8
4 changed files with 27 additions and 31 deletions

View File

@ -56,16 +56,21 @@
INIT_LIST_HEAD(&sc->leds); INIT_LIST_HEAD(&sc->leds);
@@ -144,6 +165,12 @@ void ath_init_leds(struct ath_softc *sc) @@ -134,6 +155,17 @@ void ath_init_leds(struct ath_softc *sc)
ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, ath_fill_led_pin(sc);
!sc->sc_ah->config.led_active_high);
+ if (pdata && pdata->leds && pdata->num_leds)
+ for (i = 0; i < pdata->num_leds; i++) {
+ if (pdata->leds[i].gpio == sc->sc_ah->led_pin)
+ sc->sc_ah->led_pin = -1;
+ +
+ if (!pdata) + ath_create_platform_led(sc, &pdata->leds[i]);
+ }
+
+ if (sc->sc_ah->led_pin < 0)
+ return; + return;
+ +
+ for (i = 0; i < pdata->num_leds; i++) snprintf(led_name, sizeof(led_name), "ath9k-%s",
+ ath_create_platform_led(sc, &pdata->leds[i]); wiphy_name(sc->hw->wiphy));
}
#endif

View File

@ -7,15 +7,15 @@ Enable platform-supplied WLAN LED name for ath9k device. It replaces generic
Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl> Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
--- ---
drivers/net/wireless/ath/ath9k/gpio.c | 10 +++++++--- drivers/net/wireless/ath/ath9k/gpio.c | 7 +++++--
include/linux/ath9k_platform.h | 1 + include/linux/ath9k_platform.h | 1 +
2 files changed, 8 insertions(+), 3 deletions(-) 2 files changed, 6 insertions(+), 2 deletions(-)
--- a/drivers/net/wireless/ath/ath9k/gpio.c --- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -155,8 +155,11 @@ void ath_init_leds(struct ath_softc *sc) @@ -166,8 +166,11 @@ void ath_init_leds(struct ath_softc *sc)
if (sc->sc_ah->led_pin < 0)
ath_fill_led_pin(sc); return;
- snprintf(led_name, sizeof(led_name), "ath9k-%s", - snprintf(led_name, sizeof(led_name), "ath9k-%s",
- wiphy_name(sc->hw->wiphy)); - wiphy_name(sc->hw->wiphy));

View File

@ -221,12 +221,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ ath9k_register_gpio_chip(sc); + ath9k_register_gpio_chip(sc);
+ +
if (pdata && pdata->led_name) if (pdata && pdata->leds && pdata->num_leds)
strncpy(led_name, pdata->led_name, sizeof(led_name)); for (i = 0; i < pdata->num_leds; i++) {
else if (pdata->leds[i].gpio == sc->sc_ah->led_pin)
@@ -178,6 +314,7 @@ void ath_init_leds(struct ath_softc *sc) @@ -183,6 +319,7 @@ void ath_init_leds(struct ath_softc *sc)
for (i = 0; i < pdata->num_leds; i++) ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger,
ath_create_platform_led(sc, &pdata->leds[i]); !sc->sc_ah->config.led_active_high);
} }
+ +
#endif #endif

View File

@ -123,17 +123,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ath9k_register_gpio_chip(sc); ath9k_register_gpio_chip(sc);
+ ath9k_init_buttons(sc); + ath9k_init_buttons(sc);
if (pdata && pdata->led_name) if (pdata && pdata->leds && pdata->num_leds)
strncpy(led_name, pdata->led_name, sizeof(led_name)); for (i = 0; i < pdata->num_leds; i++) {
@@ -308,7 +378,7 @@ void ath_init_leds(struct ath_softc *sc)
ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger,
!sc->sc_ah->config.led_active_high);
- if (!pdata)
+ if (!pdata || !pdata->leds || !pdata->num_leds)
return;
for (i = 0; i < pdata->num_leds; i++)
--- a/include/linux/ath9k_platform.h --- a/include/linux/ath9k_platform.h
+++ b/include/linux/ath9k_platform.h +++ b/include/linux/ath9k_platform.h
@@ -50,6 +50,10 @@ struct ath9k_platform_data { @@ -50,6 +50,10 @@ struct ath9k_platform_data {