#ifdef CONFIG_ATH9K_WOW
 void ath9k_init_wow(struct ieee80211_hw *hw);
+void ath9k_deinit_wow(struct ieee80211_hw *hw);
 int ath9k_suspend(struct ieee80211_hw *hw,
                  struct cfg80211_wowlan *wowlan);
 int ath9k_resume(struct ieee80211_hw *hw);
 static inline void ath9k_init_wow(struct ieee80211_hw *hw)
 {
 }
+static inline void ath9k_deinit_wow(struct ieee80211_hw *hw)
+{
+}
 static inline int ath9k_suspend(struct ieee80211_hw *hw,
                                struct cfg80211_wowlan *wowlan)
 {
 
 void ath9k_set_wakeup(struct ieee80211_hw *hw, bool enabled)
 {
        struct ath_softc *sc = hw->priv;
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
 
        mutex_lock(&sc->mutex);
-       device_init_wakeup(sc->dev, 1);
        device_set_wakeup_enable(sc->dev, enabled);
        mutex_unlock(&sc->mutex);
+
+       ath_dbg(common, WOW, "WoW wakeup source is %s\n",
+               (enabled) ? "enabled" : "disabled");
 }
 
 void ath9k_init_wow(struct ieee80211_hw *hw)
 {
        struct ath_softc *sc = hw->priv;
 
-       if ((sc->driver_data & ATH9K_PCI_WOW) && device_can_wakeup(sc->dev))
+       if (sc->driver_data & ATH9K_PCI_WOW) {
                hw->wiphy->wowlan = &ath9k_wowlan_support;
 
-       atomic_set(&sc->wow_sleep_proc_intr, -1);
-       atomic_set(&sc->wow_got_bmiss_intr, -1);
+               atomic_set(&sc->wow_sleep_proc_intr, -1);
+               atomic_set(&sc->wow_got_bmiss_intr, -1);
+
+               device_init_wakeup(sc->dev, 1);
+       }
+}
+
+void ath9k_deinit_wow(struct ieee80211_hw *hw)
+{
+       struct ath_softc *sc = hw->priv;
+
+       if (sc->driver_data & ATH9K_PCI_WOW)
+               device_init_wakeup(sc->dev, 0);
 }