WAKE_COND, SUSPEND_NOTIFIER_TIMEOUT);
 
        if (ret == 0) {
-               bt_dev_dbg(hdev, "Timed out waiting for suspend");
+               bt_dev_err(hdev, "Timed out waiting for suspend events");
                for (i = 0; i < __SUSPEND_NUM_TASKS; ++i) {
                        if (test_bit(i, hdev->suspend_tasks))
-                               bt_dev_dbg(hdev, "Bit %d is set", i);
+                               bt_dev_err(hdev, "Suspend timeout bit: %d", i);
                        clear_bit(i, hdev->suspend_tasks);
                }
 
                ret = hci_change_suspend_state(hdev, BT_RUNNING);
        }
 
-       /* If suspend failed, restore it to running */
-       if (ret && action == PM_SUSPEND_PREPARE)
-               hci_change_suspend_state(hdev, BT_RUNNING);
-
 done:
-       return ret ? notifier_from_errno(-EBUSY) : NOTIFY_STOP;
+       /* We always allow suspend even if suspend preparation failed and
+        * attempt to recover in resume.
+        */
+       if (ret)
+               bt_dev_err(hdev, "Suspend notifier action (%lu) failed: %d",
+                          action, ret);
+
+       return NOTIFY_STOP;
 }
 
 /* Alloc HCI device */