Message ID | 20250429234703.3748506-2-rdbabiera@google.com |
---|---|
State | New |
Headers | show |
Series | [v1] usb: typec: tcpm: delay SNK_TRY_WAIT_DEBOUNCE to SRC_TRYWAIT transition | expand |
On Tue, Apr 29, 2025 at 11:47:01PM +0000, RD Babiera wrote: > This patch fixes Type-C Compliance Test TD 4.7.6 - Try.SNK DRP Connect > SNKAS. > > The compliance tester moves into SNK_UNATTACHED during toggling and > expects the PUT to apply Rp after tPDDebounce of detection. If the port > is in SNK_TRY_WAIT_DEBOUNCE, it will move into SRC_TRYWAIT immediately > and apply Rp. This violates TD 4.7.5.V.3, where the tester confirms that > the PUT attaches Rp after the transitions to Unattached.SNK for > tPDDebounce. > > Change the tcpm_set_state delay between SNK_TRY_WAIT_DEBOUNCE and > SRC_TRYWAIT to tPDDebounce. > > Fixes: a0a3e04e6b2c ("staging: typec: tcpm: Check for Rp for tPDDebounce") > Cc: stable@vger.kernel.org > Signed-off-by: RD Babiera <rdbabiera@google.com> > Reviewed-by: Badhri Jagan Sridharan <badhri@google.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > --- > drivers/usb/typec/tcpm/tcpm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c > index 784fa23102f9..87d56ac4565d 100644 > --- a/drivers/usb/typec/tcpm/tcpm.c > +++ b/drivers/usb/typec/tcpm/tcpm.c > @@ -6003,7 +6003,7 @@ static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1, > case SNK_TRY_WAIT_DEBOUNCE: > if (!tcpm_port_is_sink(port)) { > port->max_wait = 0; > - tcpm_set_state(port, SRC_TRYWAIT, 0); > + tcpm_set_state(port, SRC_TRYWAIT, PD_T_PD_DEBOUNCE); > } > break; > case SRC_TRY_WAIT: > > base-commit: 615dca38c2eae55aff80050275931c87a812b48c > -- > 2.49.0.967.g6a0df3ecc3-goog
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 784fa23102f9..87d56ac4565d 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -6003,7 +6003,7 @@ static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1, case SNK_TRY_WAIT_DEBOUNCE: if (!tcpm_port_is_sink(port)) { port->max_wait = 0; - tcpm_set_state(port, SRC_TRYWAIT, 0); + tcpm_set_state(port, SRC_TRYWAIT, PD_T_PD_DEBOUNCE); } break; case SRC_TRY_WAIT: