linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / usb / serial / cypress_m8.c
index ee70fdd..68067fe 100644 (file)
@@ -48,6 +48,7 @@
 /* Code originates and was built up from ftdi_sio, belkin, pl2303 and others. */
 
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/moduleparam.h>
 #include <linux/spinlock.h>
 #include <linux/usb.h>
-#include <linux/usb/serial.h>
 #include <linux/serial.h>
 #include <linux/delay.h>
 #include <asm/uaccess.h>
 
+#include "usb-serial.h"
 #include "cypress_m8.h"
 
 
@@ -97,16 +98,10 @@ static struct usb_device_id id_table_cyphidcomrs232 [] = {
        { }                                             /* Terminating entry */
 };
 
-static struct usb_device_id id_table_nokiaca42v2 [] = {
-       { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
-       { }                                             /* Terminating entry */
-};
-
 static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) },
        { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
        { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
-       { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
        { }                                             /* Terminating entry */
 };
 
@@ -154,7 +149,6 @@ struct cypress_buf {
 /* function prototypes for the Cypress USB to serial device */
 static int  cypress_earthmate_startup  (struct usb_serial *serial);
 static int  cypress_hidcom_startup     (struct usb_serial *serial);
-static int  cypress_ca42v2_startup     (struct usb_serial *serial);
 static void cypress_shutdown           (struct usb_serial *serial);
 static int  cypress_open               (struct usb_serial_port *port, struct file *filp);
 static void cypress_close              (struct usb_serial_port *port, struct file *filp);
@@ -241,34 +235,6 @@ static struct usb_serial_driver cypress_hidcom_device = {
        .write_int_callback =           cypress_write_int_callback,
 };
 
-static struct usb_serial_driver cypress_ca42v2_device = {
-       .driver = {
-               .owner =                THIS_MODULE,
-                .name =                        "nokiaca42v2",
-       },
-       .description =                  "Nokia CA-42 V2 Adapter",
-       .id_table =                     id_table_nokiaca42v2,
-       .num_interrupt_in =             1,
-       .num_interrupt_out =            1,
-       .num_bulk_in =                  NUM_DONT_CARE,
-       .num_bulk_out =                 NUM_DONT_CARE,
-       .num_ports =                    1,
-       .attach =                       cypress_ca42v2_startup,
-       .shutdown =                     cypress_shutdown,
-       .open =                         cypress_open,
-       .close =                        cypress_close,
-       .write =                        cypress_write,
-       .write_room =                   cypress_write_room,
-       .ioctl =                        cypress_ioctl,
-       .set_termios =                  cypress_set_termios,
-       .tiocmget =                     cypress_tiocmget,
-       .tiocmset =                     cypress_tiocmset,
-       .chars_in_buffer =              cypress_chars_in_buffer,
-       .throttle =                     cypress_throttle,
-       .unthrottle =                   cypress_unthrottle,
-       .read_int_callback =            cypress_read_int_callback,
-       .write_int_callback =           cypress_write_int_callback,
-};
 
 /*****************************************************************************
  * Cypress serial helper functions
@@ -320,12 +286,6 @@ static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_m
                                                    __FUNCTION__);
                                                new_baudrate = priv->baud_rate;
                                        }
-                               } else if (priv->chiptype == CT_CA42V2) {
-                                       if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
-                                               err("%s - failed setting baud rate, unsupported speed",
-                                                   __FUNCTION__);
-                                               new_baudrate = priv->baud_rate;
-                                       }
                                } else if (priv->chiptype == CT_GENERIC) {
                                        if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
                                                err("%s - failed setting baud rate, unsupported speed",
@@ -475,10 +435,11 @@ static int generic_startup (struct usb_serial *serial)
 
        dbg("%s - port %d", __FUNCTION__, serial->port[0]->number);
 
-       priv = kzalloc(sizeof (struct cypress_private), GFP_KERNEL);
+       priv = kmalloc(sizeof (struct cypress_private), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
 
+       memset(priv, 0x00, sizeof (struct cypress_private));
        spin_lock_init(&priv->lock);
        priv->buf = cypress_buf_alloc(CYPRESS_BUF_SIZE);
        if (priv->buf == NULL) {
@@ -539,25 +500,6 @@ static int cypress_hidcom_startup (struct usb_serial *serial)
 } /* cypress_hidcom_startup */
 
 
-static int cypress_ca42v2_startup (struct usb_serial *serial)
-{
-       struct cypress_private *priv;
-
-       dbg("%s", __FUNCTION__);
-
-       if (generic_startup(serial)) {
-               dbg("%s - Failed setting up port %d", __FUNCTION__,
-                               serial->port[0]->number);
-               return 1;
-       }
-
-       priv = usb_get_serial_port_data(serial->port[0]);
-       priv->chiptype = CT_CA42V2;
-
-       return 0;
-} /* cypress_ca42v2_startup */
-
-
 static void cypress_shutdown (struct usb_serial *serial)
 {
        struct cypress_private *priv;
@@ -823,7 +765,7 @@ send:
        priv->bytes_out += count; /* do not count the line control and size bytes */
        spin_unlock_irqrestore(&priv->lock, flags);
 
-       usb_serial_port_softint(port);
+       schedule_work(&port->work);
 } /* cypress_send */
 
 
@@ -1002,10 +944,6 @@ static void cypress_set_termios (struct usb_serial_port *port,
                        *(tty->termios) = tty_std_termios;
                        tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL |
                                CLOCAL;
-               } else if (priv->chiptype == CT_CA42V2) {
-                       *(tty->termios) = tty_std_termios;
-                       tty->termios->c_cflag = B9600 | CS8 | CREAD | HUPCL |
-                               CLOCAL;
                }
                priv->termios_initialized = 1;
        }
@@ -1604,9 +1542,6 @@ static int __init cypress_init(void)
        retval = usb_serial_register(&cypress_hidcom_device);
        if (retval)
                goto failed_hidcom_register;
-       retval = usb_serial_register(&cypress_ca42v2_device);
-       if (retval)
-               goto failed_ca42v2_register;
        retval = usb_register(&cypress_driver);
        if (retval)
                goto failed_usb_register;
@@ -1615,8 +1550,6 @@ static int __init cypress_init(void)
        return 0;
 failed_usb_register:
        usb_deregister(&cypress_driver);
-failed_ca42v2_register:
-       usb_serial_deregister(&cypress_ca42v2_device);
 failed_hidcom_register:
        usb_serial_deregister(&cypress_hidcom_device);
 failed_em_register:
@@ -1633,7 +1566,6 @@ static void __exit cypress_exit (void)
        usb_deregister (&cypress_driver);
        usb_serial_deregister (&cypress_earthmate_device);
        usb_serial_deregister (&cypress_hidcom_device);
-       usb_serial_deregister (&cypress_ca42v2_device);
 }