iwlagn: stop interrupts when suspending
authorJohannes Berg <johannes.berg@intel.com>
Mon, 10 Oct 2011 14:26:57 +0000 (07:26 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 14 Oct 2011 18:48:10 +0000 (14:48 -0400)
Occasionally, the device will send interrupts
while it is resuming, at a point where we are
not set up again to handle them. This causes
the core IRQ handling to completely disable
the IRQ, and then the driver won't work again
until it is reloaded/rebound.

To fix this issue disable the IRQ on suspend,
this will cause us to only get interrupts
again after we've setup everything on resume.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c

index 60a8eccb713310db966549dde74e92f3f781ed9d..60067c7f0de0287f7071f014fd6f876c6b43de2e 100644 (file)
@@ -1377,8 +1377,13 @@ static int iwl_trans_pcie_suspend(struct iwl_trans *trans)
         * But of course ... if we have configured WoWLAN then we did other
         * things already :-)
         */
-       if (!trans->shrd->wowlan)
+       if (!trans->shrd->wowlan) {
                iwl_apm_stop(priv(trans));
+       } else {
+               iwl_disable_interrupts(trans);
+               iwl_clear_bit(bus(trans), CSR_GP_CNTRL,
+                             CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
+       }
 
        return 0;
 }