ath9k_htc: Handle monitor interface removal
Sujith [Tue, 1 Jun 2010 09:44:17 +0000 (14:44 +0530)]
The monitor interface instance on the target has
to be removed before setting it to FULLSLEEP.
Handle this properly.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

drivers/net/wireless/ath/ath9k/htc_drv_main.c

index b62bfa5..ba26a98 100644 (file)
@@ -1266,12 +1266,6 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw)
        WMI_CMD(WMI_DISABLE_INTR_CMDID);
        WMI_CMD(WMI_DRAIN_TXQ_ALL_CMDID);
        WMI_CMD(WMI_STOP_RECV_CMDID);
-       ath9k_hw_phy_disable(ah);
-       ath9k_hw_disable(ah);
-       ath9k_hw_configpcipowersave(ah, 1, 1);
-       ath9k_htc_ps_restore(priv);
-       ath9k_htc_setpower(priv, ATH9K_PM_FULL_SLEEP);
-
        skb_queue_purge(&priv->tx_queue);
 
        /* Remove monitor interface here */
@@ -1284,6 +1278,12 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw)
                                  "Monitor interface removed\n");
        }
 
+       ath9k_hw_phy_disable(ah);
+       ath9k_hw_disable(ah);
+       ath9k_hw_configpcipowersave(ah, 1, 1);
+       ath9k_htc_ps_restore(priv);
+       ath9k_htc_setpower(priv, ATH9K_PM_FULL_SLEEP);
+
        priv->op_flags |= OP_INVALID;
 
        ath_print(common, ATH_DBG_CONFIG, "Driver halt\n");