Commit f2865c63 authored by Amit Sunil Dhamne's avatar Amit Sunil Dhamne Committed by Greg Kroah-Hartman
Browse files

usb: typec: tcpm: fix state transition for SNK_WAIT_CAPABILITIES state in run_state_machine()



A subtle error got introduced while manually fixing merge conflict in
tcpm.c for commit 85c4efbe ("Merge v6.12-rc6 into usb-next"). As a
result of this error, the next state is unconditionally set to
SNK_WAIT_CAPABILITIES_TIMEOUT while handling SNK_WAIT_CAPABILITIES state
in run_state_machine(...).

Fix this by setting new state of TCPM state machine to `upcoming_state`
(that is set to different values based on conditions).

Cc: stable@vger.kernel.org
Fixes: 85c4efbe ("Merge v6.12-rc6 into usb-next")
Signed-off-by: default avatarAmit Sunil Dhamne <amitsd@google.com>
Reviewed-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20250310-fix-snk-wait-timeout-v6-14-rc6-v1-1-5db14475798f@google.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c44e3d3c
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -5117,16 +5117,16 @@ static void run_state_machine(struct tcpm_port *port)
		 */
		if (port->vbus_never_low) {
			port->vbus_never_low = false;
			tcpm_set_state(port, SNK_SOFT_RESET,
				       port->timings.sink_wait_cap_time);
			upcoming_state = SNK_SOFT_RESET;
		} else {
			if (!port->self_powered)
				upcoming_state = SNK_WAIT_CAPABILITIES_TIMEOUT;
			else
				upcoming_state = hard_reset_state(port);
			tcpm_set_state(port, SNK_WAIT_CAPABILITIES_TIMEOUT,
				       port->timings.sink_wait_cap_time);
		}

		tcpm_set_state(port, upcoming_state,
			       port->timings.sink_wait_cap_time);
		break;
	case SNK_WAIT_CAPABILITIES_TIMEOUT:
		/*