Revert "usb: typec: tcpm: fix cc role at port reset"
[platform/kernel/linux-rpi.git] / drivers / usb / typec / tcpm / tcpm.c
index 25e7e14..47ae2d5 100644 (file)
@@ -4273,7 +4273,8 @@ static void run_state_machine(struct tcpm_port *port)
                                current_lim = PD_P_SNK_STDBY_MW / 5;
                        tcpm_set_current_limit(port, current_lim, 5000);
                        /* Not sink vbus if operational current is 0mA */
-                       tcpm_set_charge(port, !!pdo_max_current(port->snk_pdo[0]));
+                       tcpm_set_charge(port, !port->pd_supported ||
+                                       pdo_max_current(port->snk_pdo[0]));
 
                        if (!port->pd_supported)
                                tcpm_set_state(port, SNK_READY, 0);
@@ -4861,8 +4862,7 @@ static void run_state_machine(struct tcpm_port *port)
                break;
        case PORT_RESET:
                tcpm_reset_port(port);
-               tcpm_set_cc(port, tcpm_default_state(port) == SNK_UNATTACHED ?
-                           TYPEC_CC_RD : tcpm_rp_cc(port));
+               tcpm_set_cc(port, TYPEC_CC_OPEN);
                tcpm_set_state(port, PORT_RESET_WAIT_OFF,
                               PD_T_ERROR_RECOVERY);
                break;
@@ -5391,6 +5391,15 @@ static void _tcpm_pd_hard_reset(struct tcpm_port *port)
        if (port->bist_request == BDO_MODE_TESTDATA && port->tcpc->set_bist_data)
                port->tcpc->set_bist_data(port->tcpc, false);
 
+       switch (port->state) {
+       case ERROR_RECOVERY:
+       case PORT_RESET:
+       case PORT_RESET_WAIT_OFF:
+               return;
+       default:
+               break;
+       }
+
        if (port->ams != NONE_AMS)
                port->ams = NONE_AMS;
        if (port->hard_reset_count < PD_N_HARD_RESET_COUNT)