libftdi: (tomj) always set usb configuration
authorThomas Jarosch <opensource@intra2net.com>
Fri, 25 Apr 2008 09:55:56 +0000 (09:55 +0000)
committerThomas Jarosch <opensource@intra2net.com>
Fri, 25 Apr 2008 09:55:56 +0000 (09:55 +0000)
ChangeLog
src/ftdi.c

index eccc094..60b4d7d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 New in 0.13
 -----------
+* Always set usb configuration (Mike Frysinger)
 * Improved libusb-win32 support (Mike Frysinger)
 
 New in 0.12
index 043d24a..56fea0c 100644 (file)
@@ -341,6 +341,7 @@ int ftdi_usb_get_strings(struct ftdi_context * ftdi, struct usb_device * dev,
     \param dev libusb usb_dev to use
 
     \retval  0: all fine
+    \retval -3: unable to config device
     \retval -4: unable to open device
     \retval -5: unable to claim device
     \retval -6: reset failed
@@ -359,6 +360,15 @@ int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev)
         detach_errno = errno;
 #endif
 
+    if (usb_set_configuration(ftdi->usb_dev, dev->config[0].bConfigurationValue)) {
+        usb_close (ftdi->usb_dev);
+        if (detach_errno == EPERM) {
+            ftdi_error_return(-8, "inappropriate permissions on device!");
+        } else {
+            ftdi_error_return(-3, "unable to set usb configuration. Make sure ftdi_sio is unloaded!");
+        }
+    }
+
     if (usb_claim_interface(ftdi->usb_dev, ftdi->interface) != 0) {
         usb_close (ftdi->usb_dev);
         if (detach_errno == EPERM) {