ath9k: Do not try to calibrate radio when in sleep mode
authorJouni Malinen <jouni.malinen@atheros.com>
Tue, 19 May 2009 14:01:39 +0000 (17:01 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 20 May 2009 18:46:33 +0000 (14:46 -0400)
When the chip is in sleep mode, there is no point trying to calibrate
the radio since it will just results in incorrect values being read
from registers and other potential issues. In addition, if we actually
start processing calibrate, do not allow the chip to be put into sleep
until we have completed the calibration step.

Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/main.c

index 7c3a98b1957dc40cee14dcb4048ec7741ee5d308..dd54fa727a613252eec16b1b6b39965439c020ef 100644 (file)
@@ -329,6 +329,12 @@ static void ath_ani_calibrate(unsigned long data)
        if (sc->sc_flags & SC_OP_SCANNING)
                goto set_timer;
 
+       /* Only calibrate if awake */
+       if (sc->sc_ah->power_mode != ATH9K_PM_AWAKE)
+               goto set_timer;
+
+       ath9k_ps_wakeup(sc);
+
        /* Long calibration runs independently of short calibration. */
        if ((timestamp - sc->ani.longcal_timer) >= ATH_LONG_CALINTERVAL) {
                longcal = true;
@@ -380,6 +386,8 @@ static void ath_ani_calibrate(unsigned long data)
                }
        }
 
+       ath9k_ps_restore(sc);
+
 set_timer:
        /*
        * Set timer interval based on previous results.