On Wed, 9 Oct 2019, Bastien Nocera wrote: > On Wed, 2019-10-09 at 13:28 -0400, Alan Stern wrote: > <snip> > > No, that's not quite it. > > > > Here's what should happen when the subclass driver is being probed: > > First, call the generic_probe routine, and return immediately if that > > fails. Then call the subclass driver's probe routine. If that gets > > an > > error, fail the probe call but tell the device core that the device > > is > > now bound to the generic driver, not to the subclass driver. > > So, something like that, on top of the existing patches? (I'm not sure > whether device_driver_attach is the correct call to use here). > > - if (udriver->probe) > - return udriver->probe(udev); > - return 0; > + if (!udriver->probe) > + return 0; This test is unnecessary; all drivers must have a probe routine. Otherwise how would they know when they get bound to a device? > + error = udriver->probe(udev); > + if (error == -ENODEV && > + udrv != &usb_generic_driver) No need to test for usb_generic_driver; its probe routine always returns 0. But if you want to include the test anyway, at least don't split the line -- it will all fit in under 80 columns. > + return device_driver_attach(usb_generic_driver.drvwrap.driver, dev); > + return error; I think that's right. A little testing wouldn't hurt. > Anything else in this patch series? I was concerned about the naming > for "generic_init" in patch 2 ("subclass"). Yes; see the suggestions in https://marc.info/?l=linux-usb&m=157063168632242&w=2 Also (I didn't notice this earlier), in patch 1/5 it's not necessary to EXPORT the usb_generic_* routines. They don't get used in the subclass driver, only in usbcore. > If there's nothing, I'll test and respin the patchset with the above > changes tomorrow. Okay, good. Alan Stern