iwlwifi: properly handle device_set_wakeup_enable
authorJohannes Berg <johannes.berg@intel.com>
Wed, 16 May 2012 20:54:25 +0000 (22:54 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 5 Jun 2012 19:32:13 +0000 (15:32 -0400)
This is intended to be set whenever wakeup will be
needed upon suspend, not only when suspending, so
use the new callbacks to set it then.

Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-mac80211.c

index ab2f4d7500a40df03d68293986d8c6ae46fc9969..ff66200b8eaa9b3cc3fd382ed2616253a1dab27e 100644 (file)
@@ -417,8 +417,6 @@ int iwlagn_mac_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
        if (ret)
                goto error;
 
-       device_set_wakeup_enable(priv->trans->dev, true);
-
        iwl_trans_wowlan_suspend(priv->trans);
 
        goto out;
@@ -485,8 +483,6 @@ static int iwlagn_mac_resume(struct ieee80211_hw *hw)
 
        priv->wowlan = false;
 
-       device_set_wakeup_enable(priv->trans->dev, false);
-
        iwlagn_prepare_restart(priv);
 
        memset((void *)&ctx->active, 0, sizeof(ctx->active));
@@ -501,6 +497,12 @@ static int iwlagn_mac_resume(struct ieee80211_hw *hw)
        return 1;
 }
 
+static void iwlagn_mac_set_wakeup(struct ieee80211_hw *hw, bool enabled)
+{
+       struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
+
+       device_set_wakeup_enable(priv->trans->dev, enabled);
+}
 #endif
 
 void iwlagn_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
@@ -1581,6 +1583,7 @@ struct ieee80211_ops iwlagn_hw_ops = {
 #ifdef CONFIG_PM_SLEEP
        .suspend = iwlagn_mac_suspend,
        .resume = iwlagn_mac_resume,
+       .set_wakeup = iwlagn_mac_set_wakeup,
 #endif
        .add_interface = iwlagn_mac_add_interface,
        .remove_interface = iwlagn_mac_remove_interface,