diff options
author | Bjørn Mork <bjorn@mork.no> | 2012-05-18 15:27:43 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-06-13 18:40:09 -0400 |
commit | 81df2d594340dcb6d1a02191976be88a1ca8120c (patch) | |
tree | f5a20ebf416c03b41611518d54706019d0c0ffa2 /scripts/mod | |
parent | 7e97243c2080ecae7129e83635227fdebd4feef6 (diff) |
USB: allow match on bInterfaceNumber
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.
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'scripts/mod')
-rw-r--r-- | scripts/mod/file2alias.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 5759751a1f61..7ed6864ef65b 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
@@ -156,7 +156,7 @@ static void device_id_check(const char *modname, const char *device_id, | |||
156 | } | 156 | } |
157 | 157 | ||
158 | /* USB is special because the bcdDevice can be matched against a numeric range */ | 158 | /* USB is special because the bcdDevice can be matched against a numeric range */ |
159 | /* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipN" */ | 159 | /* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipNinN" */ |
160 | static void do_usb_entry(struct usb_device_id *id, | 160 | static void do_usb_entry(struct usb_device_id *id, |
161 | unsigned int bcdDevice_initial, int bcdDevice_initial_digits, | 161 | unsigned int bcdDevice_initial, int bcdDevice_initial_digits, |
162 | unsigned char range_lo, unsigned char range_hi, | 162 | unsigned char range_lo, unsigned char range_hi, |
@@ -210,6 +210,9 @@ static void do_usb_entry(struct usb_device_id *id, | |||
210 | ADD(alias, "ip", | 210 | ADD(alias, "ip", |
211 | id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL, | 211 | id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL, |
212 | id->bInterfaceProtocol); | 212 | id->bInterfaceProtocol); |
213 | ADD(alias, "in", | ||
214 | id->match_flags&USB_DEVICE_ID_MATCH_INT_NUMBER, | ||
215 | id->bInterfaceNumber); | ||
213 | 216 | ||
214 | add_wildcard(alias); | 217 | add_wildcard(alias); |
215 | buf_printf(&mod->dev_table_buf, | 218 | buf_printf(&mod->dev_table_buf, |