return ret;
 }
 
-int ucsi_resume(struct ucsi *ucsi)
+static void ucsi_resume_work(struct work_struct *work)
 {
+       struct ucsi *ucsi = container_of(work, struct ucsi, resume_work);
        struct ucsi_connector *con;
        u64 command;
        int ret;
        /* Restore UCSI notification enable mask after system resume */
        command = UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy;
        ret = ucsi_send_command(ucsi, command, NULL, 0);
-       if (ret < 0)
-               return ret;
+       if (ret < 0) {
+               dev_err(ucsi->dev, "failed to re-enable notifications (%d)\n", ret);
+               return;
+       }
 
        for (con = ucsi->connector; con->port; con++) {
                mutex_lock(&con->lock);
-               ucsi_check_connection(con);
+               ucsi_partner_task(con, ucsi_check_connection, 1, 0);
                mutex_unlock(&con->lock);
        }
+}
 
+int ucsi_resume(struct ucsi *ucsi)
+{
+       queue_work(system_long_wq, &ucsi->resume_work);
        return 0;
 }
 EXPORT_SYMBOL_GPL(ucsi_resume);
        if (!ucsi)
                return ERR_PTR(-ENOMEM);
 
+       INIT_WORK(&ucsi->resume_work, ucsi_resume_work);
        INIT_DELAYED_WORK(&ucsi->work, ucsi_init_work);
        mutex_init(&ucsi->ppm_lock);
        ucsi->dev = dev;
 
        /* Make sure that we are not in the middle of driver initialization */
        cancel_delayed_work_sync(&ucsi->work);
+       cancel_work_sync(&ucsi->resume_work);
 
        /* Disable notifications */
        ucsi->ops->async_write(ucsi, UCSI_CONTROL, &cmd, sizeof(cmd));