static int mt7921u_suspend(struct usb_interface *intf, pm_message_t state)
 {
        struct mt7921_dev *dev = usb_get_intfdata(intf);
+       struct mt76_connac_pm *pm = &dev->pm;
        int err;
 
+       pm->suspended = true;
+       flush_work(&dev->reset_work);
+
        err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, true);
        if (err)
-               return err;
+               goto failed;
 
        mt76u_stop_rx(&dev->mt76);
        mt76u_stop_tx(&dev->mt76);
        set_bit(MT76_STATE_SUSPEND, &dev->mphy.state);
 
        return 0;
+
+failed:
+       pm->suspended = false;
+
+       if (err < 0)
+               mt7921_reset(&dev->mt76);
+
+       return err;
 }
 
 static int mt7921u_resume(struct usb_interface *intf)
 {
        struct mt7921_dev *dev = usb_get_intfdata(intf);
+       struct mt76_connac_pm *pm = &dev->pm;
        bool reinit = true;
        int err, i;
 
        if (reinit || mt7921_dma_need_reinit(dev)) {
                err = mt7921u_dma_init(dev, true);
                if (err)
-                       return err;
+                       goto failed;
        }
 
        clear_bit(MT76_STATE_SUSPEND, &dev->mphy.state);
 
        err = mt76u_resume_rx(&dev->mt76);
        if (err < 0)
-               return err;
+               goto failed;
+
+       err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, false);
+failed:
+       pm->suspended = false;
+
+       if (err < 0)
+               mt7921_reset(&dev->mt76);
 
-       return mt76_connac_mcu_set_hif_suspend(&dev->mt76, false);
+       return err;
 }
 #endif /* CONFIG_PM */