Am Freitag, den 20.05.2011, 17:37 +0200 schrieb Thomas Jarosch: > On Friday, 20. May 2011 17:02:05 Thomas Klose wrote: > > I hope it is not to late for a patch. Here is my suggestion for a more > > flexible module-unloading behavior. The enumeration makes it extensible > > for future needs, e.g. "AUTO_REATTACH_SIO_MODULE". > > I'll include it in 0.19 if you send me an unmangled patch on Monday > (read: your mailer messed up the patch). Just attach it. > > It should also apply to libftdi 1.x without hassle IMHO.
Great. Thanks! -- libftdi - see http://www.intra2net.com/en/developer/libftdi for details. To unsubscribe send a mail to [email protected]
>From 90140842343e6aa55e3671f96293e6ec4d329b20 Mon Sep 17 00:00:00 2001 From: Thomas Klose <[email protected]> Date: Fri, 20 May 2011 16:51:03 +0200 Subject: [PATCH][BUILD] make module-unloading behavior flexible Signed-off-by: Thomas Klose <[email protected]> --- src/ftdi.c | 9 +++++++-- src/ftdi.h | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index e7e91f9..1816ecb 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -123,6 +123,8 @@ int ftdi_init(struct ftdi_context *ftdi) ftdi->eeprom_size = FTDI_DEFAULT_EEPROM_SIZE; + ftdi->module_detach_mode = AUTO_DETACH_SIO_MODULE; + /* All fine. Now allocate the readbuffer */ return ftdi_read_data_set_chunksize(ftdi, 4096); } @@ -471,8 +473,11 @@ int ftdi_usb_open_dev(struct ftdi_context *ftdi, struct usb_device *dev) // if usb_set_configuration() or usb_claim_interface() fails as the // detach operation might be denied and everything still works fine. // Likely scenario is a static ftdi_sio kernel module. - if (usb_detach_kernel_driver_np(ftdi->usb_dev, ftdi->interface) != 0 && errno != ENODATA) - detach_errno = errno; + if (ftdi->module_detach_mode == AUTO_DETACH_SIO_MODULE) + { + if (usb_detach_kernel_driver_np(ftdi->usb_dev, ftdi->interface) != 0 && errno != ENODATA) + detach_errno = errno; + } #endif #ifdef __WIN32__ diff --git a/src/ftdi.h b/src/ftdi.h index 0d94526..3e7d43d 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -56,6 +56,13 @@ enum ftdi_interface INTERFACE_D = 4 }; +/** Automatic loading / unloading of kernel modules */ +enum ftdi_module_detach_mode +{ + AUTO_DETACH_SIO_MODULE = 0, + DONT_DETACH_SIO_MODULE = 1 +}; + /* Shifting commands IN MPSSE Mode*/ #define MPSSE_WRITE_NEG 0x01 /* Write TDI/DO on negative TCK/SK edge*/ #define MPSSE_BITMODE 0x02 /* Write bits, not bytes */ @@ -216,6 +223,9 @@ struct ftdi_context char *async_usb_buffer; /** Number of URB-structures we can buffer */ unsigned int async_usb_buffer_size; + + /** Defines behavior in case a kernel module is already attached to the device */ + enum ftdi_module_detach_mode module_detach_mode; }; /** -- 1.7.1
