ath9k: Keep LED on in idle state after association
authorVasanthakumar Thiagarajan <vasanth@atheros.com>
Sat, 14 Mar 2009 14:29:41 +0000 (19:59 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Sat, 28 Mar 2009 00:12:53 +0000 (20:12 -0400)
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/main.c

index 7d27eed78af48914dba3422e6730665d2486f20c..4c29cef66a61263fb4611ff63c888edd1c61319e 100644 (file)
@@ -940,18 +940,25 @@ static void ath_led_blink_work(struct work_struct *work)
 
        if (!(sc->sc_flags & SC_OP_LED_ASSOCIATED))
                return;
-       ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN,
-                         (sc->sc_flags & SC_OP_LED_ON) ? 1 : 0);
+
+       if ((sc->led_on_duration == ATH_LED_ON_DURATION_IDLE) ||
+           (sc->led_off_duration == ATH_LED_OFF_DURATION_IDLE))
+               ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN, 0);
+       else
+               ath9k_hw_set_gpio(sc->sc_ah, ATH_LED_PIN,
+                                 (sc->sc_flags & SC_OP_LED_ON) ? 1 : 0);
 
        queue_delayed_work(sc->hw->workqueue, &sc->ath_led_blink_work,
                           (sc->sc_flags & SC_OP_LED_ON) ?
                           msecs_to_jiffies(sc->led_off_duration) :
                           msecs_to_jiffies(sc->led_on_duration));
 
-       sc->led_on_duration =
-                       max((ATH_LED_ON_DURATION_IDLE - sc->led_on_cnt), 25);
-       sc->led_off_duration =
-                       max((ATH_LED_OFF_DURATION_IDLE - sc->led_off_cnt), 10);
+       sc->led_on_duration = sc->led_on_cnt ?
+                       max((ATH_LED_ON_DURATION_IDLE - sc->led_on_cnt), 25) :
+                       ATH_LED_ON_DURATION_IDLE;
+       sc->led_off_duration = sc->led_off_cnt ?
+                       max((ATH_LED_OFF_DURATION_IDLE - sc->led_off_cnt), 10) :
+                       ATH_LED_OFF_DURATION_IDLE;
        sc->led_on_cnt = sc->led_off_cnt = 0;
        if (sc->sc_flags & SC_OP_LED_ON)
                sc->sc_flags &= ~SC_OP_LED_ON;