diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 0a376f720d78..f43a45d0f1dd 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1236,7 +1236,15 @@ static void iwl_irq_tasklet(struct iwl_priv *priv) | |||
1236 | /* Ack/clear/reset pending uCode interrupts. | 1236 | /* Ack/clear/reset pending uCode interrupts. |
1237 | * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS, | 1237 | * Note: Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS, |
1238 | */ | 1238 | */ |
1239 | iwl_write32(priv, CSR_INT, priv->_agn.inta); | 1239 | /* There is a hardware bug in the interrupt mask function that some |
1240 | * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if | ||
1241 | * they are disabled in the CSR_INT_MASK register. Furthermore the | ||
1242 | * ICT interrupt handling mechanism has another bug that might cause | ||
1243 | * these unmasked interrupts fail to be detected. We workaround the | ||
1244 | * hardware bugs here by ACKing all the possible interrupts so that | ||
1245 | * interrupt coalescing can still be achieved. | ||
1246 | */ | ||
1247 | iwl_write32(priv, CSR_INT, priv->_agn.inta | ~priv->inta_mask); | ||
1240 | 1248 | ||
1241 | inta = priv->_agn.inta; | 1249 | inta = priv->_agn.inta; |
1242 | 1250 | ||
@@ -2611,7 +2619,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv) | |||
2611 | BIT(NL80211_IFTYPE_STATION) | | 2619 | BIT(NL80211_IFTYPE_STATION) | |
2612 | BIT(NL80211_IFTYPE_ADHOC); | 2620 | BIT(NL80211_IFTYPE_ADHOC); |
2613 | 2621 | ||
2614 | hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY | | 2622 | hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY | |
2615 | WIPHY_FLAG_DISABLE_BEACON_HINTS; | 2623 | WIPHY_FLAG_DISABLE_BEACON_HINTS; |
2616 | 2624 | ||
2617 | /* | 2625 | /* |