1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- --- a/include/linux/ath9k_platform.h
- +++ b/include/linux/ath9k_platform.h
- @@ -45,6 +45,9 @@ struct ath9k_platform_data {
- int (*external_reset)(void);
-
- bool use_eeprom;
- +
- + int num_leds;
- + const struct gpio_led *leds;
- };
-
- #endif /* _LINUX_ATH9K_PLATFORM_H */
- --- a/drivers/net/wireless/ath/ath9k/gpio.c
- +++ b/drivers/net/wireless/ath/ath9k/gpio.c
- @@ -15,6 +15,7 @@
- */
-
- #include "ath9k.h"
- +#include <linux/ath9k_platform.h>
-
- /********************************/
- /* LED functions */
- @@ -108,6 +109,24 @@ int ath_create_gpio_led(struct ath_softc
- return ret;
- }
-
- +static int ath_create_platform_led(struct ath_softc *sc,
- + const struct gpio_led *gpio)
- +{
- + struct ath_led *led;
- + int ret;
- +
- + led = kzalloc(sizeof(*led), GFP_KERNEL);
- + if (!led)
- + return -ENOMEM;
- +
- + led->gpio = gpio;
- + ret = ath_add_led(sc, led);
- + if (ret < 0)
- + kfree(led);
- +
- + return ret;
- +}
- +
- void ath_deinit_leds(struct ath_softc *sc)
- {
- struct ath_led *led;
- @@ -124,8 +143,10 @@ void ath_deinit_leds(struct ath_softc *s
-
- void ath_init_leds(struct ath_softc *sc)
- {
- + struct ath9k_platform_data *pdata = sc->dev->platform_data;
- char led_name[32];
- const char *trigger;
- + int i;
-
- INIT_LIST_HEAD(&sc->leds);
-
- @@ -144,6 +165,12 @@ 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)
- + return;
- +
- + for (i = 0; i < pdata->num_leds; i++)
- + ath_create_platform_led(sc, &pdata->leds[i]);
- }
- #endif
-
|