ChangeSet 1.831.15.7, 2002/12/06 19:42:39-06:00, [EMAIL PROTECTED]

[PATCH] USB: initial attempt at Treo 300 support for the visor driver

Thanks to Troy Benjegerdes and Jason Carnahan for first cuts at this...


diff -Nru a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
--- a/drivers/usb/serial/visor.c        Mon Dec  9 11:41:27 2002
+++ b/drivers/usb/serial/visor.c        Mon Dec  9 11:41:27 2002
@@ -175,6 +175,7 @@
 static void visor_set_termios  (struct usb_serial_port *port, struct termios 
*old_termios);
 static void visor_write_bulk_callback  (struct urb *urb, struct pt_regs *regs);
 static void visor_read_bulk_callback   (struct urb *urb, struct pt_regs *regs);
+static void visor_read_int_callback    (struct urb *urb, struct pt_regs *regs);
 static int  clie_3_5_startup   (struct usb_serial *serial);
 
 
@@ -232,9 +233,9 @@
 /* All of the device info needed for the Handspring Visor, and Palm 4.0 devices */
 static struct usb_serial_device_type handspring_device = {
        .owner =                THIS_MODULE,
-       .name =                 "Handspring Visor / Palm 4.0 / Cli� 4.x",
+       .name =                 "Handspring Visor / Treo / Palm 4.0 / Cli� 4.x",
        .id_table =             id_table,
-       .num_interrupt_in =     0,
+       .num_interrupt_in =     NUM_DONT_CARE,
        .num_bulk_in =          2,
        .num_bulk_out =         2,
        .num_ports =            2,
@@ -252,6 +253,7 @@
        .chars_in_buffer =      visor_chars_in_buffer,
        .write_bulk_callback =  visor_write_bulk_callback,
        .read_bulk_callback =   visor_read_bulk_callback,
+       .read_int_callback =    visor_read_int_callback,
 };
 
 /* device info for the Sony Clie OS version 3.5 */
@@ -320,9 +322,20 @@
                           port->read_urb->transfer_buffer_length,
                           visor_read_bulk_callback, port);
        result = usb_submit_urb(port->read_urb, GFP_KERNEL);
-       if (result)
-               err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
+       if (result) {
+               err("%s - failed submitting read urb, error %d",
+                   __FUNCTION__, result);
+               goto exit;
+       }
        
+       if (port->interrupt_in_urb) {
+               dbg("%s - adding interrupt input for treo", __FUNCTION__);
+               result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
+               if (result)
+                       err("%s - failed submitting interrupt urb, error %d",
+                           __FUNCTION__, result);
+       }
+exit:  
        return result;
 }
 
@@ -358,6 +371,9 @@
                }
                /* shutdown our bulk read */
                usb_unlink_urb (port->read_urb);
+
+               if (port->interrupt_in_urb)
+                       usb_unlink_urb (port->interrupt_in_urb);
        }
        /* Uncomment the following line if you want to see some statistics in your 
syslog */
        /* info ("Bytes In = %d  Bytes Out = %d", bytes_in, bytes_out); */
@@ -523,6 +539,43 @@
        return;
 }
 
+static void visor_read_int_callback (struct urb *urb, struct pt_regs *regs)
+{
+       int result;
+
+       switch (urb->status) {
+       case 0:
+               /* success */
+               break;
+       case -ECONNRESET:
+       case -ENOENT:
+       case -ESHUTDOWN:
+               /* this urb is terminated, clean up */
+               dbg("%s - urb shutting down with status: %d",
+                   __FUNCTION__, urb->status);
+               return;
+       default:
+               dbg("%s - nonzero urb status received: %d",
+                   __FUNCTION__, urb->status);
+               goto exit;
+       }
+
+       /*
+        * This information is still unknown what it can be used for.
+        * If anyone has an idea, please let the author know...
+        *
+        * Rumor has it this endpoint is used to notify when data
+        * is ready to be read from the bulk ones.
+        */
+       usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length,
+                              urb->transfer_buffer);
+
+exit:
+       result = usb_submit_urb (urb, GFP_ATOMIC);
+       if (result)
+               err("%s - Error %d submitting interrupt urb",
+                   __FUNCTION__, result);
+}
 
 static void visor_throttle (struct usb_serial_port *port)
 {


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to