> -----Original Message----- > From: Xu Yang > Sent: Friday, June 30, 2023 6:53 PM > To: linux@xxxxxxxxxxxx; heikki.krogerus@xxxxxxxxxxxxxxx > Cc: gregkh@xxxxxxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>; linux-usb@xxxxxxxxxxxxxxx; Jun Li <jun.li@xxxxxxx>; > Xu Yang <xu.yang_2@xxxxxxx> > Subject: [PATCH] usb: typec: tcpm: not sink vbus if operational current is 0mA > > 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"); > } > if (port->ams == HARD_RESET) > tcpm_ams_finish(port); > -- > 2.34.1 A gentle ping.