RE: [EXT] Re: [PATCH] usb: typec: tcpm: not sink vbus if operational current is 0mA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Heikki and Guenter,

> On 7/31/23 06:33, Heikki Krogerus wrote:
> > Hi,
> >
> > I'm sorry to keep you waiting.
> >
> > On Fri, Jun 30, 2023 at 06:56:56PM +0800, Xu Yang wrote:
> >> PD3.0 Spec 6.4.1.3.1 said:
> >> For a Sink requiring no power from the Source, the Voltage (B19…10)
> >> Shall be set to 5V and the Operational Current Shall be set to 0mA.
> >>
> >> Therefore, we can keep sink path closed if the operational current of
> >> the first fixed PDO is 0mA.
> >>
> >> Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx>
> >> ---
> >>   drivers/usb/typec/tcpm/tcpm.c | 12 ++++++++++--
> >>   1 file changed, 10 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> >> index 829d75ebab42..4f7e4c50e847 100644
> >> --- a/drivers/usb/typec/tcpm/tcpm.c
> >> +++ b/drivers/usb/typec/tcpm/tcpm.c
> >> @@ -4301,7 +4301,12 @@ static void run_state_machine(struct tcpm_port *port)
> >>                      if (port->slow_charger_loop && (current_lim > PD_P_SNK_STDBY_MW / 5))
> >>                              current_lim = PD_P_SNK_STDBY_MW / 5;
> >>                      tcpm_set_current_limit(port, current_lim, 5000);
> >> -                    tcpm_set_charge(port, true);
> >> +
> >> +                    if (pdo_max_current(port->snk_pdo[0]))
> >> +                            tcpm_set_charge(port, true);
> >> +                    else
> >> +                            tcpm_log(port, "Not require power from Source");
> >> +
> >>                      if (!port->pd_supported)
> >>                              tcpm_set_state(port, SNK_READY, 0);
> >>                      else
> >> @@ -4582,7 +4587,10 @@ static void run_state_machine(struct tcpm_port *port)
> >>                      tcpm_set_current_limit(port,
> >>                                             tcpm_get_current_limit(port),
> >>                                             5000);
> >> -                    tcpm_set_charge(port, true);
> >> +                    if (pdo_max_current(port->snk_pdo[0]))
> >> +                            tcpm_set_charge(port, true);
> >> +                    else
> >> +                            tcpm_log(port, "Not require power from Source");
> >
> > Shouldn't you still always call tcpm_set_charge()?
> >
> >          tcpm_set_charge(port, pdo_max_current(port->snk_pdo[0]));
> >
> 
> I think so, something like
>         tcpm_set_charge(port, !!pdo_max_current(port->snk_pdo[0]));

I assume the sink path is already closed before tcpm_set_charge(). But
this way of handling is also okay for me. Will send out v2 later.

Thanks,
Xu Yang

> 
> Guenter
> 
> > I think we need to wait for comments from Guenter. I don't know this
> > driver well enough.
> >
> > thanks,
> >





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux