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 we need to wait for comments from Guenter. I don't know this driver well enough. thanks, -- heikki