OSDN Git Service

USB: Implement usb_device_match_id()
authorBastien Nocera <hadess@hadess.net>
Wed, 16 Oct 2019 09:39:30 +0000 (11:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 12 Feb 2020 19:01:55 +0000 (11:01 -0800)
Match a usb_device with a table of IDs.

Signed-off-by: Bastien Nocera <hadess@hadess.net>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20191016093933.693-4-hadess@hadess.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/driver.c
drivers/usb/core/usb.h

index d3787d0..6978983 100644 (file)
@@ -800,6 +800,20 @@ 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;
+       }
+
+       return NULL;
+}
+
 static int usb_device_match(struct device *dev, struct device_driver *drv)
 {
        /* devices and interfaces are handled separately */
index bbe2481..f1dc638 100644 (file)
@@ -69,6 +69,8 @@ extern int usb_match_one_id_intf(struct usb_device *dev,
                                 const struct usb_device_id *id);
 extern int usb_match_device(struct usb_device *dev,
                            const struct usb_device_id *id);
+extern const struct usb_device_id *usb_device_match_id(struct usb_device *udev,
+                               const struct usb_device_id *id);
 extern void usb_forced_unbind_intf(struct usb_interface *intf);
 extern void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev);