/* ANI */
 /*******/
 
-/* ANI values for STA only.
-   FIXME: Add appropriate values for AP later */
-
-#define ATH_ANI_POLLINTERVAL    100     /* 100 milliseconds between ANI poll */
-#define ATH_SHORT_CALINTERVAL   1000    /* 1 second between calibrations */
-#define ATH_LONG_CALINTERVAL    30000   /* 30 seconds between calibrations */
-#define ATH_RESTART_CALINTERVAL 1200000 /* 20 minutes between calibrations */
+#define ATH_STA_SHORT_CALINTERVAL 1000    /* 1 second */
+#define ATH_AP_SHORT_CALINTERVAL  100     /* 100 ms */
+#define ATH_ANI_POLLINTERVAL      100     /* 100 ms */
+#define ATH_LONG_CALINTERVAL      30000   /* 30 seconds */
+#define ATH_RESTART_CALINTERVAL   1200000 /* 20 minutes */
 
 struct ath_ani {
        bool caldone;
 
  */
 static void ath_ani_calibrate(unsigned long data)
 {
-       struct ath_softc *sc;
-       struct ath_hw *ah;
+       struct ath_softc *sc = (struct ath_softc *)data;
+       struct ath_hw *ah = sc->sc_ah;
        bool longcal = false;
        bool shortcal = false;
        bool aniflag = false;
        unsigned int timestamp = jiffies_to_msecs(jiffies);
-       u32 cal_interval;
+       u32 cal_interval, short_cal_interval;
 
-       sc = (struct ath_softc *)data;
-       ah = sc->sc_ah;
+       short_cal_interval = (ah->opmode == NL80211_IFTYPE_AP) ?
+               ATH_AP_SHORT_CALINTERVAL : ATH_STA_SHORT_CALINTERVAL;
 
        /*
        * don't calibrate when we're scanning.
        * we are most likely not on our home channel.
        */
        if (sc->rx.rxfilter & FIF_BCN_PRBRESP_PROMISC)
-               return;
+               goto set_timer;
 
        /* Long calibration runs independently of short calibration. */
        if ((timestamp - sc->ani.longcal_timer) >= ATH_LONG_CALINTERVAL) {
 
        /* Short calibration applies only while caldone is false */
        if (!sc->ani.caldone) {
-               if ((timestamp - sc->ani.shortcal_timer) >=
-                   ATH_SHORT_CALINTERVAL) {
+               if ((timestamp - sc->ani.shortcal_timer) >= short_cal_interval) {
                        shortcal = true;
                        DPRINTF(sc, ATH_DBG_ANI, "shortcal @%lu\n", jiffies);
                        sc->ani.shortcal_timer = timestamp;
        }
 
        /* Verify whether we must check ANI */
-       if ((timestamp - sc->ani.checkani_timer) >=
-          ATH_ANI_POLLINTERVAL) {
+       if ((timestamp - sc->ani.checkani_timer) >= ATH_ANI_POLLINTERVAL) {
                aniflag = true;
                sc->ani.checkani_timer = timestamp;
        }
        if (longcal || shortcal || aniflag) {
                /* Call ANI routine if necessary */
                if (aniflag)
-                       ath9k_hw_ani_monitor(ah, &sc->nodestats,
-                                            ah->curchan);
+                       ath9k_hw_ani_monitor(ah, &sc->nodestats, ah->curchan);
 
                /* Perform calibration if necessary */
                if (longcal || shortcal) {
                }
        }
 
+set_timer:
        /*
        * Set timer interval based on previous results.
        * The interval must be the shortest necessary to satisfy ANI,
        if (sc->sc_ah->config.enable_ani)
                cal_interval = min(cal_interval, (u32)ATH_ANI_POLLINTERVAL);
        if (!sc->ani.caldone)
-               cal_interval = min(cal_interval, (u32)ATH_SHORT_CALINTERVAL);
+               cal_interval = min(cal_interval, (u32)short_cal_interval);
 
        mod_timer(&sc->ani.timer, jiffies + msecs_to_jiffies(cal_interval));
 }
 
                /* Start ANI */
                mod_timer(&sc->ani.timer,
-                       jiffies + msecs_to_jiffies(ATH_ANI_POLLINTERVAL));
-
+                         jiffies + msecs_to_jiffies(ATH_ANI_POLLINTERVAL));
        } else {
                DPRINTF(sc, ATH_DBG_CONFIG, "Bss Info DISSOC\n");
                sc->curaid = 0;