aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2010-07-27 11:28:42 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-08-10 17:35:43 -0400
commitc4e0b508bcdd1af6b1b3c317042336936173591f (patch)
treef1467854b42e6c171aac7dbe31b0dd864dc09722 /drivers/usb
parent0372a754be9aa43e19fd86c9bc04796d43b55e38 (diff)
USB: accept RNDIS configs if there's no alternative
This patch (as1410) makes a slight change to the strategy used for choosing a default configuration. Currently we skip configs whose first interface is RNDIS, if the kernel wasn't built with the corresponding driver. This risks losing access to the other interfaces in those configs. In addition, if there is only one config then we will end up not configuring the device at all. This changes the logic; now such configurations will be skipped only if there is at least one other config. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Adam Kropelin <akropel1@rochester.rr.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/core/generic.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c
index 9a34ccb0a1c0..69ecd3c92311 100644
--- a/drivers/usb/core/generic.c
+++ b/drivers/usb/core/generic.c
@@ -105,8 +105,10 @@ int usb_choose_configuration(struct usb_device *udev)
105 /* When the first config's first interface is one of Microsoft's 105 /* When the first config's first interface is one of Microsoft's
106 * pet nonstandard Ethernet-over-USB protocols, ignore it unless 106 * pet nonstandard Ethernet-over-USB protocols, ignore it unless
107 * this kernel has enabled the necessary host side driver. 107 * this kernel has enabled the necessary host side driver.
108 * But: Don't ignore it if it's the only config.
108 */ 109 */
109 if (i == 0 && desc && (is_rndis(desc) || is_activesync(desc))) { 110 if (i == 0 && num_configs > 1 && desc &&
111 (is_rndis(desc) || is_activesync(desc))) {
110#if !defined(CONFIG_USB_NET_RNDIS_HOST) && !defined(CONFIG_USB_NET_RNDIS_HOST_MODULE) 112#if !defined(CONFIG_USB_NET_RNDIS_HOST) && !defined(CONFIG_USB_NET_RNDIS_HOST_MODULE)
111 continue; 113 continue;
112#else 114#else