diff options
| author | Tomas Winkler <tomas.winkler@intel.com> | 2008-08-28 05:25:04 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2008-09-02 17:12:49 -0400 |
| commit | cf88c433bf64b6f7395a39f840bec88a8c58b58b (patch) | |
| tree | 1b39040b6859e1da4c1364aab0f5d78fd3d55e9c | |
| parent | 49898852e6aa8a6de9a5bc0bab2cf305b3583bbf (diff) | |
iwlwifi: workaround interrupt handling no some platforms
This patch adds workaround for an interrupt related hardware bug on
some platforms. (Apparently these platforms boot-up w/ INTX_DISABLED
set. -- JWL)
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 061ffba9c884..c0b73c4d6f44 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -2602,6 +2602,7 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw) | |||
| 2602 | { | 2602 | { |
| 2603 | struct iwl_priv *priv = hw->priv; | 2603 | struct iwl_priv *priv = hw->priv; |
| 2604 | int ret; | 2604 | int ret; |
| 2605 | u16 pci_cmd; | ||
| 2605 | 2606 | ||
| 2606 | IWL_DEBUG_MAC80211("enter\n"); | 2607 | IWL_DEBUG_MAC80211("enter\n"); |
| 2607 | 2608 | ||
| @@ -2612,6 +2613,13 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw) | |||
| 2612 | pci_restore_state(priv->pci_dev); | 2613 | pci_restore_state(priv->pci_dev); |
| 2613 | pci_enable_msi(priv->pci_dev); | 2614 | pci_enable_msi(priv->pci_dev); |
| 2614 | 2615 | ||
| 2616 | /* enable interrupts if needed: hw bug w/a */ | ||
| 2617 | pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd); | ||
| 2618 | if (pci_cmd & PCI_COMMAND_INTX_DISABLE) { | ||
| 2619 | pci_cmd &= ~PCI_COMMAND_INTX_DISABLE; | ||
| 2620 | pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd); | ||
| 2621 | } | ||
| 2622 | |||
| 2615 | ret = request_irq(priv->pci_dev->irq, iwl4965_isr, IRQF_SHARED, | 2623 | ret = request_irq(priv->pci_dev->irq, iwl4965_isr, IRQF_SHARED, |
| 2616 | DRV_NAME, priv); | 2624 | DRV_NAME, priv); |
| 2617 | if (ret) { | 2625 | if (ret) { |
