Call usb_set_configuration() on Windows only
authorUwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Thu, 23 Jul 2009 14:25:27 +0000 (16:25 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Tue, 3 Nov 2009 16:22:33 +0000 (17:22 +0100)
Hello,

working with interface 0 of the FT2232(H) on Linux, I get zillions of
kernel-log messages like:

kernel: usb 6-3: usbfs: interface 1 claimed by ftdi_sio while 'a.out' sets config #1

I understand as follows:
ftdi_usb_open_dev()
first detaches the driver for interface 0
Now  usb_set_configuration() is called, but interface 1 is still attached to
the kernel driver. This results in above kernel log.

Do we really need to set the configuaration? Does any device have a
alternative configuration at all?

I propose appended patch, tested on Linux with and without ftdi_sio.ko
loaded. No other change seen, beside no more kernel log messages like above.

Bye

--
Uwe Bonnes                bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
>From fcb2609f0dae14c5616c34242177959cf226a5f2 Mon Sep 17 00:00:00 2001
From: Uwe Bonnes <bon@hertz.ikp.physik.tu-darmstadt.de>
Date: Thu, 23 Jul 2009 16:21:08 +0200
Subject: usb_set_configuration() not needed on Linux

src/ftdi.c

index 5fce9a6..9f12c41 100644 (file)
@@ -415,6 +415,7 @@ int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev)
         detach_errno = errno;
 #endif
 
+#ifdef __WIN32__
     // 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)
@@ -432,6 +433,7 @@ int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev)
             ftdi_error_return(-3, "unable to set usb configuration. Make sure ftdi_sio is unloaded!");
         }
     }
+#endif
 
     if (usb_claim_interface(ftdi->usb_dev, ftdi->interface) != 0)
     {