]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/usb/serial/ftdi_sio.c
[PATCH] USB: ftdi_sio: new IDs for Teratronik devices
[net-next-2.6.git] / drivers / usb / serial / ftdi_sio.c
index 01edd62089913087e78e3c5c7c6707ff2b47b7a1..eb863b3f2d7950d3880ed78472328631ffda9bcd 100644 (file)
@@ -409,6 +409,35 @@ static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88F_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_ELV_UO100_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_ELV_UM100_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_ELV_UR100_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_ELV_ALC8500_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_PYRAMID_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1000PC_PID) },
+       /*
+        * These will probably use user-space drivers.  Uncomment them if
+        * you need them or use the user-specified vendor/product module
+        * parameters (see ftdi_sio.h for the numbers).  Make a fuss if
+        * you think the driver should recognize any of them by default.
+        */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, */
+       /* { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, */
        { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) },
        { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) },
        { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) },
@@ -420,6 +449,7 @@ static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(INTREPID_VID, INTREPID_VALUECAN_PID) },
        { USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
        { USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },
+       { USB_DEVICE(FALCOM_VID, FALCOM_SAMBA_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
        { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
@@ -429,11 +459,27 @@ static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_0_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_1_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_2_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_3_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_4_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) },
+       { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
        { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y6_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y8_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_VCP_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_D2XX_PID) },
        { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_ARTEMIS_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HR_PID) },
+       { USB_DEVICE(KOBIL_VID, KOBIL_CONV_B1_PID) },
+       { USB_DEVICE(KOBIL_VID, KOBIL_CONV_KAAN_PID) },
+       { USB_DEVICE(POSIFLEX_VID, POSIFLEX_PP7000_PID) },
        { },                                    /* Optional parameter entry */
        { }                                     /* Terminating entry */
 };
@@ -445,9 +491,10 @@ static struct usb_driver ftdi_driver = {
        .probe =        usb_serial_probe,
        .disconnect =   usb_serial_disconnect,
        .id_table =     id_table_combined,
+       .no_dynamic_id =        1,
 };
 
-static char *ftdi_chip_name[] = {
+static const char *ftdi_chip_name[] = {
        [SIO] = "SIO",  /* the serial part of FT8U100AX */
        [FT8U232AM] = "FT8U232AM",
        [FT232BM] = "FT232BM",
@@ -521,10 +568,12 @@ static unsigned short int ftdi_232am_baud_to_divisor (int baud);
 static __u32 ftdi_232bm_baud_base_to_divisor (int baud, int base);
 static __u32 ftdi_232bm_baud_to_divisor (int baud);
 
-static struct usb_serial_device_type ftdi_sio_device = {
-       .owner =                THIS_MODULE,
-       .name =                 "FTDI USB Serial Device",
-       .short_name =           "ftdi_sio",
+static struct usb_serial_driver ftdi_sio_device = {
+       .driver = {
+               .owner =        THIS_MODULE,
+               .name =         "ftdi_sio",
+       },
+       .description =          "FTDI USB Serial Device",
        .id_table =             id_table_combined,
        .num_interrupt_in =     0,
        .num_bulk_in =          1,
@@ -877,7 +926,7 @@ static void ftdi_determine_type(struct usb_serial_port *port)
        unsigned interfaces;
 
        /* Assume it is not the original SIO device for now. */
-       priv->baud_base = 48000000 / 16;
+       priv->baud_base = 48000000 / 2;
        priv->write_offset = 0;
 
        version = le16_to_cpu(udev->descriptor.bcdDevice);
@@ -1809,10 +1858,12 @@ static void ftdi_set_termios (struct usb_serial_port *port, struct termios *old_
        } else {
                /* set the baudrate determined before */
                if (change_speed(port)) {
-                       err("%s urb failed to set baurdrate", __FUNCTION__);
+                       err("%s urb failed to set baudrate", __FUNCTION__);
+               }
+               /* Ensure RTS and DTR are raised when baudrate changed from 0 */
+               if ((old_termios->c_cflag & CBAUD) == B0) {
+                       set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
                }
-               /* Ensure  RTS and DTR are raised */
-               set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
        }
 
        /* Set flow control */