[PATCH] usb: typec: ucsi: Test fix

From: Heikki Krogerus
Date: Wed Feb 09 2022 - 09:27:19 EST


Interim.

Not-Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
---
drivers/usb/typec/ucsi/ucsi.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index f0c2fa19f3e0f..225104beda8be 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -956,14 +956,18 @@ static int ucsi_dr_swap(struct typec_port *port, enum typec_data_role role)
if (ret < 0)
goto out_unlock;

+ mutex_unlock(&con->lock);
+
if (!wait_for_completion_timeout(&con->complete,
msecs_to_jiffies(UCSI_SWAP_TIMEOUT_MS)))
- ret = -ETIMEDOUT;
+ return -ETIMEDOUT;
+
+ return 0;

out_unlock:
mutex_unlock(&con->lock);

- return ret < 0 ? ret : 0;
+ return ret;
}

static int ucsi_pr_swap(struct typec_port *port, enum typec_role role)
@@ -992,11 +996,13 @@ static int ucsi_pr_swap(struct typec_port *port, enum typec_role role)
if (ret < 0)
goto out_unlock;

+ mutex_unlock(&con->lock);
+
if (!wait_for_completion_timeout(&con->complete,
- msecs_to_jiffies(UCSI_SWAP_TIMEOUT_MS))) {
- ret = -ETIMEDOUT;
- goto out_unlock;
- }
+ msecs_to_jiffies(UCSI_SWAP_TIMEOUT_MS)))
+ return -ETIMEDOUT;
+
+ mutex_lock(&con->lock);

/* Something has gone wrong while swapping the role */
if (UCSI_CONSTAT_PWR_OPMODE(con->status.flags) !=
@@ -1372,6 +1378,7 @@ void ucsi_unregister(struct ucsi *ucsi)
ucsi->ops->async_write(ucsi, UCSI_CONTROL, &cmd, sizeof(cmd));

for (i = 0; i < ucsi->cap.num_connectors; i++) {
+ complete(&ucsi->connector[i].complete);
cancel_work_sync(&ucsi->connector[i].work);
ucsi_unregister_partner(&ucsi->connector[i]);
ucsi_unregister_altmodes(&ucsi->connector[i],
--
2.34.1


--DBjLCJp5eah5t2cJ--