diff options
author | Hans de Goede <hdegoede@redhat.com> | 2013-10-08 21:58:07 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2013-10-22 16:28:49 +0200 |
commit | 1294ca797c6bee39d4dbc3e92010873ce4047e0e (patch) | |
tree | 8780bb551509105c0ab7a9b066633e32993cbb22 /hw/usb/host-libusb.c | |
parent | 5af35d7feccaa7d26b72c6c3d14116421d736b36 (diff) | |
download | qemu-1294ca797c6bee39d4dbc3e92010873ce4047e0e.zip qemu-1294ca797c6bee39d4dbc3e92010873ce4047e0e.tar.gz qemu-1294ca797c6bee39d4dbc3e92010873ce4047e0e.tar.bz2 |
usb-host-libusb: Configuration 0 may be a valid configuration
Quoting from: linux/Documentation/ABI/stable/sysfs-bus-usb:
Note that some devices, in violation of the USB spec, have a
configuration with a value equal to 0. Writing 0 to
bConfigurationValue for these devices will install that
configuration, rather then unconfigure the device.
So don't compare the configuration value against 0 to check for unconfigured
devices, instead check for a LIBUSB_ERROR_NOT_FOUND return from
libusb_get_active_config_descriptor().
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb/host-libusb.c')
-rw-r--r-- | hw/usb/host-libusb.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 428c7c5..35bae55 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -992,15 +992,14 @@ static int usb_host_claim_interfaces(USBHostDevice *s, int configuration) udev->ninterfaces = 0; udev->configuration = 0; - if (configuration == 0) { - /* address state - ignore */ - return USB_RET_SUCCESS; - } - usb_host_detach_kernel(s); rc = libusb_get_active_config_descriptor(s->dev, &conf); if (rc != 0) { + if (rc == LIBUSB_ERROR_NOT_FOUND) { + /* address state - ignore */ + return USB_RET_SUCCESS; + } return USB_RET_STALL; } |