On Wed, 2019-10-09 at 10:36 -0400, Alan Stern wrote: > On Wed, 9 Oct 2019, Bastien Nocera wrote: > > > Match a usb_device with a table of IDs. > > > > Signed-off-by: Bastien Nocera <hadess@xxxxxxxxxx> > > --- > > drivers/usb/core/driver.c | 15 +++++++++++++++ > > include/linux/usb.h | 2 ++ > > 2 files changed, 17 insertions(+) > > > > diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c > > index 863e380a272b..50f92da8afcf 100644 > > --- a/drivers/usb/core/driver.c > > +++ b/drivers/usb/core/driver.c > > @@ -800,6 +800,21 @@ const struct usb_device_id > *usb_match_id(struct usb_interface *interface, > > } > > EXPORT_SYMBOL_GPL(usb_match_id); > > > > +const struct usb_device_id *usb_device_match_id(struct usb_device > *udev, > > + const struct usb_device_id *id) > > +{ > > + if (!id) > > + return NULL; > > + > > + for (; id->idVendor || id->idProduct ; id++) { > > + if (usb_match_device(udev, id)) > > + return id; > > + } > > This would be better if you allowed matching against just the > idVendor > field rather than matching against both. That would make it a lot > simpler to match all Apple devices, for instance. That should already be possible. The matching code is the same as for the USB interface drivers. Something like: static const struct usb_device_id apple_match[] = { { .match_flags = USB_DEVICE_ID_MATCH_VENDOR, .idVendor = USB_VENDOR_APPLE }, {} } And I couldn't use it in patch 5/5, as that's a range of product IDs, not all of them (which would be quite a lot more).