This is a sanely looking set of bugfixes for tiglusb from Romain Lievin.

-- Pete

diff -urp -X dontdiff linux-2.4.27-pre2/Documentation/usb/silverlink.txt 
linux-2.4.27-pre2-usb/Documentation/usb/silverlink.txt
--- linux-2.4.27-pre2/Documentation/usb/silverlink.txt  2002-11-28 15:53:08.000000000 
-0800
+++ linux-2.4.27-pre2-usb/Documentation/usb/silverlink.txt      2004-05-15 
23:06:11.000000000 -0700
@@ -8,7 +8,7 @@ Homepage: http://lpg.ticalc.org/prj_usb
 INTRODUCTION:
 
 This is a driver for the TI-GRAPH LINK USB (aka SilverLink) cable, a cable 
-designed by TI for connecting their TI8x/9x calculators to a computer 
+designed by TI for connecting their TI8x/9x graphing handhelds to a computer 
 (PC or Mac usually).
 
 If you need more information, please visit the 'SilverLink drivers' homepage 
@@ -16,10 +16,8 @@ at the above URL.
 
 WHAT YOU NEED:
 
-A TI calculator of course and a program capable to communicate with your 
-calculator.
-TiLP will work for sure (since I am his developer !). yal92 may be able to use
-it by changing tidev for tiglusb (may require some hacking...).
+A TI calculator/handheld of course and a program capable to communicate with 
+your calculator. A good choice is TiLP (http://www.tilp.info).
 
 HOW TO USE IT:
 
@@ -58,14 +56,19 @@ MODULE PARAMETERS:
 QUIRKS:
 
 The following problem seems to be specific to the link cable since it appears 
-on all platforms (Linux, Windows, Mac OS-X). 
+on all platforms (Linux, Windows, Mac OS-X). A guy told me it was a common but
+weird behaviour with Cypress microcontrollers (it uses an CY7C64013).
 
-In some very particular cases, the driver returns with success but
+In some very particular cases, the driver returns with success (no error) but
 without any data. The application should retry a read operation at least once.
 
+This problem and the need to issue IOCTL_TIUSB_RESET_PIPES before doing any
+packet transfer (like TI's software do) make this driver difficult to use in 
+pure raw access.
+
 HOW TO CONTACT US:
 
-You can email me at [EMAIL PROTECTED] Please prefix the subject line
+You can email me at [EMAIL PROTECTED] Please prefix the subject line
 with "TIGLUSB: " so that I am certain to notice your message.
 You can also mail JB at [EMAIL PROTECTED]: he has written the first release of 
 this driver but he better knows the Mac OS-X driver.
@@ -73,4 +76,4 @@ this driver but he better knows the Mac 
 CREDITS:
 
 The code is based on dabusb.c, printer.c and scanner.c !
-The driver has been developed independantly of Texas Instruments.
+The driver has been developed without any support from Texas Instruments Inc.
diff -urp -X dontdiff linux-2.4.27-pre2/drivers/usb/tiglusb.c 
linux-2.4.27-pre2-usb/drivers/usb/tiglusb.c
--- linux-2.4.27-pre2/drivers/usb/tiglusb.c     2003-06-13 07:51:37.000000000 -0700
+++ linux-2.4.27-pre2-usb/drivers/usb/tiglusb.c 2004-05-15 23:06:11.000000000 -0700
@@ -3,7 +3,7 @@
  * tiglusb -- Texas Instruments' USB GraphLink (aka SilverLink) driver.
  * Target: Texas Instruments graphing calculators (http://lpg.ticalc.org).
  *
- * Copyright (C) 2001-2002:
+ * Copyright (C) 2001-2004:
  *   Romain Lievin <[EMAIL PROTECTED]>
  *   Julien BLACHE <[EMAIL PROTECTED]>
  * under the terms of the GNU General Public License.
@@ -14,11 +14,14 @@
  * and the website at:  http://lpg.ticalc.org/prj_usb/
  * for more info.
  *
+ * History:
  *   1.0x, Romain & Julien: initial submit.
  *   1.03, Greg Kroah: modifications.
  *   1.04, Julien: clean-up & fixes; Romain: 2.4 backport.
  *   1.05, Randy Dunlap: bug fix with the timeout parameter (divide-by-zero).
  *   1.06, Romain: synched with 2.5, version/firmware changed (confusing).
+ *   1.07, Romain: fixed bad use of usb_clear_halt (invalid argument);
+ *          timeout argument checked in ioctl + clean-up.
  */
 
 #include <linux/module.h>
@@ -38,8 +41,8 @@
 /*
  * Version Information
  */
-#define DRIVER_VERSION "1.06"
-#define DRIVER_AUTHOR  "Romain Lievin <[EMAIL PROTECTED]> & Julien Blache <[EMAIL 
PROTECTED]>"
+#define DRIVER_VERSION "1.07"
+#define DRIVER_AUTHOR  "Romain Lievin <[EMAIL PROTECTED]> & Julien Blache <[EMAIL 
PROTECTED]>"
 #define DRIVER_DESC    "TI-GRAPH LINK USB (aka SilverLink) driver"
 #define DRIVER_LICENSE "GPL"
 
@@ -74,15 +77,15 @@ clear_pipes (struct usb_device *dev)
 {
        unsigned int pipe;
 
-       pipe = usb_sndbulkpipe (dev, 1);
-       if (usb_clear_halt (dev, usb_pipeendpoint (pipe))) {
-               err ("clear_pipe (r), request failed");
+       pipe = usb_sndbulkpipe (dev, 2);
+       if (usb_clear_halt (dev, pipe)) {
+               err ("clear_pipe (w), request failed");
                return -1;
        }
 
-       pipe = usb_sndbulkpipe (dev, 2);
-       if (usb_clear_halt (dev, usb_pipeendpoint (pipe))) {
-               err ("clear_pipe (w), request failed");
+       pipe = usb_rcvbulkpipe (dev, 1);
+       if (usb_clear_halt (dev, pipe)) {
+               err ("clear_pipe (r), request failed");
                return -1;
        }
 
@@ -181,15 +184,14 @@ tiglusb_read (struct file *filp, char *b
        result = usb_bulk_msg (s->dev, pipe, buffer, bytes_to_read,
                               &bytes_read, HZ * 10 / timeout);
        if (result == -ETIMEDOUT) {     /* NAK */
-               ret = result;
-               if (!bytes_read) {
+               if (!bytes_read)
                        dbg ("quirk !");
-               }
                warn ("tiglusb_read, NAK received.");
+               ret = result;
                goto out;
        } else if (result == -EPIPE) {  /* STALL -- shouldn't happen */
                warn ("clear_halt request to remove STALL condition.");
-               if (usb_clear_halt (s->dev, usb_pipeendpoint (pipe)))
+               if (usb_clear_halt (s->dev, pipe))
                        err ("clear_halt, request failed");
                clear_device (s->dev);
                ret = result;
@@ -244,7 +246,7 @@ tiglusb_write (struct file *filp, const 
                goto out;
        } else if (result == -EPIPE) {  /* STALL -- shouldn't happen */
                warn ("clear_halt request to remove STALL condition.");
-               if (usb_clear_halt (s->dev, usb_pipeendpoint (pipe)))
+               if (usb_clear_halt (s->dev, pipe))
                        err ("clear_halt, request failed");
                clear_device (s->dev);
                ret = result;
@@ -284,15 +286,16 @@ tiglusb_ioctl (struct inode *inode, stru
 
        switch (cmd) {
        case IOCTL_TIUSB_TIMEOUT:
-               timeout = arg;  // timeout value in tenth of seconds
+               if (arg > 0)
+                       timeout = (int)arg;
+               else
+                       ret = -EINVAL;
                break;
        case IOCTL_TIUSB_RESET_DEVICE:
-               dbg ("IOCTL_TIGLUSB_RESET_DEVICE");
                if (clear_device (s->dev))
                        ret = -EIO;
                break;
        case IOCTL_TIUSB_RESET_PIPES:
-               dbg ("IOCTL_TIGLUSB_RESET_PIPES");
                if (clear_pipes (s->dev))
                        ret = -EIO;
                break;
@@ -430,7 +433,7 @@ static struct usb_driver tiglusb_driver 
 
 #ifndef MODULE
 /*
- * You can use 'tiusb=timeout'
+ * You can use 'tiusb=timeout' to set timeout.
  */
 static int __init
 tiglusb_setup (char *str)
@@ -440,10 +443,11 @@ tiglusb_setup (char *str)
        str = get_options (str, ARRAY_SIZE (ints), ints);
 
        if (ints[0] > 0) {
-               timeout = ints[1];
+               if (ints[1] > 0)
+                       timeout = ints[1];
+               else
+                       info ("tiglusb: wrong timeout value (0), using default 
value.");
        }
-       if (!timeout)
-               timeout = TIMAXTIME;
 
        return 1;
 }
@@ -466,8 +470,6 @@ tiglusb_init (void)
                init_waitqueue_head (&s->wait);
                init_waitqueue_head (&s->remove_ok);
        }
-       if (timeout <= 0)
-               timeout = TIMAXTIME;
 
        /* register device */
        if (register_chrdev (TIUSB_MAJOR, "tiglusb", &tiglusb_fops)) {
@@ -487,12 +489,6 @@ tiglusb_init (void)
 
        info (DRIVER_DESC ", version " DRIVER_VERSION);
 
-       if (timeout <= 0)
-               timeout = TIMAXTIME;
-
-       if (!timeout)
-               timeout = TIMAXTIME;
-
        return 0;
 }
 


-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to