mutex_lock(&wl->mutex);
 
-       if (unlikely(wl->state == WL1271_STATE_OFF))
+       if (unlikely(wl->state == WL1271_STATE_OFF)) {
+               ret = -EAGAIN;
                goto out;
+       }
 
        ret = wl1271_ps_elp_wakeup(wl, false);
        if (ret < 0)
 
        mutex_lock(&wl->mutex);
 
+       if (unlikely(wl->state == WL1271_STATE_OFF)) {
+               ret = -EAGAIN;
+               goto out_unlock;
+       }
+
        ret = wl1271_ps_elp_wakeup(wl, false);
        if (ret < 0)
                goto out_unlock;
 
        mutex_lock(&wl->mutex);
 
-       if (unlikely(wl->state == WL1271_STATE_OFF))
+       if (unlikely(wl->state == WL1271_STATE_OFF)) {
+               ret = -EAGAIN;
                goto out;
+       }
 
        ret = wl1271_ps_elp_wakeup(wl, false);
        if (ret < 0)
 
        mutex_lock(&wl->mutex);
 
+       if (unlikely(wl->state == WL1271_STATE_OFF))
+               goto out;
+
        ret = wl1271_ps_elp_wakeup(wl, false);
        if (ret < 0)
                goto out;
 
        wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
 
+       if (unlikely(wl->state == WL1271_STATE_OFF)) {
+               ret = -EAGAIN;
+               goto out;
+       }
+
        ret = wl1271_ps_elp_wakeup(wl, false);
        if (ret < 0)
                goto out;
 
        mutex_lock(&wl->mutex);
 
+       if (unlikely(wl->state == WL1271_STATE_OFF))
+               goto out;
+
        ret = wl1271_ps_elp_wakeup(wl, false);
        if (ret < 0)
                goto out;