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:
parent
af9afa2811
commit
192f0a3db8
4 changed files with 27 additions and 31 deletions
|
@ -56,16 +56,21 @@
|
|||
|
||||
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,
|
||||
!sc->sc_ah->config.led_active_high);
|
||||
ath_fill_led_pin(sc);
|
||||
|
||||
+ 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;
|
||||
+
|
||||
+ for (i = 0; i < pdata->num_leds; i++)
|
||||
+ ath_create_platform_led(sc, &pdata->leds[i]);
|
||||
}
|
||||
#endif
|
||||
snprintf(led_name, sizeof(led_name), "ath9k-%s",
|
||||
wiphy_name(sc->hw->wiphy));
|
||||
|
||||
|
|
|
@ -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>
|
||||
---
|
||||
drivers/net/wireless/ath/ath9k/gpio.c | 10 +++++++---
|
||||
include/linux/ath9k_platform.h | 1 +
|
||||
2 files changed, 8 insertions(+), 3 deletions(-)
|
||||
drivers/net/wireless/ath/ath9k/gpio.c | 7 +++++--
|
||||
include/linux/ath9k_platform.h | 1 +
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/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)
|
||||
|
||||
ath_fill_led_pin(sc);
|
||||
@@ -166,8 +166,11 @@ void ath_init_leds(struct ath_softc *sc)
|
||||
if (sc->sc_ah->led_pin < 0)
|
||||
return;
|
||||
|
||||
- snprintf(led_name, sizeof(led_name), "ath9k-%s",
|
||||
- wiphy_name(sc->hw->wiphy));
|
||||
|
|
|
@ -221,12 +221,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
+ ath9k_register_gpio_chip(sc);
|
||||
+
|
||||
if (pdata && pdata->led_name)
|
||||
strncpy(led_name, pdata->led_name, sizeof(led_name));
|
||||
else
|
||||
@@ -178,6 +314,7 @@ void ath_init_leds(struct ath_softc *sc)
|
||||
for (i = 0; i < pdata->num_leds; i++)
|
||||
ath_create_platform_led(sc, &pdata->leds[i]);
|
||||
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)
|
||||
@@ -183,6 +319,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);
|
||||
}
|
||||
+
|
||||
#endif
|
||||
|
|
|
@ -123,17 +123,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ath9k_register_gpio_chip(sc);
|
||||
+ ath9k_init_buttons(sc);
|
||||
|
||||
if (pdata && pdata->led_name)
|
||||
strncpy(led_name, pdata->led_name, sizeof(led_name));
|
||||
@@ -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++)
|
||||
if (pdata && pdata->leds && pdata->num_leds)
|
||||
for (i = 0; i < pdata->num_leds; i++) {
|
||||
--- a/include/linux/ath9k_platform.h
|
||||
+++ b/include/linux/ath9k_platform.h
|
||||
@@ -50,6 +50,10 @@ struct ath9k_platform_data {
|
||||
|
|
Loading…
Reference in a new issue