diff options
| author | Peng Fan <[email protected]> | 2026-06-18 14:48:48 +0800 |
|---|---|---|
| committer | Marek Vasut <[email protected]> | 2026-06-18 16:48:16 +0200 |
| commit | 78d5f8cb50090a2888df284564f43f4ebfbf663c (patch) | |
| tree | eb59ecc16afd5ff012834145145477ad667ca197 | |
| parent | a7830e87555abfb81cc69275cecb2bc0fbde5b28 (diff) | |
usb: tcpm: fix inverted poll condition in tcpm_pd_transmit()
The read_poll_timeout() macro breaks out of its loop when the condition
evaluates to true. The current code uses "!tx_complete" as the
condition, which means it exits immediately when tx_complete is false
(i.e., transmission has NOT completed yet), rather than waiting for
completion.
Fix the condition to "tx_complete" so that the poll loop waits until
the TCPC signals transmission success/failure/discard before
proceeding.
Without this fix, tcpm_pd_transmit() returns before the TCPC has
finished transmitting, causing the PD state machine to proceed with
stale tx_status values.
Fixes: 1db4c0ac77e3 ("usb: tcpm: add core framework")
Reviewed-by: Neil Armstrong <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
| -rw-r--r-- | drivers/usb/tcpm/tcpm.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/tcpm/tcpm.c b/drivers/usb/tcpm/tcpm.c index 3061b466d7c..d6c0be82333 100644 --- a/drivers/usb/tcpm/tcpm.c +++ b/drivers/usb/tcpm/tcpm.c @@ -207,7 +207,7 @@ static int tcpm_pd_transmit(struct udevice *dev, */ timeout_us *= 5; ret = read_poll_timeout(tcpm_transmit_helper, tx_complete, - !tx_complete, false, timeout_us, dev); + tx_complete, false, timeout_us, dev); if (ret < 0) { dev_err(dev, "TCPM: PD transmit data failed: %d\n", ret); return ret; |
