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 <[email protected]>
> > ---
> > 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).