USB: serial: re-implement multi-urb writes in generic driver
[safe/jmp/linux-2.6] / drivers / usb / serial / ipaq.c
index d6231c3..87b1146 100644 (file)
@@ -571,6 +571,8 @@ static struct usb_serial_driver ipaq_device = {
        .description =          "PocketPC PDA",
        .usb_driver =           &ipaq_driver,
        .id_table =             ipaq_id_table,
+       .bulk_in_size =         URBDATA_SIZE,
+       .bulk_out_size =        URBDATA_SIZE,
        .open =                 ipaq_open,
        .close =                ipaq_close,
        .attach =               ipaq_startup,
@@ -628,32 +630,6 @@ static int ipaq_open(struct tty_struct *tty,
                priv->free_len += PACKET_SIZE;
        }
 
-       /*
-        * Lose the small buffers usbserial provides. Make larger ones.
-        */
-
-       kfree(port->bulk_in_buffer);
-       kfree(port->bulk_out_buffer);
-       /* make sure the generic serial code knows */
-       port->bulk_out_buffer = NULL;
-
-       port->bulk_in_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL);
-       if (port->bulk_in_buffer == NULL)
-               goto enomem;
-
-       port->bulk_out_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL);
-       if (port->bulk_out_buffer == NULL) {
-               /* the buffer is useless, free it */
-               kfree(port->bulk_in_buffer);
-               port->bulk_in_buffer = NULL;
-               goto enomem;
-       }
-       port->read_urb->transfer_buffer = port->bulk_in_buffer;
-       port->write_urb->transfer_buffer = port->bulk_out_buffer;
-       port->read_urb->transfer_buffer_length = URBDATA_SIZE;
-       port->bulk_out_size = port->write_urb->transfer_buffer_length
-                                                       = URBDATA_SIZE;
-
        msleep(1000*initial_wait);
 
        /*
@@ -747,7 +723,6 @@ static void ipaq_read_bulk_callback(struct urb *urb)
 
        tty = tty_port_tty_get(&port->port);
        if (tty && urb->actual_length) {
-               tty_buffer_request_room(tty, urb->actual_length);
                tty_insert_flip_string(tty, data, urb->actual_length);
                tty_flip_buffer_push(tty);
                bytes_in += urb->actual_length;