When WoWLAN resume fails with retval 1 mac80211
will attempt to reconfig the device in a similar
manner when hw restart is requested. This wasn't
handled properly and yielded call trace warnings
and the device ended up not working.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
                ath10k_warn(ar, "failed to wakeup from wow: %d\n", ret);
 
 exit:
+       if (ret) {
+               switch (ar->state) {
+               case ATH10K_STATE_ON:
+                       ar->state = ATH10K_STATE_RESTARTING;
+                       ret = 1;
+                       break;
+               case ATH10K_STATE_OFF:
+               case ATH10K_STATE_RESTARTING:
+               case ATH10K_STATE_RESTARTED:
+               case ATH10K_STATE_UTF:
+               case ATH10K_STATE_WEDGED:
+                       ath10k_warn(ar, "encountered unexpected device state %d on resume, cannot recover\n",
+                                   ar->state);
+                       ret = -EIO;
+                       break;
+               }
+       }
+
        mutex_unlock(&ar->conf_mutex);
-       return ret ? 1 : 0;
+       return ret;
 }
 
 int ath10k_wow_init(struct ath10k *ar)