aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2014-03-04 11:27:38 -0800
committerBen Hutchings <ben@decadent.org.uk>2014-04-02 00:58:58 +0100
commit3e2ac237de6938d922bb865ba3aeb01d357d6e6e (patch)
tree1ae7fdf55e4d670c46a7df8d69dcd4791f117cf3 /drivers/usb/core
parente226584b8f1fb2499b5e884afccff2afcd49f264 (diff)
downloadkernel_samsung_smdk4412-3e2ac237de6938d922bb865ba3aeb01d357d6e6e.zip
kernel_samsung_smdk4412-3e2ac237de6938d922bb865ba3aeb01d357d6e6e.tar.gz
kernel_samsung_smdk4412-3e2ac237de6938d922bb865ba3aeb01d357d6e6e.tar.bz2
usb: Make DELAY_INIT quirk wait 100ms between Get Configuration requests
commit d86db25e53fa69e3e97f3b55dd82a70689787c5d upstream. The DELAY_INIT quirk only reduces the frequency of enumeration failures with the Logitech HD Pro C920 and C930e webcams, but does not quite eliminate them. We have found that adding a delay of 100ms between the first and second Get Configuration request makes the device enumerate perfectly reliable even after several weeks of extensive testing. The reasons for that are anyone's guess, but since the DELAY_INIT quirk already delays enumeration by a whole second, wating for another 10th of that isn't really a big deal for the one other device that uses it, and it will resolve the problems with these webcams. Signed-off-by: Julius Werner <jwerner@chromium.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'drivers/usb/core')
-rw-r--r--drivers/usb/core/config.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
index 78609d3..1e3e211 100644
--- a/drivers/usb/core/config.c
+++ b/drivers/usb/core/config.c
@@ -722,6 +722,10 @@ int usb_get_configuration(struct usb_device *dev)
result = -ENOMEM;
goto err;
}
+
+ if (dev->quirks & USB_QUIRK_DELAY_INIT)
+ msleep(100);
+
result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno,
bigbuffer, length);
if (result < 0) {