summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-03-28 10:34:02 +0200
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2012-04-23 14:19:31 -0700
commitd23f78e61f6b37159df6bfce7023500d731f61f3 (patch)
tree90c804e06178720d26db180479170c8da0648c7a /drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
parent226c02ca7fd182b24599d205820e159b0e7bc405 (diff)
downloadop-kernel-dev-d23f78e61f6b37159df6bfce7023500d731f61f3.zip
op-kernel-dev-d23f78e61f6b37159df6bfce7023500d731f61f3.tar.gz
iwlwifi: check RF kill register when interrupts have been disabled
Since the interrupts have been disabled, we may have missed an RF kill interrupt. Check the register to be sure the op_mode is in sync. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans-pcie.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index 589037d..8e1cf97 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -1438,12 +1438,22 @@ error:
static void iwl_trans_pcie_stop_hw(struct iwl_trans *trans)
{
+ bool hw_rfkill;
+
iwl_apm_stop(trans);
iwl_write32(trans, CSR_INT, 0xFFFFFFFF);
/* Even if we stop the HW, we still want the RF kill interrupt */
iwl_enable_rfkill_int(trans);
+
+ /*
+ * Check again since the RF kill state may have changed while all the
+ * interrupts were disabled, in this case we couldn't receive the
+ * RF kill interrupt and update the state in the op_mode.
+ */
+ hw_rfkill = iwl_is_rfkill_set(trans);
+ iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
}
static void iwl_trans_pcie_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
OpenPOWER on IntegriCloud