From b57aedfd2cb169c10f9800ea13eba1da1bee88d7 Mon Sep 17 00:00:00 2001 From: Gerd von Egidy Date: Mon, 2 Jun 2008 10:57:20 +0000 Subject: [PATCH] libftdi: (gerd) tolerate EBUSY when setting configuration (EBUSY will be returned for the second interface if the first one is already open) compile with async mode --- libftdi.spec | 2 +- src/ftdi.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libftdi.spec b/libftdi.spec index 52ba933..18a9b50 100644 --- a/libftdi.spec +++ b/libftdi.spec @@ -26,7 +26,7 @@ Header files and static libraries for libftdi %setup -q %build -./configure --prefix=%{prefix} +./configure --prefix=%{prefix} --with-async-mode make %install diff --git a/src/ftdi.c b/src/ftdi.c index 56fea0c..e269021 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -360,7 +360,13 @@ 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)) { + // set configuration (needed especially for windows) + // tolerate EBUSY: one device with one configuration, but two interfaces + // and libftdi sessions to both interfaces (e.g. FT2232) + if (dev->descriptor.bNumConfigurations > 0 && + usb_set_configuration(ftdi->usb_dev, dev->config[0].bConfigurationValue) && + errno != EBUSY) + { usb_close (ftdi->usb_dev); if (detach_errno == EPERM) { ftdi_error_return(-8, "inappropriate permissions on device!"); -- 1.7.1