#ifdef CPTCFG_MAC80211_LEDS
-@@ -129,6 +131,64 @@ static void ath9k_unregister_gpio_chip(s
+@@ -124,6 +126,67 @@ static void ath9k_unregister_gpio_chip(s
sc->gpiochip = NULL;
}
+ return;
+
+ for (i = 0; i < pdata->num_btns; i++) {
++ if (pdata->btns[i].gpio == sc->sc_ah->led_pin)
++ sc->sc_ah->led_pin = -1;
++
+ ath9k_hw_gpio_request_in(sc->sc_ah, pdata->btns[i].gpio,
+ "ath9k-gpio");
+ bt[i].gpio = sc->gpiochip->gchip.base + pdata->btns[i].gpio;
#else /* CONFIG_GPIOLIB */
static inline void ath9k_register_gpio_chip(struct ath_softc *sc)
-@@ -139,6 +199,14 @@ static inline void ath9k_unregister_gpio
+@@ -134,6 +197,14 @@ static inline void ath9k_unregister_gpio
{
}
#endif /* CONFIG_GPIOLIB */
/********************************/
-@@ -262,6 +330,7 @@ void ath_deinit_leds(struct ath_softc *s
+@@ -257,6 +328,7 @@ void ath_deinit_leds(struct ath_softc *s
{
struct ath_led *led;
while (!list_empty(&sc->leds)) {
led = list_first_entry(&sc->leds, struct ath_led, list);
#ifdef CONFIG_GPIOLIB
-@@ -293,6 +362,7 @@ void ath_init_leds(struct ath_softc *sc)
- ath_fill_led_pin(sc);
+@@ -296,6 +368,7 @@ void ath_init_leds(struct ath_softc *sc)
+ }
- ath9k_register_gpio_chip(sc);
+ ath_fill_led_pin(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 {
+@@ -49,6 +49,10 @@ struct ath9k_platform_data {
+
int num_leds;
const struct gpio_led *leds;
- const char *led_name;
+
+ unsigned num_btns;
+ const struct gpio_keys_button *btns;