ath9k: Check early for multi-vif/STA conditions
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / ath / ath9k / wow.c
index 4ffaadd167a86a653a2c71f33580a17f4f6caf52..1799a1d69ebdd40b18dca9e101e85bdf7e048c06 100644 (file)
@@ -197,46 +197,32 @@ int ath9k_suspend(struct ieee80211_hw *hw,
 
        mutex_lock(&sc->mutex);
 
-       ath_cancel_work(sc);
-       ath_stop_ani(sc);
-
        if (test_bit(ATH_OP_INVALID, &common->op_flags)) {
-               ath_dbg(common, ANY, "Device not present\n");
-               ret = -EINVAL;
+               ath_err(common, "Device not present\n");
+               ret = -ENODEV;
                goto fail_wow;
        }
 
        if (WARN_ON(!wowlan)) {
-               ath_dbg(common, WOW, "None of the WoW triggers enabled\n");
+               ath_err(common, "None of the WoW triggers enabled\n");
                ret = -EINVAL;
                goto fail_wow;
        }
 
-       if (!device_can_wakeup(sc->dev)) {
-               ath_dbg(common, WOW, "device_can_wakeup failed, WoW is not enabled\n");
+       if (sc->cur_chan->nvifs > 1) {
+               ath_dbg(common, WOW, "WoW for multivif is not yet supported\n");
                ret = 1;
                goto fail_wow;
        }
 
-       /*
-        * none of the sta vifs are associated
-        * and we are not currently handling multivif
-        * cases, for instance we have to seperately
-        * configure 'keep alive frame' for each
-        * STA.
-        */
-
        if (!test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) {
                ath_dbg(common, WOW, "None of the STA vifs are associated\n");
                ret = 1;
                goto fail_wow;
        }
 
-       if (sc->cur_chan->nvifs > 1) {
-               ath_dbg(common, WOW, "WoW for multivif is not yet supported\n");
-               ret = 1;
-               goto fail_wow;
-       }
+       ath_cancel_work(sc);
+       ath_stop_ani(sc);
 
        ath9k_wow_map_triggers(sc, wowlan, &wow_triggers_enabled);