iwlegacy: enable only rfkill interrupt when device is down
Add two below iwlwifi commits to iwlegacy: commit554d1d027b
Author: Stanislaw Gruszka <sgruszka@redhat.com> Date: Thu Dec 23 12:38:21 2010 +0100 iwlagn: enable only rfkill interrupt when device is down commit3dd823e6b8
Author: Don Fry <donald.h.fry@intel.com> Date: Sun Feb 6 09:29:45 2011 -0800 iwlagn: Re-enable RF_KILL interrupt when down Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
ab42b40417
Коммит
a078a1fde1
|
@ -149,6 +149,12 @@ static inline void iwl_legacy_disable_interrupts(struct iwl_priv *priv)
|
||||||
IWL_DEBUG_ISR(priv, "Disabled interrupts\n");
|
IWL_DEBUG_ISR(priv, "Disabled interrupts\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void iwl_legacy_enable_rfkill_int(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
IWL_DEBUG_ISR(priv, "Enabling rfkill interrupt\n");
|
||||||
|
iwl_write32(priv, CSR_INT_MASK, CSR_INT_BIT_RF_KILL);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void iwl_legacy_enable_interrupts(struct iwl_priv *priv)
|
static inline void iwl_legacy_enable_interrupts(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
IWL_DEBUG_ISR(priv, "Enabling interrupts\n");
|
IWL_DEBUG_ISR(priv, "Enabling interrupts\n");
|
||||||
|
|
|
@ -1072,6 +1072,9 @@ static void iwl4965_irq_tasklet(struct iwl_priv *priv)
|
||||||
/* only Re-enable if diabled by irq */
|
/* only Re-enable if diabled by irq */
|
||||||
if (test_bit(STATUS_INT_ENABLED, &priv->status))
|
if (test_bit(STATUS_INT_ENABLED, &priv->status))
|
||||||
iwl_legacy_enable_interrupts(priv);
|
iwl_legacy_enable_interrupts(priv);
|
||||||
|
/* Re-enable RF_KILL if it occurred */
|
||||||
|
else if (handled & CSR_INT_BIT_RF_KILL)
|
||||||
|
iwl_legacy_enable_rfkill_int(priv);
|
||||||
|
|
||||||
#ifdef CONFIG_IWLWIFI_LEGACY_DEBUG
|
#ifdef CONFIG_IWLWIFI_LEGACY_DEBUG
|
||||||
if (iwl_legacy_get_debug_level(priv) & (IWL_DL_ISR)) {
|
if (iwl_legacy_get_debug_level(priv) & (IWL_DL_ISR)) {
|
||||||
|
@ -2624,9 +2627,10 @@ void iwl4965_mac_stop(struct ieee80211_hw *hw)
|
||||||
|
|
||||||
flush_workqueue(priv->workqueue);
|
flush_workqueue(priv->workqueue);
|
||||||
|
|
||||||
/* enable interrupts again in order to receive rfkill changes */
|
/* User space software may expect getting rfkill changes
|
||||||
|
* even if interface is down */
|
||||||
iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
|
iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
|
||||||
iwl_legacy_enable_interrupts(priv);
|
iwl_legacy_enable_rfkill_int(priv);
|
||||||
|
|
||||||
IWL_DEBUG_MAC80211(priv, "leave\n");
|
IWL_DEBUG_MAC80211(priv, "leave\n");
|
||||||
}
|
}
|
||||||
|
@ -3406,14 +3410,14 @@ iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
* 8. Enable interrupts and read RFKILL state
|
* 8. Enable interrupts and read RFKILL state
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
/* enable interrupts if needed: hw bug w/a */
|
/* enable rfkill interrupt: hw bug w/a */
|
||||||
pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd);
|
pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd);
|
||||||
if (pci_cmd & PCI_COMMAND_INTX_DISABLE) {
|
if (pci_cmd & PCI_COMMAND_INTX_DISABLE) {
|
||||||
pci_cmd &= ~PCI_COMMAND_INTX_DISABLE;
|
pci_cmd &= ~PCI_COMMAND_INTX_DISABLE;
|
||||||
pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd);
|
pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
iwl_legacy_enable_interrupts(priv);
|
iwl_legacy_enable_rfkill_int(priv);
|
||||||
|
|
||||||
/* If platform's RF_KILL switch is NOT set to KILL */
|
/* If platform's RF_KILL switch is NOT set to KILL */
|
||||||
if (iwl_read32(priv, CSR_GP_CNTRL) &
|
if (iwl_read32(priv, CSR_GP_CNTRL) &
|
||||||
|
|
Загрузка…
Ссылка в новой задаче