OSDN Git Service

typec: tcpm: add starting value for drp toggling
authorLi Jun <jun.li@nxp.com>
Tue, 26 Jun 2018 23:45:29 +0000 (07:45 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Jun 2018 10:49:48 +0000 (19:49 +0900)
As DRP port autonomously toggles the Rp/Rd need a start value to
begin with, so add one parameter for it in tcpm_start_drp_toggling.

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/tcpm.c

index 9dcab81..f5e9558 100644 (file)
@@ -2431,15 +2431,15 @@ static int tcpm_set_charge(struct tcpm_port *port, bool charge)
        return 0;
 }
 
-static bool tcpm_start_drp_toggling(struct tcpm_port *port)
+static bool tcpm_start_drp_toggling(struct tcpm_port *port,
+                                   enum typec_cc_status cc)
 {
        int ret;
 
        if (port->tcpc->start_drp_toggling &&
            port->port_type == TYPEC_PORT_DRP) {
                tcpm_log_force(port, "Start DRP toggling");
-               ret = port->tcpc->start_drp_toggling(port->tcpc,
-                                                    tcpm_rp_cc(port));
+               ret = port->tcpc->start_drp_toggling(port->tcpc, cc);
                if (!ret)
                        return true;
        }
@@ -2747,7 +2747,7 @@ static void run_state_machine(struct tcpm_port *port)
                if (!port->non_pd_role_swap)
                        tcpm_swap_complete(port, -ENOTCONN);
                tcpm_src_detach(port);
-               if (tcpm_start_drp_toggling(port)) {
+               if (tcpm_start_drp_toggling(port, tcpm_rp_cc(port))) {
                        tcpm_set_state(port, DRP_TOGGLING, 0);
                        break;
                }
@@ -2922,7 +2922,7 @@ static void run_state_machine(struct tcpm_port *port)
                        tcpm_swap_complete(port, -ENOTCONN);
                tcpm_pps_complete(port, -ENOTCONN);
                tcpm_snk_detach(port);
-               if (tcpm_start_drp_toggling(port)) {
+               if (tcpm_start_drp_toggling(port, TYPEC_CC_RD)) {
                        tcpm_set_state(port, DRP_TOGGLING, 0);
                        break;
                }