From dsd@gentoo.org Wed May 9 16:32:24 2007 From: Daniel Drake Date: Thu, 10 May 2007 00:32:24 +0100 (BST) Subject: USB: add USB_DEVICE_AND_INTERFACE_INFO for device matching To: greg@kroah.com Cc: stern@rowland.harvard.edu Cc: linux-usb-devel@lists.sourceforge.net Message-ID: <20070509233224.E015E7B409F@zog.reactivated.net> Recently, the USB device matching code stopped matching generic interface matches against devices with vendor-specific device class values. Some drivers now need to explicitly match USB device ID's (in addition to generic interface info) to retain the same behaviour as before. This new macro, suggested by Alan Stern, makes the explicit device/interface matching a little simpler for those users. Signed-off-by: Daniel Drake Signed-off-by: Greg Kroah-Hartman --- include/linux/usb.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -755,6 +755,28 @@ static inline int usb_endpoint_is_isoc_o .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, .bInterfaceClass = (cl), \ .bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr) +/** + * USB_DEVICE_AND_INTERFACE_INFO - macro used to describe a specific usb device + * with a class of usb interfaces + * @vend: the 16 bit USB Vendor ID + * @prod: the 16 bit USB Product ID + * @cl: bInterfaceClass value + * @sc: bInterfaceSubClass value + * @pr: bInterfaceProtocol value + * + * This macro is used to create a struct usb_device_id that matches a + * specific device with a specific class of interfaces. + * + * This is especially useful when explicitly matching devices that have + * vendor specific bDeviceClass values, but standards-compliant interfaces. + */ +#define USB_DEVICE_AND_INTERFACE_INFO(vend,prod,cl,sc,pr) \ + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \ + | USB_DEVICE_ID_MATCH_DEVICE, \ + .idVendor = (vend), .idProduct = (prod), \ + .bInterfaceClass = (cl), \ + .bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr) + /* ----------------------------------------------------------------------- */ /* Stuff for dynamic usb ids */