Hi

> -----Original Message-----
> From: Guenter Roeck [mailto:[email protected]] On Behalf Of Guenter Roeck
> Sent: Tuesday, September 26, 2017 9:43 PM
> To: Jun Li <[email protected]>; [email protected]; [email protected];
> [email protected]; [email protected]
> Cc: [email protected]; [email protected]; Peter Chen
> <[email protected]>; A.s. Dong <[email protected]>; linux-
> [email protected]; [email protected]
> Subject: Re: [PATCH 07/12] typec: tcpm: add starting value for drp toggling
> 
> On 09/25/2017 05:45 PM, Li Jun wrote:
> > 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.
> >
> 
> It does have a starting value. The patch changes the starting value to
> TYPEC_CC_RD (from currently one of the RP states) when entering the
> SNK_UNATTACHED state.
> Please provide a matching description.

Yes, actually it's a mismatch, when entering the SNK_UNATTACHED,
we should start from Rd, see TCPCI spec:
Figure 4-11. TCPC State Diagram before a Connection

> 
> > Signed-off-by: Li Jun <[email protected]>
> > ---
> >   drivers/usb/typec/tcpm.c | 10 +++++-----
> >   1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c index
> > 8483d3e..38a6223 100644
> > --- a/drivers/usb/typec/tcpm.c
> > +++ b/drivers/usb/typec/tcpm.c
> > @@ -1839,15 +1839,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;
> >     }
> > @@ -2156,7 +2156,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;
> >             }
> > @@ -2328,7 +2328,7 @@ static void run_state_machine(struct tcpm_port
> *port)
> >             if (!port->non_pd_role_swap)
> >                     tcpm_swap_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;
> >             }
> >

Reply via email to