On Mon, Jul 25, 2022 at 04:31:29PM -0400, Nícolas F. R. A. Prado wrote: > The fwnode_connection_find_match() function handles two cases: named > references and graph endpoints. In the second case, the match function > passed in is called with the id to check for the match. However, the > match function for the recently added type-c retimer class assumes the > connection has already been matched (which is only true for the first > case). > > The result is that with that change, all type-c nodes with graph > endpoints defer probe indefinitely, independently of having a retimer > connection or not. > > Add the missing check, like is done by the type-c mux and usb role > switch code, to fix the issue. > > Fixes: ddaf8d96f93b ("usb: typec: Add support for retimers") > Signed-off-by: Nícolas F. R. A. Prado <nfraprado@xxxxxxxxxxxxx> Acked-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > --- > > drivers/usb/typec/retimer.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/typec/retimer.c b/drivers/usb/typec/retimer.c > index 051eaa7d2899..2003731f1bee 100644 > --- a/drivers/usb/typec/retimer.c > +++ b/drivers/usb/typec/retimer.c > @@ -36,8 +36,13 @@ static int retimer_fwnode_match(struct device *dev, const void *fwnode) > > static void *typec_retimer_match(struct fwnode_handle *fwnode, const char *id, void *data) > { > - struct device *dev = class_find_device(&retimer_class, NULL, fwnode, > - retimer_fwnode_match); > + struct device *dev; > + > + if (id && !fwnode_property_present(fwnode, id)) > + return NULL; > + > + dev = class_find_device(&retimer_class, NULL, fwnode, > + retimer_fwnode_match); > > return dev ? to_typec_retimer(dev) : ERR_PTR(-EPROBE_DEFER); > } thanks, -- heikki