diff options
author | Stanislaw Gruszka <sgruszka@redhat.com> | 2012-03-07 12:52:28 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-03-08 13:59:52 -0500 |
commit | 8722c899a07f45457464803142bd1c2d2a2c3bd8 (patch) | |
tree | b633a2836ef0ad1905ed0836dcd74bceea14b3b5 /drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | |
parent | c2945f390dbc725f3c3ef044a6a3f4e3909a7758 (diff) |
iwlwifi: reintroduce iwl_enable_rfkill_int
If device is disabled by rfkill switch, do not enable all interrupts,
but only CSR_INT_BIT_RF_KILL to receive rfkill state change. Unblocking
other interrupts might cause problems, since driver can not be prepared
for receive them.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
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>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans-pcie.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c index aced6f8ae1e9..88e1c427f8f5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | |||
@@ -1044,7 +1044,7 @@ static int iwl_trans_pcie_start_fw(struct iwl_trans *trans, | |||
1044 | iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill); | 1044 | iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill); |
1045 | 1045 | ||
1046 | if (hw_rfkill) { | 1046 | if (hw_rfkill) { |
1047 | iwl_enable_interrupts(trans); | 1047 | iwl_enable_rfkill_int(trans); |
1048 | return -ERFKILL; | 1048 | return -ERFKILL; |
1049 | } | 1049 | } |
1050 | 1050 | ||
@@ -1553,8 +1553,7 @@ static void iwl_trans_pcie_stop_hw(struct iwl_trans *trans) | |||
1553 | iwl_write32(trans, CSR_INT, 0xFFFFFFFF); | 1553 | iwl_write32(trans, CSR_INT, 0xFFFFFFFF); |
1554 | 1554 | ||
1555 | /* Even if we stop the HW, we still want the RF kill interrupt */ | 1555 | /* Even if we stop the HW, we still want the RF kill interrupt */ |
1556 | IWL_DEBUG_ISR(trans, "Enabling rfkill interrupt\n"); | 1556 | iwl_enable_rfkill_int(trans); |
1557 | iwl_write32(trans, CSR_INT_MASK, CSR_INT_BIT_RF_KILL); | ||
1558 | } | 1557 | } |
1559 | 1558 | ||
1560 | static int iwl_trans_pcie_reclaim(struct iwl_trans *trans, int sta_id, int tid, | 1559 | static int iwl_trans_pcie_reclaim(struct iwl_trans *trans, int sta_id, int tid, |
@@ -1647,10 +1646,14 @@ static int iwl_trans_pcie_resume(struct iwl_trans *trans) | |||
1647 | { | 1646 | { |
1648 | bool hw_rfkill; | 1647 | bool hw_rfkill; |
1649 | 1648 | ||
1650 | iwl_enable_interrupts(trans); | ||
1651 | |||
1652 | hw_rfkill = !(iwl_read32(trans, CSR_GP_CNTRL) & | 1649 | hw_rfkill = !(iwl_read32(trans, CSR_GP_CNTRL) & |
1653 | CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW); | 1650 | CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW); |
1651 | |||
1652 | if (hw_rfkill) | ||
1653 | iwl_enable_rfkill_int(trans); | ||
1654 | else | ||
1655 | iwl_enable_interrupts(trans); | ||
1656 | |||
1654 | iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill); | 1657 | iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill); |
1655 | 1658 | ||
1656 | return 0; | 1659 | return 0; |