On Tue, Mar 28, 2023 at 04:23:04PM +0800, Li Jun wrote: > Try to get usb role switch from tcpc fwnode if failed to > get role switch from port dev, this is for case the port > for role switch endpoint is located in connector node, > as per connector binding doc, port@0 for HS is required. > > ptn5110: tcpc@50 { > compatible = "nxp,ptn5110"; > ... > status = "okay"; > > connector { > compatible = "usb-c-connector"; > label = "USB-C"; > ... > > ports { > #address-cells = <1>; > #size-cells = <0>; > > port@0 { > reg = <0>; > > typec_conn: endpoint { > remote-endpoint = <&usb2_controller>; > }; > }; > }; > }; > }; > > Signed-off-by: Li Jun <jun.li@xxxxxxx> Reviewed-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > --- > drivers/usb/typec/tcpm/tcpm.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c > index a0d943d78580..f0534bdb4462 100644 > --- a/drivers/usb/typec/tcpm/tcpm.c > +++ b/drivers/usb/typec/tcpm/tcpm.c > @@ -6557,6 +6557,8 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) > port->port_type = port->typec_caps.type; > > port->role_sw = usb_role_switch_get(port->dev); > + if (!port->role_sw) > + port->role_sw = fwnode_usb_role_switch_get(tcpc->fwnode); > if (IS_ERR(port->role_sw)) { > err = PTR_ERR(port->role_sw); > goto out_destroy_wq; > -- > 2.34.1 -- heikki