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);
|
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
|
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue