USB: allow match on bInterfaceNumber
From 81df2d594340dcb6d1a02191976be88a1ca8120c upstream. Some composite USB devices provide multiple interfaces with different functions, all using "vendor-specific" for class/subclass/protocol. Another OS use interface numbers to match the driver and interface. It seems these devices are designed with that in mind - using static interface numbers for the different functions. This adds support for matching against the bInterfaceNumber, allowing such devices to be supported without having to resort to testing against interface number whitelists and/or blacklists in the probe. Change-Id: I0f991e507d041bbe12aa87403b9c2e1f0de274c2 Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
This commit is contained in:
committed by
Iliyan Malchev
parent
9626571bd8
commit
dca7fa1b9f
@@ -156,7 +156,7 @@ static void device_id_check(const char *modname, const char *device_id,
|
||||
}
|
||||
|
||||
/* USB is special because the bcdDevice can be matched against a numeric range */
|
||||
/* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipN" */
|
||||
/* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipNinN" */
|
||||
static void do_usb_entry(struct usb_device_id *id,
|
||||
unsigned int bcdDevice_initial, int bcdDevice_initial_digits,
|
||||
unsigned char range_lo, unsigned char range_hi,
|
||||
@@ -210,6 +210,9 @@ static void do_usb_entry(struct usb_device_id *id,
|
||||
ADD(alias, "ip",
|
||||
id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL,
|
||||
id->bInterfaceProtocol);
|
||||
ADD(alias, "in",
|
||||
id->match_flags&USB_DEVICE_ID_MATCH_INT_NUMBER,
|
||||
id->bInterfaceNumber);
|
||||
|
||||
add_wildcard(alias);
|
||||
buf_printf(&mod->dev_table_buf,
|
||||
|
||||
Reference in New Issue
Block a user