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;