From 617b253a350dfccc21fe369ada189bab865eb84a Mon Sep 17 00:00:00 2001 From: Bernd Porr Date: Tue, 17 Nov 2009 23:09:47 +0000 Subject: [PATCH] Fixed an issue with jiffies vs miliseconds for the timeout value of bulk transfers. From 2.6.12 the timing information is miliseconds and not jiffies. However in the driver there was a mix of constants referring to jiffies and miliseconds. I've fixed it and introduced the constant BULK_TIMEOUT in miliseconds for all transfers. --- comedi/drivers/usbdux.c | 16 ++++++++-------- include/linux/usb.h | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/comedi/drivers/usbdux.c b/comedi/drivers/usbdux.c index cd71316f..7fabeee6 100644 --- a/comedi/drivers/usbdux.c +++ b/comedi/drivers/usbdux.c @@ -1,4 +1,4 @@ -#define DRIVER_VERSION "v2.2" +#define DRIVER_VERSION "v2.3" #define DRIVER_AUTHOR "Bernd Porr, BerndPorr@f2s.com" #define DRIVER_DESC "Stirling/ITL USB-DUX -- Bernd.Porr@f2s.com" /* @@ -76,7 +76,7 @@ sampling rate. If you sample two channels you get 4kHz and so on. * 2.0: PWM seems to be stable and is not interfering with the other functions * 2.1: changed PWM API * 2.2: added firmware kernel request to fix an udev problem - * + * 2.3: fixed a timeout bug with newer kernels (>2.6.30) */ // generates loads of debug info @@ -99,7 +99,7 @@ sampling rate. If you sample two channels you get 4kHz and so on. #define BOARDNAME "usbdux" // timeout for the USB-transfer -#define EZTIMEOUT 30 +#define BULK_TIMEOUT 1000 // ms // constants for "firmware" upload and download #define USBDUXSUB_FIRMWARE 0xA0 @@ -787,7 +787,7 @@ static int usbduxsub_start(usbduxsub_t * usbduxsub) // Length 1, // Timeout - EZTIMEOUT); + BULK_TIMEOUT); if (errcode < 0) { printk("comedi_: usbdux_: control msg failed (start)\n"); return errcode; @@ -817,7 +817,7 @@ static int usbduxsub_stop(usbduxsub_t * usbduxsub) // Length 1, // Timeout - EZTIMEOUT); + BULK_TIMEOUT); if (errcode < 0) { printk("comedi_: usbdux: control msg failed (stop)\n"); return errcode; @@ -847,7 +847,7 @@ static int usbduxsub_upload(usbduxsub_t * usbduxsub, // length len, // timeout - EZTIMEOUT); + BULK_TIMEOUT); if (errcode < 0) { printk("comedi_: usbdux: uppload failed\n"); return errcode; @@ -1110,7 +1110,7 @@ static int send_dux_commands(usbduxsub_t * this_usbduxsub, int cmd_type) result = USB_BULK_MSG(this_usbduxsub->usbdev, usb_sndbulkpipe(this_usbduxsub->usbdev, COMMAND_OUT_EP), - this_usbduxsub->dux_commands, SIZEOFDUXBUFFER, &nsent, 10 * HZ); + this_usbduxsub->dux_commands, SIZEOFDUXBUFFER, &nsent, BULK_TIMEOUT); if (result < 0) { printk("comedi%d: could not transmit dux_command to the usb-device, err=%d\n", this_usbduxsub->comedidev->minor, result); } @@ -1127,7 +1127,7 @@ static int receive_dux_commands(usbduxsub_t * this_usbduxsub, int command) result = USB_BULK_MSG(this_usbduxsub->usbdev, usb_rcvbulkpipe(this_usbduxsub->usbdev, COMMAND_IN_EP), - this_usbduxsub->insnBuffer, SIZEINSNBUF, &nrec, 1 * HZ); + this_usbduxsub->insnBuffer, SIZEINSNBUF, &nrec, BULK_TIMEOUT); if (result < 0) { printk("comedi%d: insn: USB error %d while receiving DUX command\n", this_usbduxsub->comedidev->minor, result); return result; diff --git a/include/linux/usb.h b/include/linux/usb.h index 37b58873..ca11ae1d 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -50,13 +50,24 @@ static inline int USB_CONTROL_MSG(struct usb_device *dev, unsigned int pipe, void *data, __u16 size, int millisec_timeout) { return usb_control_msg(dev, pipe, request, requesttype, value, index, - data, size, msecs_to_jiffies(millisec_timeout)); + data, size, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12) + msecs_to_jiffies(millisec_timeout) +#else + millisec_timeout +#endif + ); } static inline int USB_BULK_MSG(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int millisec_timeout) { return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, - msecs_to_jiffies(millisec_timeout)); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12) + msecs_to_jiffies(millisec_timeout) +#else + millisec_timeout +#endif + ); } #else #define USB_CONTROL_MSG usb_control_msg -- 2.26.2