usb: typec: tcpm: fix cc role at port reset
authorFrank Wang <frank.wang@rock-chips.com>
Fri, 16 Jun 2023 07:52:40 +0000 (15:52 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jun 2023 13:34:28 +0000 (15:34 +0200)
In the current implementation, the tcpm set CC1/CC2 role to open when
it do port reset would cause the VBUS removed by the Type-C partner.

This sets CC1/CC2 according to the default state of port to fix it.

Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20230616075241.27690-1-frank.wang@rock-chips.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/tcpm/tcpm.c

index 3c6b0c8e2d3ae2c7c896e300f162afe557037c95..9f6aaa3e70ca8106c9f344a2335622ca1722304c 100644 (file)
@@ -4885,7 +4885,8 @@ static void run_state_machine(struct tcpm_port *port)
                break;
        case PORT_RESET:
                tcpm_reset_port(port);
-               tcpm_set_cc(port, TYPEC_CC_OPEN);
+               tcpm_set_cc(port, tcpm_default_state(port) == SNK_UNATTACHED ?
+                           TYPEC_CC_RD : tcpm_rp_cc(port));
                tcpm_set_state(port, PORT_RESET_WAIT_OFF,
                               PD_T_ERROR_RECOVERY);
                break;