if (!ah || test_bit(ATH_OP_INVALID, &common->op_flags))
                return IRQ_NONE;
 
-       /* shared irq, not for us */
+       if (!AR_SREV_9100(ah) && test_bit(ATH_OP_HW_RESET, &common->op_flags))
+               return IRQ_NONE;
 
+       /* shared irq, not for us */
        if (!ath9k_hw_intrpend(ah))
                return IRQ_NONE;
 
-       if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) {
-               ath9k_hw_kill_interrupts(ah);
-               return IRQ_HANDLED;
-       }
-
        /*
         * Figure out the reason(s) for the interrupt.  Note
         * that the hal returns a pseudo-ISR that may include
        ath9k_debug_sync_cause(sc, sync_cause);
        status &= ah->imask;    /* discard unasked-for bits */
 
+       if (AR_SREV_9100(ah) && test_bit(ATH_OP_HW_RESET, &common->op_flags))
+               return IRQ_HANDLED;
+
        /*
         * If there are no status bits set, then this interrupt was not
         * for me (should have been caught above).
        struct ath_common *common = ath9k_hw_common(sc->sc_ah);
        int r;
 
+       ath9k_hw_kill_interrupts(sc->sc_ah);
        set_bit(ATH_OP_HW_RESET, &common->op_flags);
 
        ath9k_ps_wakeup(sc);
 #ifdef CONFIG_ATH9K_DEBUGFS
        RESET_STAT_INC(sc, type);
 #endif
+       ath9k_hw_kill_interrupts(sc->sc_ah);
        set_bit(ATH_OP_HW_RESET, &common->op_flags);
        ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
 }