Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * USB FTDI SIO driver
0004  *
0005  *  Copyright (C) 2009 - 2013
0006  *      Johan Hovold (jhovold@gmail.com)
0007  *  Copyright (C) 1999 - 2001
0008  *      Greg Kroah-Hartman (greg@kroah.com)
0009  *          Bill Ryder (bryder@sgi.com)
0010  *  Copyright (C) 2002
0011  *      Kuba Ober (kuba@mareimbrium.org)
0012  *
0013  * See Documentation/usb/usb-serial.rst for more information on using this
0014  * driver
0015  *
0016  * See http://ftdi-usb-sio.sourceforge.net for up to date testing info
0017  *  and extra documentation
0018  *
0019  * Change entries from 2004 and earlier can be found in versions of this
0020  * file in kernel versions prior to the 2.6.24 release.
0021  *
0022  */
0023 
0024 /* Bill Ryder - bryder@sgi.com - wrote the FTDI_SIO implementation */
0025 /* Thanx to FTDI for so kindly providing details of the protocol required */
0026 /*   to talk to the device */
0027 /* Thanx to gkh and the rest of the usb dev group for all code I have
0028    assimilated :-) */
0029 
0030 #include <linux/kernel.h>
0031 #include <linux/errno.h>
0032 #include <linux/slab.h>
0033 #include <linux/tty.h>
0034 #include <linux/tty_driver.h>
0035 #include <linux/tty_flip.h>
0036 #include <linux/module.h>
0037 #include <linux/spinlock.h>
0038 #include <linux/mutex.h>
0039 #include <linux/uaccess.h>
0040 #include <linux/usb.h>
0041 #include <linux/serial.h>
0042 #include <linux/gpio/driver.h>
0043 #include <linux/usb/serial.h>
0044 #include "ftdi_sio.h"
0045 #include "ftdi_sio_ids.h"
0046 
0047 #define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>, Andreas Mohr, Johan Hovold <jhovold@gmail.com>"
0048 #define DRIVER_DESC "USB FTDI Serial Converters Driver"
0049 
0050 
0051 struct ftdi_private {
0052     enum ftdi_chip_type chip_type;
0053                 /* type of device, either SIO or FT8U232AM */
0054     int baud_base;      /* baud base clock for divisor setting */
0055     int custom_divisor; /* custom_divisor kludge, this is for
0056                    baud_base (different from what goes to the
0057                    chip!) */
0058     u16 last_set_data_value; /* the last data state set - needed for doing
0059                   * a break
0060                   */
0061     int flags;      /* some ASYNC_xxxx flags are supported */
0062     unsigned long last_dtr_rts; /* saved modem control outputs */
0063     char prev_status;        /* Used for TIOCMIWAIT */
0064     char transmit_empty;    /* If transmitter is empty or not */
0065     u16 interface;      /* FT2232C, FT2232H or FT4232H port interface
0066                    (0 for FT232/245) */
0067 
0068     speed_t force_baud; /* if non-zero, force the baud rate to
0069                    this value */
0070     int force_rtscts;   /* if non-zero, force RTS-CTS to always
0071                    be enabled */
0072 
0073     unsigned int latency;       /* latency setting in use */
0074     unsigned short max_packet_size;
0075     struct mutex cfg_lock; /* Avoid mess by parallel calls of config ioctl() and change_speed() */
0076 #ifdef CONFIG_GPIOLIB
0077     struct gpio_chip gc;
0078     struct mutex gpio_lock; /* protects GPIO state */
0079     bool gpio_registered;   /* is the gpiochip in kernel registered */
0080     bool gpio_used;     /* true if the user requested a gpio */
0081     u8 gpio_altfunc;    /* which pins are in gpio mode */
0082     u8 gpio_output;     /* pin directions cache */
0083     u8 gpio_value;      /* pin value for outputs */
0084 #endif
0085 };
0086 
0087 /* struct ftdi_sio_quirk is used by devices requiring special attention. */
0088 struct ftdi_sio_quirk {
0089     int (*probe)(struct usb_serial *);
0090     /* Special settings for probed ports. */
0091     void (*port_probe)(struct ftdi_private *);
0092 };
0093 
0094 static int   ftdi_jtag_probe(struct usb_serial *serial);
0095 static int   ftdi_NDI_device_setup(struct usb_serial *serial);
0096 static int   ftdi_stmclite_probe(struct usb_serial *serial);
0097 static int   ftdi_8u2232c_probe(struct usb_serial *serial);
0098 static void  ftdi_USB_UIRT_setup(struct ftdi_private *priv);
0099 static void  ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
0100 
0101 static const struct ftdi_sio_quirk ftdi_jtag_quirk = {
0102     .probe  = ftdi_jtag_probe,
0103 };
0104 
0105 static const struct ftdi_sio_quirk ftdi_NDI_device_quirk = {
0106     .probe  = ftdi_NDI_device_setup,
0107 };
0108 
0109 static const struct ftdi_sio_quirk ftdi_USB_UIRT_quirk = {
0110     .port_probe = ftdi_USB_UIRT_setup,
0111 };
0112 
0113 static const struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
0114     .port_probe = ftdi_HE_TIRA1_setup,
0115 };
0116 
0117 static const struct ftdi_sio_quirk ftdi_stmclite_quirk = {
0118     .probe  = ftdi_stmclite_probe,
0119 };
0120 
0121 static const struct ftdi_sio_quirk ftdi_8u2232c_quirk = {
0122     .probe  = ftdi_8u2232c_probe,
0123 };
0124 
0125 /*
0126  * The 8U232AM has the same API as the sio except for:
0127  * - it can support MUCH higher baudrates; up to:
0128  *   o 921600 for RS232 and 2000000 for RS422/485 at 48MHz
0129  *   o 230400 at 12MHz
0130  *   so .. 8U232AM's baudrate setting codes are different
0131  * - it has a two byte status code.
0132  * - it returns characters every 16ms (the FTDI does it every 40ms)
0133  *
0134  * the bcdDevice value is used to differentiate FT232BM and FT245BM from
0135  * the earlier FT8U232AM and FT8U232BM.  For now, include all known VID/PID
0136  * combinations in both tables.
0137  * FIXME: perhaps bcdDevice can also identify 12MHz FT8U232AM devices,
0138  * but I don't know if those ever went into mass production. [Ian Abbott]
0139  */
0140 
0141 
0142 
0143 /*
0144  * Device ID not listed? Test it using
0145  * /sys/bus/usb-serial/drivers/ftdi_sio/new_id and send a patch or report.
0146  */
0147 static const struct usb_device_id id_table_combined[] = {
0148     { USB_DEVICE(FTDI_VID, FTDI_BRICK_PID) },
0149     { USB_DEVICE(FTDI_VID, FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID) },
0150     { USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) },
0151     { USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) },
0152     { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
0153     { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
0154     { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
0155     { USB_DEVICE(FTDI_VID, FTDI_BM_ATOM_NANO_PID) },
0156     { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) },
0157     { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) },
0158     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
0159     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
0160     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
0161     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_3_PID) },
0162     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_4_PID) },
0163     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_5_PID) },
0164     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_6_PID) },
0165     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_7_PID) },
0166     { USB_DEVICE(FTDI_VID, FTDI_USINT_CAT_PID) },
0167     { USB_DEVICE(FTDI_VID, FTDI_USINT_WKEY_PID) },
0168     { USB_DEVICE(FTDI_VID, FTDI_USINT_RS232_PID) },
0169     { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
0170     { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
0171     { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
0172     { USB_DEVICE(FTDI_VID, FTDI_IPLUS2_PID) },
0173     { USB_DEVICE(FTDI_VID, FTDI_DMX4ALL) },
0174     { USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
0175     { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
0176     { USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
0177     { USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },
0178     { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) ,
0179         .driver_info = (kernel_ulong_t)&ftdi_8u2232c_quirk },
0180     { USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },
0181     { USB_DEVICE(FTDI_VID, FTDI_232H_PID) },
0182     { USB_DEVICE(FTDI_VID, FTDI_FTX_PID) },
0183     { USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
0184     { USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
0185     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
0186     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_SNIFFER_PID) },
0187     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) },
0188     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) },
0189     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) },
0190     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_BOOST_PID) },
0191     { USB_DEVICE(NEWPORT_VID, NEWPORT_AGILIS_PID) },
0192     { USB_DEVICE(NEWPORT_VID, NEWPORT_CONEX_CC_PID) },
0193     { USB_DEVICE(NEWPORT_VID, NEWPORT_CONEX_AGP_PID) },
0194     { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
0195     { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
0196     { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
0197     { USB_DEVICE(FTDI_VID, FTDI_TAGSYS_LP101_PID) },
0198     { USB_DEVICE(FTDI_VID, FTDI_TAGSYS_P200X_PID) },
0199     { USB_DEVICE(FTDI_VID, FTDI_LENZ_LIUSB_PID) },
0200     { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
0201     { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
0202     { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) },
0203     { USB_DEVICE(FTDI_VID, FTDI_XF_633_PID) },
0204     { USB_DEVICE(FTDI_VID, FTDI_XF_631_PID) },
0205     { USB_DEVICE(FTDI_VID, FTDI_XF_635_PID) },
0206     { USB_DEVICE(FTDI_VID, FTDI_XF_640_PID) },
0207     { USB_DEVICE(FTDI_VID, FTDI_XF_642_PID) },
0208     { USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) },
0209     { USB_DEVICE(FTDI_VID, FTDI_URBAN_0_PID) },
0210     { USB_DEVICE(FTDI_VID, FTDI_URBAN_1_PID) },
0211     { USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) },
0212     { USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) },
0213     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_0_PID) },
0214     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_1_PID) },
0215     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_2_PID) },
0216     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_3_PID) },
0217     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) },
0218     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) },
0219     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) },
0220     { USB_DEVICE(FTDI_VID, FTDI_R2000KU_TRUE_RNG) },
0221     { USB_DEVICE(FTDI_VID, FTDI_VARDAAN_PID) },
0222     { USB_DEVICE(FTDI_VID, FTDI_AUTO_M3_OP_COM_V2_PID) },
0223     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0100_PID) },
0224     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0101_PID) },
0225     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0102_PID) },
0226     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0103_PID) },
0227     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0104_PID) },
0228     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0105_PID) },
0229     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0106_PID) },
0230     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0107_PID) },
0231     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0108_PID) },
0232     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0109_PID) },
0233     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010A_PID) },
0234     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010B_PID) },
0235     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010C_PID) },
0236     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010D_PID) },
0237     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010E_PID) },
0238     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010F_PID) },
0239     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0110_PID) },
0240     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0111_PID) },
0241     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0112_PID) },
0242     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0113_PID) },
0243     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0114_PID) },
0244     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0115_PID) },
0245     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0116_PID) },
0246     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0117_PID) },
0247     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0118_PID) },
0248     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0119_PID) },
0249     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011A_PID) },
0250     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011B_PID) },
0251     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011C_PID) },
0252     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011D_PID) },
0253     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011E_PID) },
0254     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011F_PID) },
0255     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0120_PID) },
0256     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0121_PID) },
0257     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0122_PID) },
0258     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0123_PID) },
0259     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0124_PID) },
0260     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0125_PID) },
0261     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0126_PID) },
0262     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0127_PID) },
0263     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0128_PID) },
0264     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0129_PID) },
0265     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012A_PID) },
0266     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012B_PID) },
0267     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012C_PID) },
0268     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012D_PID) },
0269     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012E_PID) },
0270     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012F_PID) },
0271     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0130_PID) },
0272     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0131_PID) },
0273     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0132_PID) },
0274     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0133_PID) },
0275     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0134_PID) },
0276     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0135_PID) },
0277     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0136_PID) },
0278     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0137_PID) },
0279     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0138_PID) },
0280     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0139_PID) },
0281     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013A_PID) },
0282     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013B_PID) },
0283     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013C_PID) },
0284     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013D_PID) },
0285     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013E_PID) },
0286     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013F_PID) },
0287     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0140_PID) },
0288     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0141_PID) },
0289     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0142_PID) },
0290     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0143_PID) },
0291     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0144_PID) },
0292     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0145_PID) },
0293     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0146_PID) },
0294     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0147_PID) },
0295     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0148_PID) },
0296     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0149_PID) },
0297     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014A_PID) },
0298     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014B_PID) },
0299     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014C_PID) },
0300     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014D_PID) },
0301     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014E_PID) },
0302     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014F_PID) },
0303     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0150_PID) },
0304     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0151_PID) },
0305     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0152_PID) },
0306     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0153_PID) },
0307     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0154_PID) },
0308     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0155_PID) },
0309     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0156_PID) },
0310     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0157_PID) },
0311     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0158_PID) },
0312     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0159_PID) },
0313     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015A_PID) },
0314     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015B_PID) },
0315     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015C_PID) },
0316     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015D_PID) },
0317     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015E_PID) },
0318     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015F_PID) },
0319     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0160_PID) },
0320     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0161_PID) },
0321     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0162_PID) },
0322     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0163_PID) },
0323     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0164_PID) },
0324     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0165_PID) },
0325     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0166_PID) },
0326     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0167_PID) },
0327     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0168_PID) },
0328     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0169_PID) },
0329     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016A_PID) },
0330     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016B_PID) },
0331     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016C_PID) },
0332     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016D_PID) },
0333     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016E_PID) },
0334     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016F_PID) },
0335     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0170_PID) },
0336     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0171_PID) },
0337     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0172_PID) },
0338     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0173_PID) },
0339     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0174_PID) },
0340     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0175_PID) },
0341     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0176_PID) },
0342     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0177_PID) },
0343     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0178_PID) },
0344     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0179_PID) },
0345     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017A_PID) },
0346     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017B_PID) },
0347     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017C_PID) },
0348     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017D_PID) },
0349     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017E_PID) },
0350     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017F_PID) },
0351     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0180_PID) },
0352     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0181_PID) },
0353     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0182_PID) },
0354     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0183_PID) },
0355     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0184_PID) },
0356     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0185_PID) },
0357     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0186_PID) },
0358     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0187_PID) },
0359     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0188_PID) },
0360     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0189_PID) },
0361     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018A_PID) },
0362     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018B_PID) },
0363     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018C_PID) },
0364     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018D_PID) },
0365     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018E_PID) },
0366     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018F_PID) },
0367     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0190_PID) },
0368     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0191_PID) },
0369     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0192_PID) },
0370     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0193_PID) },
0371     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0194_PID) },
0372     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0195_PID) },
0373     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0196_PID) },
0374     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0197_PID) },
0375     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0198_PID) },
0376     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0199_PID) },
0377     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019A_PID) },
0378     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019B_PID) },
0379     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019C_PID) },
0380     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019D_PID) },
0381     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019E_PID) },
0382     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019F_PID) },
0383     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A0_PID) },
0384     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A1_PID) },
0385     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A2_PID) },
0386     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A3_PID) },
0387     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A4_PID) },
0388     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A5_PID) },
0389     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A6_PID) },
0390     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A7_PID) },
0391     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A8_PID) },
0392     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A9_PID) },
0393     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AA_PID) },
0394     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AB_PID) },
0395     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AC_PID) },
0396     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AD_PID) },
0397     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AE_PID) },
0398     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AF_PID) },
0399     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B0_PID) },
0400     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B1_PID) },
0401     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B2_PID) },
0402     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B3_PID) },
0403     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B4_PID) },
0404     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B5_PID) },
0405     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B6_PID) },
0406     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B7_PID) },
0407     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B8_PID) },
0408     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B9_PID) },
0409     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BA_PID) },
0410     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BB_PID) },
0411     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BC_PID) },
0412     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BD_PID) },
0413     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BE_PID) },
0414     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BF_PID) },
0415     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C0_PID) },
0416     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C1_PID) },
0417     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C2_PID) },
0418     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C3_PID) },
0419     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C4_PID) },
0420     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C5_PID) },
0421     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C6_PID) },
0422     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C7_PID) },
0423     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C8_PID) },
0424     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C9_PID) },
0425     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CA_PID) },
0426     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CB_PID) },
0427     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CC_PID) },
0428     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CD_PID) },
0429     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CE_PID) },
0430     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CF_PID) },
0431     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D0_PID) },
0432     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D1_PID) },
0433     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D2_PID) },
0434     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D3_PID) },
0435     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D4_PID) },
0436     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D5_PID) },
0437     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D6_PID) },
0438     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D7_PID) },
0439     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D8_PID) },
0440     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D9_PID) },
0441     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DA_PID) },
0442     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DB_PID) },
0443     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DC_PID) },
0444     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DD_PID) },
0445     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DE_PID) },
0446     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DF_PID) },
0447     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E0_PID) },
0448     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E1_PID) },
0449     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E2_PID) },
0450     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E3_PID) },
0451     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E4_PID) },
0452     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E5_PID) },
0453     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E6_PID) },
0454     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E7_PID) },
0455     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E8_PID) },
0456     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E9_PID) },
0457     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EA_PID) },
0458     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EB_PID) },
0459     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EC_PID) },
0460     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01ED_PID) },
0461     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EE_PID) },
0462     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EF_PID) },
0463     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F0_PID) },
0464     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F1_PID) },
0465     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F2_PID) },
0466     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F3_PID) },
0467     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F4_PID) },
0468     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F5_PID) },
0469     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F6_PID) },
0470     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F7_PID) },
0471     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F8_PID) },
0472     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F9_PID) },
0473     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FA_PID) },
0474     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FB_PID) },
0475     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FC_PID) },
0476     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FD_PID) },
0477     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FE_PID) },
0478     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FF_PID) },
0479     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_4701_PID) },
0480     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9300_PID) },
0481     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9301_PID) },
0482     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9302_PID) },
0483     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9303_PID) },
0484     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9304_PID) },
0485     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9305_PID) },
0486     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9306_PID) },
0487     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9307_PID) },
0488     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9308_PID) },
0489     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9309_PID) },
0490     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930A_PID) },
0491     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930B_PID) },
0492     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930C_PID) },
0493     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930D_PID) },
0494     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930E_PID) },
0495     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_930F_PID) },
0496     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9310_PID) },
0497     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9311_PID) },
0498     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9312_PID) },
0499     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9313_PID) },
0500     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9314_PID) },
0501     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9315_PID) },
0502     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9316_PID) },
0503     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9317_PID) },
0504     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9318_PID) },
0505     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_9319_PID) },
0506     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931A_PID) },
0507     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931B_PID) },
0508     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931C_PID) },
0509     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931D_PID) },
0510     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931E_PID) },
0511     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_931F_PID) },
0512     { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) },
0513     { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) },
0514     { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) },
0515     { USB_DEVICE(FTDI_VID, FTDI_USBX_707_PID) },
0516     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2101_PID) },
0517     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2102_PID) },
0518     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2103_PID) },
0519     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2104_PID) },
0520     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2106_PID) },
0521     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2201_1_PID) },
0522     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2201_2_PID) },
0523     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2202_1_PID) },
0524     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2202_2_PID) },
0525     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2203_1_PID) },
0526     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2203_2_PID) },
0527     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_1_PID) },
0528     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_2_PID) },
0529     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_3_PID) },
0530     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_4_PID) },
0531     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_1_PID) },
0532     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_2_PID) },
0533     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_3_PID) },
0534     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_4_PID) },
0535     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_1_PID) },
0536     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_2_PID) },
0537     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_3_PID) },
0538     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_4_PID) },
0539     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_1_PID) },
0540     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_2_PID) },
0541     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_3_PID) },
0542     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_4_PID) },
0543     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_5_PID) },
0544     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_6_PID) },
0545     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_7_PID) },
0546     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_8_PID) },
0547     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_1_PID) },
0548     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_2_PID) },
0549     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_3_PID) },
0550     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_4_PID) },
0551     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_5_PID) },
0552     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_6_PID) },
0553     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_7_PID) },
0554     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_8_PID) },
0555     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_1_PID) },
0556     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_2_PID) },
0557     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_3_PID) },
0558     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_4_PID) },
0559     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_5_PID) },
0560     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_6_PID) },
0561     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_7_PID) },
0562     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_8_PID) },
0563     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_1_PID) },
0564     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_2_PID) },
0565     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_3_PID) },
0566     { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_4_PID) },
0567     { USB_DEVICE(IDTECH_VID, IDTECH_IDT1221U_PID) },
0568     { USB_DEVICE(OCT_VID, OCT_US101_PID) },
0569     { USB_DEVICE(OCT_VID, OCT_DK201_PID) },
0570     { USB_DEVICE(FTDI_VID, FTDI_HE_TIRA1_PID),
0571         .driver_info = (kernel_ulong_t)&ftdi_HE_TIRA1_quirk },
0572     { USB_DEVICE(FTDI_VID, FTDI_USB_UIRT_PID),
0573         .driver_info = (kernel_ulong_t)&ftdi_USB_UIRT_quirk },
0574     { USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_1) },
0575     { USB_DEVICE(FTDI_VID, PROTEGO_R2X0) },
0576     { USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_3) },
0577     { USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_4) },
0578     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E808_PID) },
0579     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E809_PID) },
0580     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80A_PID) },
0581     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80B_PID) },
0582     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80C_PID) },
0583     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80D_PID) },
0584     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80E_PID) },
0585     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80F_PID) },
0586     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E888_PID) },
0587     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E889_PID) },
0588     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88A_PID) },
0589     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88B_PID) },
0590     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88C_PID) },
0591     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88D_PID) },
0592     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88E_PID) },
0593     { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88F_PID) },
0594     { USB_DEVICE(FTDI_VID, FTDI_ELV_UO100_PID) },
0595     { USB_DEVICE(FTDI_VID, FTDI_ELV_UM100_PID) },
0596     { USB_DEVICE(FTDI_VID, FTDI_ELV_UR100_PID) },
0597     { USB_DEVICE(FTDI_VID, FTDI_ELV_ALC8500_PID) },
0598     { USB_DEVICE(FTDI_VID, FTDI_PYRAMID_PID) },
0599     { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1000PC_PID) },
0600     { USB_DEVICE(FTDI_VID, FTDI_IBS_US485_PID) },
0601     { USB_DEVICE(FTDI_VID, FTDI_IBS_PICPRO_PID) },
0602     { USB_DEVICE(FTDI_VID, FTDI_IBS_PCMCIA_PID) },
0603     { USB_DEVICE(FTDI_VID, FTDI_IBS_PK1_PID) },
0604     { USB_DEVICE(FTDI_VID, FTDI_IBS_RS232MON_PID) },
0605     { USB_DEVICE(FTDI_VID, FTDI_IBS_APP70_PID) },
0606     { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) },
0607     { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) },
0608     { USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) },
0609     { USB_DEVICE(FTDI_VID, FTDI_TIAO_UMPA_PID),
0610         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0611     { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
0612         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0613     { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLX_PLUS_PID) },
0614     { USB_DEVICE(FTDI_VID, FTDI_NT_ORION_IO_PID) },
0615     { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONMX_PID) },
0616     { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) },
0617     { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX_PID) },
0618     { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2_PID) },
0619     { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2WI_PID) },
0620     { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX3_PID) },
0621     /*
0622      * ELV devices:
0623      */
0624     { USB_DEVICE(FTDI_ELV_VID, FTDI_ELV_WS300_PID) },
0625     { USB_DEVICE(FTDI_VID, FTDI_ELV_USR_PID) },
0626     { USB_DEVICE(FTDI_VID, FTDI_ELV_MSM1_PID) },
0627     { USB_DEVICE(FTDI_VID, FTDI_ELV_KL100_PID) },
0628     { USB_DEVICE(FTDI_VID, FTDI_ELV_WS550_PID) },
0629     { USB_DEVICE(FTDI_VID, FTDI_ELV_EC3000_PID) },
0630     { USB_DEVICE(FTDI_VID, FTDI_ELV_WS888_PID) },
0631     { USB_DEVICE(FTDI_VID, FTDI_ELV_TWS550_PID) },
0632     { USB_DEVICE(FTDI_VID, FTDI_ELV_FEM_PID) },
0633     { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) },
0634     { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) },
0635     { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) },
0636     { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) },
0637     { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) },
0638     { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) },
0639     { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) },
0640     { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) },
0641     { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) },
0642     { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) },
0643     { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) },
0644     { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) },
0645     { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) },
0646     { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) },
0647     { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) },
0648     { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) },
0649     { USB_DEVICE(FTDI_VID, FTDI_ELV_UTP8_PID) },
0650     { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) },
0651     { USB_DEVICE(FTDI_VID, FTDI_ELV_WS444PC_PID) },
0652     { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) },
0653     { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) },
0654     { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) },
0655     { USB_DEVICE(FTDI_VID, FTDI_ELV_HS485_PID) },
0656     { USB_DEVICE(FTDI_VID, FTDI_ELV_UMS100_PID) },
0657     { USB_DEVICE(FTDI_VID, FTDI_ELV_TFD128_PID) },
0658     { USB_DEVICE(FTDI_VID, FTDI_ELV_FM3RX_PID) },
0659     { USB_DEVICE(FTDI_VID, FTDI_ELV_WS777_PID) },
0660     { USB_DEVICE(FTDI_VID, FTDI_PALMSENS_PID) },
0661     { USB_DEVICE(FTDI_VID, FTDI_IVIUM_XSTAT_PID) },
0662     { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) },
0663     { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) },
0664     { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) },
0665     { USB_DEVICE(FTDI_VID, LINX_FUTURE_1_PID) },
0666     { USB_DEVICE(FTDI_VID, LINX_FUTURE_2_PID) },
0667     { USB_DEVICE(FTDI_VID, FTDI_CCSICDU20_0_PID) },
0668     { USB_DEVICE(FTDI_VID, FTDI_CCSICDU40_1_PID) },
0669     { USB_DEVICE(FTDI_VID, FTDI_CCSMACHX_2_PID) },
0670     { USB_DEVICE(FTDI_VID, FTDI_CCSLOAD_N_GO_3_PID) },
0671     { USB_DEVICE(FTDI_VID, FTDI_CCSICDU64_4_PID) },
0672     { USB_DEVICE(FTDI_VID, FTDI_CCSPRIME8_5_PID) },
0673     { USB_DEVICE(FTDI_VID, INSIDE_ACCESSO) },
0674     { USB_DEVICE(INTREPID_VID, INTREPID_VALUECAN_PID) },
0675     { USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
0676     { USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },
0677     { USB_DEVICE(FALCOM_VID, FALCOM_SAMBA_PID) },
0678     { USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) },
0679     { USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) },
0680     { USB_DEVICE(TTI_VID, TTI_QL355P_PID) },
0681     { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
0682     { USB_DEVICE(ACTON_VID, ACTON_SPECTRAPRO_PID) },
0683     { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) },
0684     { USB_DEVICE(MITSUBISHI_VID, MITSUBISHI_FXUSB_PID) },
0685     { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
0686     { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
0687     { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) },
0688     { USB_DEVICE(BANDB_VID, BANDB_USOPTL4_PID) },
0689     { USB_DEVICE(BANDB_VID, BANDB_USPTL4_PID) },
0690     { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_2_PID) },
0691     { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_PID) },
0692     { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR2_PID) },
0693     { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR_PID) },
0694     { USB_DEVICE(BANDB_VID, BANDB_485USB9F_2W_PID) },
0695     { USB_DEVICE(BANDB_VID, BANDB_485USB9F_4W_PID) },
0696     { USB_DEVICE(BANDB_VID, BANDB_232USB9M_PID) },
0697     { USB_DEVICE(BANDB_VID, BANDB_485USBTB_2W_PID) },
0698     { USB_DEVICE(BANDB_VID, BANDB_485USBTB_4W_PID) },
0699     { USB_DEVICE(BANDB_VID, BANDB_TTL5USB9M_PID) },
0700     { USB_DEVICE(BANDB_VID, BANDB_TTL3USB9M_PID) },
0701     { USB_DEVICE(BANDB_VID, BANDB_ZZ_PROG1_USB_PID) },
0702     { USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) },
0703     { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) },
0704     { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) },
0705     { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_3_PID) },
0706     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_0_PID) },
0707     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_1_PID) },
0708     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_2_PID) },
0709     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_3_PID) },
0710     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_4_PID) },
0711     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) },
0712     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) },
0713     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
0714     { USB_DEVICE(XSENS_VID, XSENS_AWINDA_DONGLE_PID) },
0715     { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) },
0716     { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) },
0717     { USB_DEVICE(XSENS_VID, XSENS_MTDEVBOARD_PID) },
0718     { USB_DEVICE(XSENS_VID, XSENS_MTIUSBCONVERTER_PID) },
0719     { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) },
0720     { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
0721     { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
0722     { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) },
0723     { USB_DEVICE(FTDI_VID, FTDI_MHAM_KW_PID) },
0724     { USB_DEVICE(FTDI_VID, FTDI_MHAM_YS_PID) },
0725     { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y6_PID) },
0726     { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y8_PID) },
0727     { USB_DEVICE(FTDI_VID, FTDI_MHAM_IC_PID) },
0728     { USB_DEVICE(FTDI_VID, FTDI_MHAM_DB9_PID) },
0729     { USB_DEVICE(FTDI_VID, FTDI_MHAM_RS232_PID) },
0730     { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y9_PID) },
0731     { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_VCP_PID) },
0732     { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_D2XX_PID) },
0733     { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) },
0734     { USB_DEVICE(EVOLUTION_VID, EVO_HYBRID_PID) },
0735     { USB_DEVICE(EVOLUTION_VID, EVO_RCM4_PID) },
0736     { USB_DEVICE(FTDI_VID, FTDI_ARTEMIS_PID) },
0737     { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16_PID) },
0738     { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16C_PID) },
0739     { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HR_PID) },
0740     { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HRC_PID) },
0741     { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16IC_PID) },
0742     { USB_DEVICE(KOBIL_VID, KOBIL_CONV_B1_PID) },
0743     { USB_DEVICE(KOBIL_VID, KOBIL_CONV_KAAN_PID) },
0744     { USB_DEVICE(POSIFLEX_VID, POSIFLEX_PP7000_PID) },
0745     { USB_DEVICE(FTDI_VID, FTDI_TTUSB_PID) },
0746     { USB_DEVICE(FTDI_VID, FTDI_ECLO_COM_1WIRE_PID) },
0747     { USB_DEVICE(FTDI_VID, FTDI_WESTREX_MODEL_777_PID) },
0748     { USB_DEVICE(FTDI_VID, FTDI_WESTREX_MODEL_8900F_PID) },
0749     { USB_DEVICE(FTDI_VID, FTDI_PCDJ_DAC2_PID) },
0750     { USB_DEVICE(FTDI_VID, FTDI_RRCIRKITS_LOCOBUFFER_PID) },
0751     { USB_DEVICE(FTDI_VID, FTDI_ASK_RDR400_PID) },
0752     { USB_DEVICE(FTDI_VID, FTDI_NZR_SEM_USB_PID) },
0753     { USB_DEVICE(ICOM_VID, ICOM_ID_1_PID) },
0754     { USB_DEVICE(ICOM_VID, ICOM_OPC_U_UC_PID) },
0755     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C1_PID) },
0756     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C2_PID) },
0757     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2D_PID) },
0758     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VT_PID) },
0759     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VR_PID) },
0760     { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVT_PID) },
0761     { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVR_PID) },
0762     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVT_PID) },
0763     { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVR_PID) },
0764     { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) },
0765     { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
0766     { USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) },
0767     { USB_DEVICE(TESTO_VID, TESTO_1_PID) },
0768     { USB_DEVICE(TESTO_VID, TESTO_3_PID) },
0769     { USB_DEVICE(FTDI_VID, FTDI_GAMMA_SCOUT_PID) },
0770     { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13M_PID) },
0771     { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13S_PID) },
0772     { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13U_PID) },
0773     { USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
0774     { USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID),
0775         .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
0776     { USB_DEVICE(FTDI_VID, FTDI_NDI_SPECTRA_SCU_PID),
0777         .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
0778     { USB_DEVICE(FTDI_VID, FTDI_NDI_FUTURE_2_PID),
0779         .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
0780     { USB_DEVICE(FTDI_VID, FTDI_NDI_FUTURE_3_PID),
0781         .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
0782     { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
0783         .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
0784     { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
0785     { USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) },
0786     { USB_DEVICE(FTDI_VID, RTSYSTEMS_USB_VX8_PID) },
0787     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) },
0788     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) },
0789     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
0790     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57B_PID) },
0791     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29A_PID) },
0792     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29B_PID) },
0793     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29F_PID) },
0794     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62B_PID) },
0795     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S01_PID) },
0796     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63_PID) },
0797     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29C_PID) },
0798     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_81B_PID) },
0799     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_82B_PID) },
0800     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5D_PID) },
0801     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K4Y_PID) },
0802     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5G_PID) },
0803     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S05_PID) },
0804     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_60_PID) },
0805     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_61_PID) },
0806     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62_PID) },
0807     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63B_PID) },
0808     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_64_PID) },
0809     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_65_PID) },
0810     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92_PID) },
0811     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92D_PID) },
0812     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_W5R_PID) },
0813     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_A5R_PID) },
0814     { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_PW1_PID) },
0815     { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
0816     { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
0817     { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
0818     { USB_DEVICE(FTDI_VID, FTDI_ELSTER_UNICOM_PID) },
0819     { USB_DEVICE(FTDI_VID, FTDI_PROPOX_JTAGCABLEII_PID) },
0820     { USB_DEVICE(FTDI_VID, FTDI_PROPOX_ISPCABLEIII_PID) },
0821     { USB_DEVICE(FTDI_VID, CYBER_CORTEX_AV_PID),
0822         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0823     { USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID, 1) },
0824     { USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_OCD_H_PID, 1) },
0825     { USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_TINY_PID, 1) },
0826     { USB_DEVICE_INTERFACE_NUMBER(OLIMEX_VID, OLIMEX_ARM_USB_TINY_H_PID, 1) },
0827     { USB_DEVICE(FIC_VID, FIC_NEO1973_DEBUG_PID),
0828         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0829     { USB_DEVICE(FTDI_VID, FTDI_OOCDLINK_PID),
0830         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0831     { USB_DEVICE(FTDI_VID, LMI_LM3S_DEVEL_BOARD_PID),
0832         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0833     { USB_DEVICE(FTDI_VID, LMI_LM3S_EVAL_BOARD_PID),
0834         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0835     { USB_DEVICE(FTDI_VID, LMI_LM3S_ICDI_BOARD_PID),
0836         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0837     { USB_DEVICE(FTDI_VID, FTDI_TURTELIZER_PID),
0838         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0839     { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
0840     { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_SCU18) },
0841     { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) },
0842 
0843     /* Papouch devices based on FTDI chip */
0844     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_PID) },
0845     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_PID) },
0846     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_PID) },
0847     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_2_PID) },
0848     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_2_PID) },
0849     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_2_PID) },
0850     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485S_PID) },
0851     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485C_PID) },
0852     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_LEC_PID) },
0853     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB232_PID) },
0854     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) },
0855     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_IRAMP_PID) },
0856     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK5_PID) },
0857     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO8x8_PID) },
0858     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) },
0859     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x2_PID) },
0860     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO10x1_PID) },
0861     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO30x3_PID) },
0862     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO60x3_PID) },
0863     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x16_PID) },
0864     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO3x32_PID) },
0865     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK6_PID) },
0866     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_UPSUSB_PID) },
0867     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_MU_PID) },
0868     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SIMUKEY_PID) },
0869     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) },
0870     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMUX_PID) },
0871     { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMSR_PID) },
0872 
0873     { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) },
0874     { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) },
0875     { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) },
0876     { USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) },
0877     { USB_DEVICE(ATMEL_VID, STK541_PID) },
0878     { USB_DEVICE(DE_VID, STB_PID) },
0879     { USB_DEVICE(DE_VID, WHT_PID) },
0880     { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
0881         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0882     { USB_DEVICE(ADI_VID, ADI_GNICEPLUS_PID),
0883         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0884     { USB_DEVICE_AND_INTERFACE_INFO(MICROCHIP_VID, MICROCHIP_USB_BOARD_PID,
0885                     USB_CLASS_VENDOR_SPEC,
0886                     USB_SUBCLASS_VENDOR_SPEC, 0x00) },
0887     { USB_DEVICE_INTERFACE_NUMBER(ACTEL_VID, MICROSEMI_ARROW_SF2PLUS_BOARD_PID, 2) },
0888     { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
0889     { USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
0890         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0891     { USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) },
0892     { USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) },
0893     { USB_DEVICE(FTDI_VID, PI_C865_PID) },
0894     { USB_DEVICE(FTDI_VID, PI_C857_PID) },
0895     { USB_DEVICE(PI_VID, PI_C866_PID) },
0896     { USB_DEVICE(PI_VID, PI_C663_PID) },
0897     { USB_DEVICE(PI_VID, PI_C725_PID) },
0898     { USB_DEVICE(PI_VID, PI_E517_PID) },
0899     { USB_DEVICE(PI_VID, PI_C863_PID) },
0900     { USB_DEVICE(PI_VID, PI_E861_PID) },
0901     { USB_DEVICE(PI_VID, PI_C867_PID) },
0902     { USB_DEVICE(PI_VID, PI_E609_PID) },
0903     { USB_DEVICE(PI_VID, PI_E709_PID) },
0904     { USB_DEVICE(PI_VID, PI_100F_PID) },
0905     { USB_DEVICE(PI_VID, PI_1011_PID) },
0906     { USB_DEVICE(PI_VID, PI_1012_PID) },
0907     { USB_DEVICE(PI_VID, PI_1013_PID) },
0908     { USB_DEVICE(PI_VID, PI_1014_PID) },
0909     { USB_DEVICE(PI_VID, PI_1015_PID) },
0910     { USB_DEVICE(PI_VID, PI_1016_PID) },
0911     { USB_DEVICE(KONDO_VID, KONDO_USB_SERIAL_PID) },
0912     { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
0913     { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
0914         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0915     { USB_DEVICE(FTDI_VID, TI_XDS100V2_PID),
0916         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0917     { USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) },
0918     { USB_DEVICE(FTDI_VID, HAMEG_HO720_PID) },
0919     { USB_DEVICE(FTDI_VID, HAMEG_HO730_PID) },
0920     { USB_DEVICE(FTDI_VID, HAMEG_HO870_PID) },
0921     { USB_DEVICE(FTDI_VID, MJSG_GENERIC_PID) },
0922     { USB_DEVICE(FTDI_VID, MJSG_SR_RADIO_PID) },
0923     { USB_DEVICE(FTDI_VID, MJSG_HD_RADIO_PID) },
0924     { USB_DEVICE(FTDI_VID, MJSG_XM_RADIO_PID) },
0925     { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_ST_PID),
0926         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0927     { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SLITE_PID),
0928         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0929     { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH2_PID),
0930         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0931     { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID),
0932         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0933     { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) },
0934     { USB_DEVICE(FTDI_VID, ACCESIO_COM4SM_PID) },
0935     { USB_DEVICE(IONICS_VID, IONICS_PLUGCOMPUTER_PID),
0936         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0937     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_24_MASTER_WING_PID) },
0938     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_PC_WING_PID) },
0939     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_USB_DMX_PID) },
0940     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MIDI_TIMECODE_PID) },
0941     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MINI_WING_PID) },
0942     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MAXI_WING_PID) },
0943     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MEDIA_WING_PID) },
0944     { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_WING_PID) },
0945     { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) },
0946     { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) },
0947     { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) },
0948     { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) },
0949     { USB_DEVICE(FTDI_VID, FTDI_FHE_PID) },
0950     { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
0951     { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
0952         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0953     { USB_DEVICE(ST_VID, ST_STMCLT_2232_PID),
0954         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0955     { USB_DEVICE(ST_VID, ST_STMCLT_4232_PID),
0956         .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
0957     { USB_DEVICE(FTDI_VID, FTDI_RF_R106) },
0958     { USB_DEVICE(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID),
0959         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
0960     { USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) },
0961     /* Crucible Devices */
0962     { USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) },
0963     { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) },
0964     /* Cressi Devices */
0965     { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) },
0966     /* Brainboxes Devices */
0967     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_001_PID) },
0968     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_012_PID) },
0969     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) },
0970     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) },
0971     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) },
0972     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_159_PID) },
0973     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) },
0974     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) },
0975     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) },
0976     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_4_PID) },
0977     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_5_PID) },
0978     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) },
0979     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) },
0980     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) },
0981     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_235_PID) },
0982     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) },
0983     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) },
0984     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) },
0985     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) },
0986     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) },
0987     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) },
0988     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_320_PID) },
0989     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) },
0990     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) },
0991     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) },
0992     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_357_PID) },
0993     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_1_PID) },
0994     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_2_PID) },
0995     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_3_PID) },
0996     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_1_PID) },
0997     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_2_PID) },
0998     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_1_PID) },
0999     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) },
1000     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) },
1001     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) },
1002     /* ekey Devices */
1003     { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) },
1004     /* Infineon Devices */
1005     { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC1798_PID, 1) },
1006     { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC2X7_PID, 1) },
1007     /* GE Healthcare devices */
1008     { USB_DEVICE(GE_HEALTHCARE_VID, GE_HEALTHCARE_NEMO_TRACKER_PID) },
1009     /* Active Research (Actisense) devices */
1010     { USB_DEVICE(FTDI_VID, ACTISENSE_NDC_PID) },
1011     { USB_DEVICE(FTDI_VID, ACTISENSE_USG_PID) },
1012     { USB_DEVICE(FTDI_VID, ACTISENSE_NGT_PID) },
1013     { USB_DEVICE(FTDI_VID, ACTISENSE_NGW_PID) },
1014     { USB_DEVICE(FTDI_VID, ACTISENSE_D9AC_PID) },
1015     { USB_DEVICE(FTDI_VID, ACTISENSE_D9AD_PID) },
1016     { USB_DEVICE(FTDI_VID, ACTISENSE_D9AE_PID) },
1017     { USB_DEVICE(FTDI_VID, ACTISENSE_D9AF_PID) },
1018     { USB_DEVICE(FTDI_VID, CHETCO_SEAGAUGE_PID) },
1019     { USB_DEVICE(FTDI_VID, CHETCO_SEASWITCH_PID) },
1020     { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_NMEA2000_PID) },
1021     { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_ETHERNET_PID) },
1022     { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_WIFI_PID) },
1023     { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_DISPLAY_PID) },
1024     { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_LITE_PID) },
1025     { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_ANALOG_PID) },
1026     /* Belimo Automation devices */
1027     { USB_DEVICE(FTDI_VID, BELIMO_ZTH_PID) },
1028     { USB_DEVICE(FTDI_VID, BELIMO_ZIP_PID) },
1029     /* ICP DAS I-756xU devices */
1030     { USB_DEVICE(ICPDAS_VID, ICPDAS_I7560U_PID) },
1031     { USB_DEVICE(ICPDAS_VID, ICPDAS_I7561U_PID) },
1032     { USB_DEVICE(ICPDAS_VID, ICPDAS_I7563U_PID) },
1033     { USB_DEVICE(WICED_VID, WICED_USB20706V2_PID) },
1034     { USB_DEVICE(TI_VID, TI_CC3200_LAUNCHPAD_PID),
1035         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1036     { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_BT_USB_PID) },
1037     { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_WL_USB_PID) },
1038     { USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) },
1039     /* EZPrototypes devices */
1040     { USB_DEVICE(EZPROTOTYPES_VID, HJELMSLUND_USB485_ISO_PID) },
1041     { USB_DEVICE_INTERFACE_NUMBER(UNJO_VID, UNJO_ISODEBUG_V1_PID, 1) },
1042     /* Sienna devices */
1043     { USB_DEVICE(FTDI_VID, FTDI_SIENNA_PID) },
1044     { USB_DEVICE(ECHELON_VID, ECHELON_U20_PID) },
1045     /* IDS GmbH devices */
1046     { USB_DEVICE(IDS_VID, IDS_SI31A_PID) },
1047     { USB_DEVICE(IDS_VID, IDS_CM31A_PID) },
1048     /* Omron devices */
1049     { USB_DEVICE(OMRON_VID, OMRON_CS1W_CIF31_PID) },
1050     /* U-Blox devices */
1051     { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) },
1052     { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) },
1053     /* FreeCalypso USB adapters */
1054     { USB_DEVICE(FTDI_VID, FTDI_FALCONIA_JTAG_BUF_PID),
1055         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1056     { USB_DEVICE(FTDI_VID, FTDI_FALCONIA_JTAG_UNBUF_PID),
1057         .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1058     { }                 /* Terminating entry */
1059 };
1060 
1061 MODULE_DEVICE_TABLE(usb, id_table_combined);
1062 
1063 static const char *ftdi_chip_name[] = {
1064     [SIO] = "SIO",  /* the serial part of FT8U100AX */
1065     [FT8U232AM] = "FT8U232AM",
1066     [FT232BM] = "FT232BM",
1067     [FT2232C] = "FT2232C",
1068     [FT232RL] = "FT232RL",
1069     [FT2232H] = "FT2232H",
1070     [FT4232H] = "FT4232H",
1071     [FT232H]  = "FT232H",
1072     [FTX]     = "FT-X"
1073 };
1074 
1075 
1076 /* Used for TIOCMIWAIT */
1077 #define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI | FTDI_RS0_RLSD)
1078 #define FTDI_STATUS_B1_MASK (FTDI_RS_BI)
1079 /* End TIOCMIWAIT */
1080 
1081 /* function prototypes for a FTDI serial converter */
1082 static int  ftdi_sio_probe(struct usb_serial *serial,
1083                     const struct usb_device_id *id);
1084 static int  ftdi_sio_port_probe(struct usb_serial_port *port);
1085 static void ftdi_sio_port_remove(struct usb_serial_port *port);
1086 static int  ftdi_open(struct tty_struct *tty, struct usb_serial_port *port);
1087 static void ftdi_dtr_rts(struct usb_serial_port *port, int on);
1088 static void ftdi_process_read_urb(struct urb *urb);
1089 static int ftdi_prepare_write_buffer(struct usb_serial_port *port,
1090                         void *dest, size_t size);
1091 static void ftdi_set_termios(struct tty_struct *tty,
1092             struct usb_serial_port *port, struct ktermios *old);
1093 static int  ftdi_tiocmget(struct tty_struct *tty);
1094 static int  ftdi_tiocmset(struct tty_struct *tty,
1095             unsigned int set, unsigned int clear);
1096 static int  ftdi_ioctl(struct tty_struct *tty,
1097             unsigned int cmd, unsigned long arg);
1098 static void get_serial_info(struct tty_struct *tty, struct serial_struct *ss);
1099 static int set_serial_info(struct tty_struct *tty,
1100                 struct serial_struct *ss);
1101 static void ftdi_break_ctl(struct tty_struct *tty, int break_state);
1102 static bool ftdi_tx_empty(struct usb_serial_port *port);
1103 static int ftdi_get_modem_status(struct usb_serial_port *port,
1104                         unsigned char status[2]);
1105 
1106 static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base);
1107 static unsigned short int ftdi_232am_baud_to_divisor(int baud);
1108 static u32 ftdi_232bm_baud_base_to_divisor(int baud, int base);
1109 static u32 ftdi_232bm_baud_to_divisor(int baud);
1110 static u32 ftdi_2232h_baud_base_to_divisor(int baud, int base);
1111 static u32 ftdi_2232h_baud_to_divisor(int baud);
1112 
1113 static struct usb_serial_driver ftdi_sio_device = {
1114     .driver = {
1115         .owner =    THIS_MODULE,
1116         .name =     "ftdi_sio",
1117     },
1118     .description =      "FTDI USB Serial Device",
1119     .id_table =     id_table_combined,
1120     .num_ports =        1,
1121     .bulk_in_size =     512,
1122     .bulk_out_size =    256,
1123     .probe =        ftdi_sio_probe,
1124     .port_probe =       ftdi_sio_port_probe,
1125     .port_remove =      ftdi_sio_port_remove,
1126     .open =         ftdi_open,
1127     .dtr_rts =      ftdi_dtr_rts,
1128     .throttle =     usb_serial_generic_throttle,
1129     .unthrottle =       usb_serial_generic_unthrottle,
1130     .process_read_urb = ftdi_process_read_urb,
1131     .prepare_write_buffer = ftdi_prepare_write_buffer,
1132     .tiocmget =     ftdi_tiocmget,
1133     .tiocmset =     ftdi_tiocmset,
1134     .tiocmiwait =       usb_serial_generic_tiocmiwait,
1135     .get_icount =           usb_serial_generic_get_icount,
1136     .ioctl =        ftdi_ioctl,
1137     .get_serial =       get_serial_info,
1138     .set_serial =       set_serial_info,
1139     .set_termios =      ftdi_set_termios,
1140     .break_ctl =        ftdi_break_ctl,
1141     .tx_empty =     ftdi_tx_empty,
1142 };
1143 
1144 static struct usb_serial_driver * const serial_drivers[] = {
1145     &ftdi_sio_device, NULL
1146 };
1147 
1148 
1149 #define WDR_TIMEOUT 5000 /* default urb timeout */
1150 #define WDR_SHORT_TIMEOUT 1000  /* shorter urb timeout */
1151 
1152 /*
1153  * ***************************************************************************
1154  * Utility functions
1155  * ***************************************************************************
1156  */
1157 
1158 static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base)
1159 {
1160     unsigned short int divisor;
1161     /* divisor shifted 3 bits to the left */
1162     int divisor3 = DIV_ROUND_CLOSEST(base, 2 * baud);
1163     if ((divisor3 & 0x7) == 7)
1164         divisor3++; /* round x.7/8 up to x+1 */
1165     divisor = divisor3 >> 3;
1166     divisor3 &= 0x7;
1167     if (divisor3 == 1)
1168         divisor |= 0xc000;  /* +0.125 */
1169     else if (divisor3 >= 4)
1170         divisor |= 0x4000;  /* +0.5 */
1171     else if (divisor3 != 0)
1172         divisor |= 0x8000;  /* +0.25 */
1173     else if (divisor == 1)
1174         divisor = 0;        /* special case for maximum baud rate */
1175     return divisor;
1176 }
1177 
1178 static unsigned short int ftdi_232am_baud_to_divisor(int baud)
1179 {
1180      return ftdi_232am_baud_base_to_divisor(baud, 48000000);
1181 }
1182 
1183 static u32 ftdi_232bm_baud_base_to_divisor(int baud, int base)
1184 {
1185     static const unsigned char divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 };
1186     u32 divisor;
1187     /* divisor shifted 3 bits to the left */
1188     int divisor3 = DIV_ROUND_CLOSEST(base, 2 * baud);
1189     divisor = divisor3 >> 3;
1190     divisor |= (u32)divfrac[divisor3 & 0x7] << 14;
1191     /* Deal with special cases for highest baud rates. */
1192     if (divisor == 1)       /* 1.0 */
1193         divisor = 0;
1194     else if (divisor == 0x4001) /* 1.5 */
1195         divisor = 1;
1196     return divisor;
1197 }
1198 
1199 static u32 ftdi_232bm_baud_to_divisor(int baud)
1200 {
1201      return ftdi_232bm_baud_base_to_divisor(baud, 48000000);
1202 }
1203 
1204 static u32 ftdi_2232h_baud_base_to_divisor(int baud, int base)
1205 {
1206     static const unsigned char divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 };
1207     u32 divisor;
1208     int divisor3;
1209 
1210     /* hi-speed baud rate is 10-bit sampling instead of 16-bit */
1211     divisor3 = DIV_ROUND_CLOSEST(8 * base, 10 * baud);
1212 
1213     divisor = divisor3 >> 3;
1214     divisor |= (u32)divfrac[divisor3 & 0x7] << 14;
1215     /* Deal with special cases for highest baud rates. */
1216     if (divisor == 1)       /* 1.0 */
1217         divisor = 0;
1218     else if (divisor == 0x4001) /* 1.5 */
1219         divisor = 1;
1220     /*
1221      * Set this bit to turn off a divide by 2.5 on baud rate generator
1222      * This enables baud rates up to 12Mbaud but cannot reach below 1200
1223      * baud with this bit set
1224      */
1225     divisor |= 0x00020000;
1226     return divisor;
1227 }
1228 
1229 static u32 ftdi_2232h_baud_to_divisor(int baud)
1230 {
1231      return ftdi_2232h_baud_base_to_divisor(baud, 120000000);
1232 }
1233 
1234 #define set_mctrl(port, set)        update_mctrl((port), (set), 0)
1235 #define clear_mctrl(port, clear)    update_mctrl((port), 0, (clear))
1236 
1237 static int update_mctrl(struct usb_serial_port *port, unsigned int set,
1238                             unsigned int clear)
1239 {
1240     struct ftdi_private *priv = usb_get_serial_port_data(port);
1241     struct device *dev = &port->dev;
1242     unsigned value;
1243     int rv;
1244 
1245     if (((set | clear) & (TIOCM_DTR | TIOCM_RTS)) == 0) {
1246         dev_dbg(dev, "%s - DTR|RTS not being set|cleared\n", __func__);
1247         return 0;   /* no change */
1248     }
1249 
1250     clear &= ~set;  /* 'set' takes precedence over 'clear' */
1251     value = 0;
1252     if (clear & TIOCM_DTR)
1253         value |= FTDI_SIO_SET_DTR_LOW;
1254     if (clear & TIOCM_RTS)
1255         value |= FTDI_SIO_SET_RTS_LOW;
1256     if (set & TIOCM_DTR)
1257         value |= FTDI_SIO_SET_DTR_HIGH;
1258     if (set & TIOCM_RTS)
1259         value |= FTDI_SIO_SET_RTS_HIGH;
1260     rv = usb_control_msg(port->serial->dev,
1261                    usb_sndctrlpipe(port->serial->dev, 0),
1262                    FTDI_SIO_SET_MODEM_CTRL_REQUEST,
1263                    FTDI_SIO_SET_MODEM_CTRL_REQUEST_TYPE,
1264                    value, priv->interface,
1265                    NULL, 0, WDR_TIMEOUT);
1266     if (rv < 0) {
1267         dev_dbg(dev, "%s Error from MODEM_CTRL urb: DTR %s, RTS %s\n",
1268             __func__,
1269             (set & TIOCM_DTR) ? "HIGH" : (clear & TIOCM_DTR) ? "LOW" : "unchanged",
1270             (set & TIOCM_RTS) ? "HIGH" : (clear & TIOCM_RTS) ? "LOW" : "unchanged");
1271         rv = usb_translate_errors(rv);
1272     } else {
1273         dev_dbg(dev, "%s - DTR %s, RTS %s\n", __func__,
1274             (set & TIOCM_DTR) ? "HIGH" : (clear & TIOCM_DTR) ? "LOW" : "unchanged",
1275             (set & TIOCM_RTS) ? "HIGH" : (clear & TIOCM_RTS) ? "LOW" : "unchanged");
1276         /* FIXME: locking on last_dtr_rts */
1277         priv->last_dtr_rts = (priv->last_dtr_rts & ~clear) | set;
1278     }
1279     return rv;
1280 }
1281 
1282 
1283 static u32 get_ftdi_divisor(struct tty_struct *tty,
1284                         struct usb_serial_port *port)
1285 {
1286     struct ftdi_private *priv = usb_get_serial_port_data(port);
1287     struct device *dev = &port->dev;
1288     u32 div_value = 0;
1289     int div_okay = 1;
1290     int baud;
1291 
1292     baud = tty_get_baud_rate(tty);
1293     dev_dbg(dev, "%s - tty_get_baud_rate reports speed %d\n", __func__, baud);
1294 
1295     /*
1296      * Observe deprecated async-compatible custom_divisor hack, update
1297      * baudrate if needed.
1298      */
1299     if (baud == 38400 &&
1300         ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) &&
1301          (priv->custom_divisor)) {
1302         baud = priv->baud_base / priv->custom_divisor;
1303         dev_dbg(dev, "%s - custom divisor %d sets baud rate to %d\n",
1304             __func__, priv->custom_divisor, baud);
1305     }
1306 
1307     if (!baud)
1308         baud = 9600;
1309     switch (priv->chip_type) {
1310     case SIO: /* SIO chip */
1311         switch (baud) {
1312         case 300: div_value = ftdi_sio_b300; break;
1313         case 600: div_value = ftdi_sio_b600; break;
1314         case 1200: div_value = ftdi_sio_b1200; break;
1315         case 2400: div_value = ftdi_sio_b2400; break;
1316         case 4800: div_value = ftdi_sio_b4800; break;
1317         case 9600: div_value = ftdi_sio_b9600; break;
1318         case 19200: div_value = ftdi_sio_b19200; break;
1319         case 38400: div_value = ftdi_sio_b38400; break;
1320         case 57600: div_value = ftdi_sio_b57600;  break;
1321         case 115200: div_value = ftdi_sio_b115200; break;
1322         default:
1323             dev_dbg(dev, "%s - Baudrate (%d) requested is not supported\n",
1324                 __func__,  baud);
1325             div_value = ftdi_sio_b9600;
1326             baud = 9600;
1327             div_okay = 0;
1328         }
1329         break;
1330     case FT8U232AM: /* 8U232AM chip */
1331         if (baud <= 3000000) {
1332             div_value = ftdi_232am_baud_to_divisor(baud);
1333         } else {
1334             dev_dbg(dev, "%s - Baud rate too high!\n", __func__);
1335             baud = 9600;
1336             div_value = ftdi_232am_baud_to_divisor(9600);
1337             div_okay = 0;
1338         }
1339         break;
1340     case FT232BM: /* FT232BM chip */
1341     case FT2232C: /* FT2232C chip */
1342     case FT232RL: /* FT232RL chip */
1343     case FTX:     /* FT-X series */
1344         if (baud <= 3000000) {
1345             u16 product_id = le16_to_cpu(
1346                 port->serial->dev->descriptor.idProduct);
1347             if (((product_id == FTDI_NDI_HUC_PID)       ||
1348                  (product_id == FTDI_NDI_SPECTRA_SCU_PID)   ||
1349                  (product_id == FTDI_NDI_FUTURE_2_PID)  ||
1350                  (product_id == FTDI_NDI_FUTURE_3_PID)  ||
1351                  (product_id == FTDI_NDI_AURORA_SCU_PID))   &&
1352                 (baud == 19200)) {
1353                 baud = 1200000;
1354             }
1355             div_value = ftdi_232bm_baud_to_divisor(baud);
1356         } else {
1357             dev_dbg(dev, "%s - Baud rate too high!\n", __func__);
1358             div_value = ftdi_232bm_baud_to_divisor(9600);
1359             div_okay = 0;
1360             baud = 9600;
1361         }
1362         break;
1363     case FT2232H: /* FT2232H chip */
1364     case FT4232H: /* FT4232H chip */
1365     case FT232H:  /* FT232H chip */
1366         if ((baud <= 12000000) && (baud >= 1200)) {
1367             div_value = ftdi_2232h_baud_to_divisor(baud);
1368         } else if (baud < 1200) {
1369             div_value = ftdi_232bm_baud_to_divisor(baud);
1370         } else {
1371             dev_dbg(dev, "%s - Baud rate too high!\n", __func__);
1372             div_value = ftdi_232bm_baud_to_divisor(9600);
1373             div_okay = 0;
1374             baud = 9600;
1375         }
1376         break;
1377     } /* priv->chip_type */
1378 
1379     if (div_okay) {
1380         dev_dbg(dev, "%s - Baud rate set to %d (divisor 0x%lX) on chip %s\n",
1381             __func__, baud, (unsigned long)div_value,
1382             ftdi_chip_name[priv->chip_type]);
1383     }
1384 
1385     tty_encode_baud_rate(tty, baud, baud);
1386     return div_value;
1387 }
1388 
1389 static int change_speed(struct tty_struct *tty, struct usb_serial_port *port)
1390 {
1391     struct ftdi_private *priv = usb_get_serial_port_data(port);
1392     u16 value;
1393     u16 index;
1394     u32 index_value;
1395     int rv;
1396 
1397     index_value = get_ftdi_divisor(tty, port);
1398     value = (u16)index_value;
1399     index = (u16)(index_value >> 16);
1400     if (priv->chip_type == FT2232C || priv->chip_type == FT2232H ||
1401             priv->chip_type == FT4232H || priv->chip_type == FT232H ||
1402             priv->chip_type == FTX) {
1403         /* Probably the BM type needs the MSB of the encoded fractional
1404          * divider also moved like for the chips above. Any infos? */
1405         index = (u16)((index << 8) | priv->interface);
1406     }
1407 
1408     rv = usb_control_msg(port->serial->dev,
1409                 usb_sndctrlpipe(port->serial->dev, 0),
1410                 FTDI_SIO_SET_BAUDRATE_REQUEST,
1411                 FTDI_SIO_SET_BAUDRATE_REQUEST_TYPE,
1412                 value, index,
1413                 NULL, 0, WDR_SHORT_TIMEOUT);
1414     return rv;
1415 }
1416 
1417 static int write_latency_timer(struct usb_serial_port *port)
1418 {
1419     struct ftdi_private *priv = usb_get_serial_port_data(port);
1420     struct usb_device *udev = port->serial->dev;
1421     int rv;
1422     int l = priv->latency;
1423 
1424     if (priv->chip_type == SIO || priv->chip_type == FT8U232AM)
1425         return -EINVAL;
1426 
1427     if (priv->flags & ASYNC_LOW_LATENCY)
1428         l = 1;
1429 
1430     dev_dbg(&port->dev, "%s: setting latency timer = %i\n", __func__, l);
1431 
1432     rv = usb_control_msg(udev,
1433                  usb_sndctrlpipe(udev, 0),
1434                  FTDI_SIO_SET_LATENCY_TIMER_REQUEST,
1435                  FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE,
1436                  l, priv->interface,
1437                  NULL, 0, WDR_TIMEOUT);
1438     if (rv < 0)
1439         dev_err(&port->dev, "Unable to write latency timer: %i\n", rv);
1440     return rv;
1441 }
1442 
1443 static int _read_latency_timer(struct usb_serial_port *port)
1444 {
1445     struct ftdi_private *priv = usb_get_serial_port_data(port);
1446     struct usb_device *udev = port->serial->dev;
1447     u8 buf;
1448     int rv;
1449 
1450     rv = usb_control_msg_recv(udev, 0, FTDI_SIO_GET_LATENCY_TIMER_REQUEST,
1451                   FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE, 0,
1452                   priv->interface, &buf, 1, WDR_TIMEOUT,
1453                   GFP_KERNEL);
1454     if (rv == 0)
1455         rv = buf;
1456 
1457     return rv;
1458 }
1459 
1460 static int read_latency_timer(struct usb_serial_port *port)
1461 {
1462     struct ftdi_private *priv = usb_get_serial_port_data(port);
1463     int rv;
1464 
1465     if (priv->chip_type == SIO || priv->chip_type == FT8U232AM)
1466         return -EINVAL;
1467 
1468     rv = _read_latency_timer(port);
1469     if (rv < 0) {
1470         dev_err(&port->dev, "Unable to read latency timer: %i\n", rv);
1471         return rv;
1472     }
1473 
1474     priv->latency = rv;
1475 
1476     return 0;
1477 }
1478 
1479 static void get_serial_info(struct tty_struct *tty, struct serial_struct *ss)
1480 {
1481     struct usb_serial_port *port = tty->driver_data;
1482     struct ftdi_private *priv = usb_get_serial_port_data(port);
1483 
1484     ss->flags = priv->flags;
1485     ss->baud_base = priv->baud_base;
1486     ss->custom_divisor = priv->custom_divisor;
1487 }
1488 
1489 static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss)
1490 {
1491     struct usb_serial_port *port = tty->driver_data;
1492     struct ftdi_private *priv = usb_get_serial_port_data(port);
1493     int old_flags, old_divisor;
1494 
1495     mutex_lock(&priv->cfg_lock);
1496 
1497     if (!capable(CAP_SYS_ADMIN)) {
1498         if ((ss->flags ^ priv->flags) & ~ASYNC_USR_MASK) {
1499             mutex_unlock(&priv->cfg_lock);
1500             return -EPERM;
1501         }
1502     }
1503 
1504     old_flags = priv->flags;
1505     old_divisor = priv->custom_divisor;
1506 
1507     priv->flags = ss->flags & ASYNC_FLAGS;
1508     priv->custom_divisor = ss->custom_divisor;
1509 
1510     write_latency_timer(port);
1511 
1512     if ((priv->flags ^ old_flags) & ASYNC_SPD_MASK ||
1513             ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST &&
1514              priv->custom_divisor != old_divisor)) {
1515 
1516         /* warn about deprecation unless clearing */
1517         if (priv->flags & ASYNC_SPD_MASK)
1518             dev_warn_ratelimited(&port->dev, "use of SPD flags is deprecated\n");
1519 
1520         change_speed(tty, port);
1521     }
1522     mutex_unlock(&priv->cfg_lock);
1523     return 0;
1524 }
1525 
1526 static int get_lsr_info(struct usb_serial_port *port,
1527             unsigned int __user *retinfo)
1528 {
1529     struct ftdi_private *priv = usb_get_serial_port_data(port);
1530     unsigned int result = 0;
1531 
1532     if (priv->transmit_empty)
1533         result = TIOCSER_TEMT;
1534 
1535     if (copy_to_user(retinfo, &result, sizeof(unsigned int)))
1536         return -EFAULT;
1537     return 0;
1538 }
1539 
1540 
1541 /* Determine type of FTDI chip based on USB config and descriptor. */
1542 static void ftdi_determine_type(struct usb_serial_port *port)
1543 {
1544     struct ftdi_private *priv = usb_get_serial_port_data(port);
1545     struct usb_serial *serial = port->serial;
1546     struct usb_device *udev = serial->dev;
1547     unsigned version;
1548     unsigned interfaces;
1549 
1550     /* Assume it is not the original SIO device for now. */
1551     priv->baud_base = 48000000 / 2;
1552 
1553     version = le16_to_cpu(udev->descriptor.bcdDevice);
1554     interfaces = udev->actconfig->desc.bNumInterfaces;
1555     dev_dbg(&port->dev, "%s: bcdDevice = 0x%x, bNumInterfaces = %u\n", __func__,
1556         version, interfaces);
1557     if (interfaces > 1) {
1558         struct usb_interface *intf = serial->interface;
1559         int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
1560 
1561         /* Multiple interfaces.*/
1562         if (version == 0x0800) {
1563             priv->chip_type = FT4232H;
1564             /* Hi-speed - baud clock runs at 120MHz */
1565             priv->baud_base = 120000000 / 2;
1566         } else if (version == 0x0700) {
1567             priv->chip_type = FT2232H;
1568             /* Hi-speed - baud clock runs at 120MHz */
1569             priv->baud_base = 120000000 / 2;
1570         } else
1571             priv->chip_type = FT2232C;
1572 
1573         /* Determine interface code. */
1574         if (ifnum == 0)
1575             priv->interface = INTERFACE_A;
1576         else if (ifnum == 1)
1577             priv->interface = INTERFACE_B;
1578         else if (ifnum == 2)
1579             priv->interface = INTERFACE_C;
1580         else if (ifnum == 3)
1581             priv->interface = INTERFACE_D;
1582 
1583         /* BM-type devices have a bug where bcdDevice gets set
1584          * to 0x200 when iSerialNumber is 0.  */
1585         if (version < 0x500) {
1586             dev_dbg(&port->dev,
1587                 "%s: something fishy - bcdDevice too low for multi-interface device\n",
1588                 __func__);
1589         }
1590     } else if (version < 0x200) {
1591         /* Old device.  Assume it's the original SIO. */
1592         priv->chip_type = SIO;
1593         priv->baud_base = 12000000 / 16;
1594     } else if (version < 0x400) {
1595         /* Assume it's an FT8U232AM (or FT8U245AM) */
1596         priv->chip_type = FT8U232AM;
1597         /*
1598          * It might be a BM type because of the iSerialNumber bug.
1599          * If iSerialNumber==0 and the latency timer is readable,
1600          * assume it is BM type.
1601          */
1602         if (udev->descriptor.iSerialNumber == 0 &&
1603                 _read_latency_timer(port) >= 0) {
1604             dev_dbg(&port->dev,
1605                 "%s: has latency timer so not an AM type\n",
1606                 __func__);
1607             priv->chip_type = FT232BM;
1608         }
1609     } else if (version < 0x600) {
1610         /* Assume it's an FT232BM (or FT245BM) */
1611         priv->chip_type = FT232BM;
1612     } else if (version < 0x900) {
1613         /* Assume it's an FT232RL */
1614         priv->chip_type = FT232RL;
1615     } else if (version < 0x1000) {
1616         /* Assume it's an FT232H */
1617         priv->chip_type = FT232H;
1618     } else {
1619         /* Assume it's an FT-X series device */
1620         priv->chip_type = FTX;
1621     }
1622 
1623     dev_info(&udev->dev, "Detected %s\n", ftdi_chip_name[priv->chip_type]);
1624 }
1625 
1626 
1627 /*
1628  * Determine the maximum packet size for the device. This depends on the chip
1629  * type and the USB host capabilities. The value should be obtained from the
1630  * device descriptor as the chip will use the appropriate values for the host.
1631  */
1632 static void ftdi_set_max_packet_size(struct usb_serial_port *port)
1633 {
1634     struct ftdi_private *priv = usb_get_serial_port_data(port);
1635     struct usb_interface *interface = port->serial->interface;
1636     struct usb_endpoint_descriptor *ep_desc;
1637     unsigned num_endpoints;
1638     unsigned i;
1639 
1640     num_endpoints = interface->cur_altsetting->desc.bNumEndpoints;
1641     if (!num_endpoints)
1642         return;
1643 
1644     /*
1645      * NOTE: Some customers have programmed FT232R/FT245R devices
1646      * with an endpoint size of 0 - not good. In this case, we
1647      * want to override the endpoint descriptor setting and use a
1648      * value of 64 for wMaxPacketSize.
1649      */
1650     for (i = 0; i < num_endpoints; i++) {
1651         ep_desc = &interface->cur_altsetting->endpoint[i].desc;
1652         if (!ep_desc->wMaxPacketSize) {
1653             ep_desc->wMaxPacketSize = cpu_to_le16(0x40);
1654             dev_warn(&port->dev, "Overriding wMaxPacketSize on endpoint %d\n",
1655                     usb_endpoint_num(ep_desc));
1656         }
1657     }
1658 
1659     /* Set max packet size based on last descriptor. */
1660     priv->max_packet_size = usb_endpoint_maxp(ep_desc);
1661 }
1662 
1663 
1664 /*
1665  * ***************************************************************************
1666  * Sysfs Attribute
1667  * ***************************************************************************
1668  */
1669 
1670 static ssize_t latency_timer_show(struct device *dev,
1671                   struct device_attribute *attr, char *buf)
1672 {
1673     struct usb_serial_port *port = to_usb_serial_port(dev);
1674     struct ftdi_private *priv = usb_get_serial_port_data(port);
1675     if (priv->flags & ASYNC_LOW_LATENCY)
1676         return sprintf(buf, "1\n");
1677     else
1678         return sprintf(buf, "%u\n", priv->latency);
1679 }
1680 
1681 /* Write a new value of the latency timer, in units of milliseconds. */
1682 static ssize_t latency_timer_store(struct device *dev,
1683                    struct device_attribute *attr,
1684                    const char *valbuf, size_t count)
1685 {
1686     struct usb_serial_port *port = to_usb_serial_port(dev);
1687     struct ftdi_private *priv = usb_get_serial_port_data(port);
1688     u8 v;
1689     int rv;
1690 
1691     if (kstrtou8(valbuf, 10, &v))
1692         return -EINVAL;
1693 
1694     priv->latency = v;
1695     rv = write_latency_timer(port);
1696     if (rv < 0)
1697         return -EIO;
1698     return count;
1699 }
1700 static DEVICE_ATTR_RW(latency_timer);
1701 
1702 /* Write an event character directly to the FTDI register.  The ASCII
1703    value is in the low 8 bits, with the enable bit in the 9th bit. */
1704 static ssize_t event_char_store(struct device *dev,
1705     struct device_attribute *attr, const char *valbuf, size_t count)
1706 {
1707     struct usb_serial_port *port = to_usb_serial_port(dev);
1708     struct ftdi_private *priv = usb_get_serial_port_data(port);
1709     struct usb_device *udev = port->serial->dev;
1710     unsigned int v;
1711     int rv;
1712 
1713     if (kstrtouint(valbuf, 0, &v) || v >= 0x200)
1714         return -EINVAL;
1715 
1716     dev_dbg(&port->dev, "%s: setting event char = 0x%03x\n", __func__, v);
1717 
1718     rv = usb_control_msg(udev,
1719                  usb_sndctrlpipe(udev, 0),
1720                  FTDI_SIO_SET_EVENT_CHAR_REQUEST,
1721                  FTDI_SIO_SET_EVENT_CHAR_REQUEST_TYPE,
1722                  v, priv->interface,
1723                  NULL, 0, WDR_TIMEOUT);
1724     if (rv < 0) {
1725         dev_dbg(&port->dev, "Unable to write event character: %i\n", rv);
1726         return -EIO;
1727     }
1728 
1729     return count;
1730 }
1731 static DEVICE_ATTR_WO(event_char);
1732 
1733 static int create_sysfs_attrs(struct usb_serial_port *port)
1734 {
1735     struct ftdi_private *priv = usb_get_serial_port_data(port);
1736     int retval = 0;
1737 
1738     /* XXX I've no idea if the original SIO supports the event_char
1739      * sysfs parameter, so I'm playing it safe.  */
1740     if (priv->chip_type != SIO) {
1741         dev_dbg(&port->dev, "sysfs attributes for %s\n", ftdi_chip_name[priv->chip_type]);
1742         retval = device_create_file(&port->dev, &dev_attr_event_char);
1743         if ((!retval) &&
1744             (priv->chip_type == FT232BM ||
1745              priv->chip_type == FT2232C ||
1746              priv->chip_type == FT232RL ||
1747              priv->chip_type == FT2232H ||
1748              priv->chip_type == FT4232H ||
1749              priv->chip_type == FT232H ||
1750              priv->chip_type == FTX)) {
1751             retval = device_create_file(&port->dev,
1752                             &dev_attr_latency_timer);
1753         }
1754     }
1755     return retval;
1756 }
1757 
1758 static void remove_sysfs_attrs(struct usb_serial_port *port)
1759 {
1760     struct ftdi_private *priv = usb_get_serial_port_data(port);
1761 
1762     /* XXX see create_sysfs_attrs */
1763     if (priv->chip_type != SIO) {
1764         device_remove_file(&port->dev, &dev_attr_event_char);
1765         if (priv->chip_type == FT232BM ||
1766             priv->chip_type == FT2232C ||
1767             priv->chip_type == FT232RL ||
1768             priv->chip_type == FT2232H ||
1769             priv->chip_type == FT4232H ||
1770             priv->chip_type == FT232H ||
1771             priv->chip_type == FTX) {
1772             device_remove_file(&port->dev, &dev_attr_latency_timer);
1773         }
1774     }
1775 
1776 }
1777 
1778 #ifdef CONFIG_GPIOLIB
1779 
1780 static int ftdi_set_bitmode(struct usb_serial_port *port, u8 mode)
1781 {
1782     struct ftdi_private *priv = usb_get_serial_port_data(port);
1783     struct usb_serial *serial = port->serial;
1784     int result;
1785     u16 val;
1786 
1787     result = usb_autopm_get_interface(serial->interface);
1788     if (result)
1789         return result;
1790 
1791     val = (mode << 8) | (priv->gpio_output << 4) | priv->gpio_value;
1792     result = usb_control_msg(serial->dev,
1793                  usb_sndctrlpipe(serial->dev, 0),
1794                  FTDI_SIO_SET_BITMODE_REQUEST,
1795                  FTDI_SIO_SET_BITMODE_REQUEST_TYPE, val,
1796                  priv->interface, NULL, 0, WDR_TIMEOUT);
1797     if (result < 0) {
1798         dev_err(&serial->interface->dev,
1799             "bitmode request failed for value 0x%04x: %d\n",
1800             val, result);
1801     }
1802 
1803     usb_autopm_put_interface(serial->interface);
1804 
1805     return result;
1806 }
1807 
1808 static int ftdi_set_cbus_pins(struct usb_serial_port *port)
1809 {
1810     return ftdi_set_bitmode(port, FTDI_SIO_BITMODE_CBUS);
1811 }
1812 
1813 static int ftdi_exit_cbus_mode(struct usb_serial_port *port)
1814 {
1815     struct ftdi_private *priv = usb_get_serial_port_data(port);
1816 
1817     priv->gpio_output = 0;
1818     priv->gpio_value = 0;
1819     return ftdi_set_bitmode(port, FTDI_SIO_BITMODE_RESET);
1820 }
1821 
1822 static int ftdi_gpio_request(struct gpio_chip *gc, unsigned int offset)
1823 {
1824     struct usb_serial_port *port = gpiochip_get_data(gc);
1825     struct ftdi_private *priv = usb_get_serial_port_data(port);
1826     int result;
1827 
1828     mutex_lock(&priv->gpio_lock);
1829     if (!priv->gpio_used) {
1830         /* Set default pin states, as we cannot get them from device */
1831         priv->gpio_output = 0x00;
1832         priv->gpio_value = 0x00;
1833         result = ftdi_set_cbus_pins(port);
1834         if (result) {
1835             mutex_unlock(&priv->gpio_lock);
1836             return result;
1837         }
1838 
1839         priv->gpio_used = true;
1840     }
1841     mutex_unlock(&priv->gpio_lock);
1842 
1843     return 0;
1844 }
1845 
1846 static int ftdi_read_cbus_pins(struct usb_serial_port *port)
1847 {
1848     struct ftdi_private *priv = usb_get_serial_port_data(port);
1849     struct usb_serial *serial = port->serial;
1850     u8 buf;
1851     int result;
1852 
1853     result = usb_autopm_get_interface(serial->interface);
1854     if (result)
1855         return result;
1856 
1857     result = usb_control_msg_recv(serial->dev, 0,
1858                       FTDI_SIO_READ_PINS_REQUEST,
1859                       FTDI_SIO_READ_PINS_REQUEST_TYPE, 0,
1860                       priv->interface, &buf, 1, WDR_TIMEOUT,
1861                       GFP_KERNEL);
1862     if (result == 0)
1863         result = buf;
1864 
1865     usb_autopm_put_interface(serial->interface);
1866 
1867     return result;
1868 }
1869 
1870 static int ftdi_gpio_get(struct gpio_chip *gc, unsigned int gpio)
1871 {
1872     struct usb_serial_port *port = gpiochip_get_data(gc);
1873     int result;
1874 
1875     result = ftdi_read_cbus_pins(port);
1876     if (result < 0)
1877         return result;
1878 
1879     return !!(result & BIT(gpio));
1880 }
1881 
1882 static void ftdi_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
1883 {
1884     struct usb_serial_port *port = gpiochip_get_data(gc);
1885     struct ftdi_private *priv = usb_get_serial_port_data(port);
1886 
1887     mutex_lock(&priv->gpio_lock);
1888 
1889     if (value)
1890         priv->gpio_value |= BIT(gpio);
1891     else
1892         priv->gpio_value &= ~BIT(gpio);
1893 
1894     ftdi_set_cbus_pins(port);
1895 
1896     mutex_unlock(&priv->gpio_lock);
1897 }
1898 
1899 static int ftdi_gpio_get_multiple(struct gpio_chip *gc, unsigned long *mask,
1900                     unsigned long *bits)
1901 {
1902     struct usb_serial_port *port = gpiochip_get_data(gc);
1903     int result;
1904 
1905     result = ftdi_read_cbus_pins(port);
1906     if (result < 0)
1907         return result;
1908 
1909     *bits = result & *mask;
1910 
1911     return 0;
1912 }
1913 
1914 static void ftdi_gpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
1915                     unsigned long *bits)
1916 {
1917     struct usb_serial_port *port = gpiochip_get_data(gc);
1918     struct ftdi_private *priv = usb_get_serial_port_data(port);
1919 
1920     mutex_lock(&priv->gpio_lock);
1921 
1922     priv->gpio_value &= ~(*mask);
1923     priv->gpio_value |= *bits & *mask;
1924     ftdi_set_cbus_pins(port);
1925 
1926     mutex_unlock(&priv->gpio_lock);
1927 }
1928 
1929 static int ftdi_gpio_direction_get(struct gpio_chip *gc, unsigned int gpio)
1930 {
1931     struct usb_serial_port *port = gpiochip_get_data(gc);
1932     struct ftdi_private *priv = usb_get_serial_port_data(port);
1933 
1934     return !(priv->gpio_output & BIT(gpio));
1935 }
1936 
1937 static int ftdi_gpio_direction_input(struct gpio_chip *gc, unsigned int gpio)
1938 {
1939     struct usb_serial_port *port = gpiochip_get_data(gc);
1940     struct ftdi_private *priv = usb_get_serial_port_data(port);
1941     int result;
1942 
1943     mutex_lock(&priv->gpio_lock);
1944 
1945     priv->gpio_output &= ~BIT(gpio);
1946     result = ftdi_set_cbus_pins(port);
1947 
1948     mutex_unlock(&priv->gpio_lock);
1949 
1950     return result;
1951 }
1952 
1953 static int ftdi_gpio_direction_output(struct gpio_chip *gc, unsigned int gpio,
1954                     int value)
1955 {
1956     struct usb_serial_port *port = gpiochip_get_data(gc);
1957     struct ftdi_private *priv = usb_get_serial_port_data(port);
1958     int result;
1959 
1960     mutex_lock(&priv->gpio_lock);
1961 
1962     priv->gpio_output |= BIT(gpio);
1963     if (value)
1964         priv->gpio_value |= BIT(gpio);
1965     else
1966         priv->gpio_value &= ~BIT(gpio);
1967 
1968     result = ftdi_set_cbus_pins(port);
1969 
1970     mutex_unlock(&priv->gpio_lock);
1971 
1972     return result;
1973 }
1974 
1975 static int ftdi_gpio_init_valid_mask(struct gpio_chip *gc,
1976                      unsigned long *valid_mask,
1977                      unsigned int ngpios)
1978 {
1979     struct usb_serial_port *port = gpiochip_get_data(gc);
1980     struct ftdi_private *priv = usb_get_serial_port_data(port);
1981     unsigned long map = priv->gpio_altfunc;
1982 
1983     bitmap_complement(valid_mask, &map, ngpios);
1984 
1985     if (bitmap_empty(valid_mask, ngpios))
1986         dev_dbg(&port->dev, "no CBUS pin configured for GPIO\n");
1987     else
1988         dev_dbg(&port->dev, "CBUS%*pbl configured for GPIO\n", ngpios,
1989             valid_mask);
1990 
1991     return 0;
1992 }
1993 
1994 static int ftdi_read_eeprom(struct usb_serial *serial, void *dst, u16 addr,
1995                 u16 nbytes)
1996 {
1997     int read = 0;
1998 
1999     if (addr % 2 != 0)
2000         return -EINVAL;
2001     if (nbytes % 2 != 0)
2002         return -EINVAL;
2003 
2004     /* Read EEPROM two bytes at a time */
2005     while (read < nbytes) {
2006         int rv;
2007 
2008         rv = usb_control_msg(serial->dev,
2009                      usb_rcvctrlpipe(serial->dev, 0),
2010                      FTDI_SIO_READ_EEPROM_REQUEST,
2011                      FTDI_SIO_READ_EEPROM_REQUEST_TYPE,
2012                      0, (addr + read) / 2, dst + read, 2,
2013                      WDR_TIMEOUT);
2014         if (rv < 2) {
2015             if (rv >= 0)
2016                 return -EIO;
2017             else
2018                 return rv;
2019         }
2020 
2021         read += rv;
2022     }
2023 
2024     return 0;
2025 }
2026 
2027 static int ftdi_gpio_init_ft232h(struct usb_serial_port *port)
2028 {
2029     struct ftdi_private *priv = usb_get_serial_port_data(port);
2030     u16 cbus_config;
2031     u8 *buf;
2032     int ret;
2033     int i;
2034 
2035     buf = kmalloc(4, GFP_KERNEL);
2036     if (!buf)
2037         return -ENOMEM;
2038 
2039     ret = ftdi_read_eeprom(port->serial, buf, 0x1a, 4);
2040     if (ret < 0)
2041         goto out_free;
2042 
2043     /*
2044      * FT232H CBUS Memory Map
2045      *
2046      * 0x1a: X- (upper nibble -> AC5)
2047      * 0x1b: -X (lower nibble -> AC6)
2048      * 0x1c: XX (upper nibble -> AC9 | lower nibble -> AC8)
2049      */
2050     cbus_config = buf[2] << 8 | (buf[1] & 0xf) << 4 | (buf[0] & 0xf0) >> 4;
2051 
2052     priv->gc.ngpio = 4;
2053     priv->gpio_altfunc = 0xff;
2054 
2055     for (i = 0; i < priv->gc.ngpio; ++i) {
2056         if ((cbus_config & 0xf) == FTDI_FTX_CBUS_MUX_GPIO)
2057             priv->gpio_altfunc &= ~BIT(i);
2058         cbus_config >>= 4;
2059     }
2060 
2061 out_free:
2062     kfree(buf);
2063 
2064     return ret;
2065 }
2066 
2067 static int ftdi_gpio_init_ft232r(struct usb_serial_port *port)
2068 {
2069     struct ftdi_private *priv = usb_get_serial_port_data(port);
2070     u16 cbus_config;
2071     u8 *buf;
2072     int ret;
2073     int i;
2074 
2075     buf = kmalloc(2, GFP_KERNEL);
2076     if (!buf)
2077         return -ENOMEM;
2078 
2079     ret = ftdi_read_eeprom(port->serial, buf, 0x14, 2);
2080     if (ret < 0)
2081         goto out_free;
2082 
2083     cbus_config = le16_to_cpup((__le16 *)buf);
2084     dev_dbg(&port->dev, "cbus_config = 0x%04x\n", cbus_config);
2085 
2086     priv->gc.ngpio = 4;
2087 
2088     priv->gpio_altfunc = 0xff;
2089     for (i = 0; i < priv->gc.ngpio; ++i) {
2090         if ((cbus_config & 0xf) == FTDI_FT232R_CBUS_MUX_GPIO)
2091             priv->gpio_altfunc &= ~BIT(i);
2092         cbus_config >>= 4;
2093     }
2094 out_free:
2095     kfree(buf);
2096 
2097     return ret;
2098 }
2099 
2100 static int ftdi_gpio_init_ftx(struct usb_serial_port *port)
2101 {
2102     struct ftdi_private *priv = usb_get_serial_port_data(port);
2103     struct usb_serial *serial = port->serial;
2104     const u16 cbus_cfg_addr = 0x1a;
2105     const u16 cbus_cfg_size = 4;
2106     u8 *cbus_cfg_buf;
2107     int result;
2108     u8 i;
2109 
2110     cbus_cfg_buf = kmalloc(cbus_cfg_size, GFP_KERNEL);
2111     if (!cbus_cfg_buf)
2112         return -ENOMEM;
2113 
2114     result = ftdi_read_eeprom(serial, cbus_cfg_buf,
2115                   cbus_cfg_addr, cbus_cfg_size);
2116     if (result < 0)
2117         goto out_free;
2118 
2119     /* FIXME: FT234XD alone has 1 GPIO, but how to recognize this IC? */
2120     priv->gc.ngpio = 4;
2121 
2122     /* Determine which pins are configured for CBUS bitbanging */
2123     priv->gpio_altfunc = 0xff;
2124     for (i = 0; i < priv->gc.ngpio; ++i) {
2125         if (cbus_cfg_buf[i] == FTDI_FTX_CBUS_MUX_GPIO)
2126             priv->gpio_altfunc &= ~BIT(i);
2127     }
2128 
2129 out_free:
2130     kfree(cbus_cfg_buf);
2131 
2132     return result;
2133 }
2134 
2135 static int ftdi_gpio_init(struct usb_serial_port *port)
2136 {
2137     struct ftdi_private *priv = usb_get_serial_port_data(port);
2138     struct usb_serial *serial = port->serial;
2139     int result;
2140 
2141     switch (priv->chip_type) {
2142     case FT232H:
2143         result = ftdi_gpio_init_ft232h(port);
2144         break;
2145     case FT232RL:
2146         result = ftdi_gpio_init_ft232r(port);
2147         break;
2148     case FTX:
2149         result = ftdi_gpio_init_ftx(port);
2150         break;
2151     default:
2152         return 0;
2153     }
2154 
2155     if (result < 0)
2156         return result;
2157 
2158     mutex_init(&priv->gpio_lock);
2159 
2160     priv->gc.label = "ftdi-cbus";
2161     priv->gc.request = ftdi_gpio_request;
2162     priv->gc.get_direction = ftdi_gpio_direction_get;
2163     priv->gc.direction_input = ftdi_gpio_direction_input;
2164     priv->gc.direction_output = ftdi_gpio_direction_output;
2165     priv->gc.init_valid_mask = ftdi_gpio_init_valid_mask;
2166     priv->gc.get = ftdi_gpio_get;
2167     priv->gc.set = ftdi_gpio_set;
2168     priv->gc.get_multiple = ftdi_gpio_get_multiple;
2169     priv->gc.set_multiple = ftdi_gpio_set_multiple;
2170     priv->gc.owner = THIS_MODULE;
2171     priv->gc.parent = &serial->interface->dev;
2172     priv->gc.base = -1;
2173     priv->gc.can_sleep = true;
2174 
2175     result = gpiochip_add_data(&priv->gc, port);
2176     if (!result)
2177         priv->gpio_registered = true;
2178 
2179     return result;
2180 }
2181 
2182 static void ftdi_gpio_remove(struct usb_serial_port *port)
2183 {
2184     struct ftdi_private *priv = usb_get_serial_port_data(port);
2185 
2186     if (priv->gpio_registered) {
2187         gpiochip_remove(&priv->gc);
2188         priv->gpio_registered = false;
2189     }
2190 
2191     if (priv->gpio_used) {
2192         /* Exiting CBUS-mode does not reset pin states. */
2193         ftdi_exit_cbus_mode(port);
2194         priv->gpio_used = false;
2195     }
2196 }
2197 
2198 #else
2199 
2200 static int ftdi_gpio_init(struct usb_serial_port *port)
2201 {
2202     return 0;
2203 }
2204 
2205 static void ftdi_gpio_remove(struct usb_serial_port *port) { }
2206 
2207 #endif  /* CONFIG_GPIOLIB */
2208 
2209 /*
2210  * ***************************************************************************
2211  * FTDI driver specific functions
2212  * ***************************************************************************
2213  */
2214 
2215 /* Probe function to check for special devices */
2216 static int ftdi_sio_probe(struct usb_serial *serial,
2217                     const struct usb_device_id *id)
2218 {
2219     const struct ftdi_sio_quirk *quirk =
2220                 (struct ftdi_sio_quirk *)id->driver_info;
2221 
2222     if (quirk && quirk->probe) {
2223         int ret = quirk->probe(serial);
2224         if (ret != 0)
2225             return ret;
2226     }
2227 
2228     usb_set_serial_data(serial, (void *)id->driver_info);
2229 
2230     return 0;
2231 }
2232 
2233 static int ftdi_sio_port_probe(struct usb_serial_port *port)
2234 {
2235     struct ftdi_private *priv;
2236     const struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial);
2237     int result;
2238 
2239     priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL);
2240     if (!priv)
2241         return -ENOMEM;
2242 
2243     mutex_init(&priv->cfg_lock);
2244 
2245     if (quirk && quirk->port_probe)
2246         quirk->port_probe(priv);
2247 
2248     usb_set_serial_port_data(port, priv);
2249 
2250     ftdi_determine_type(port);
2251     ftdi_set_max_packet_size(port);
2252     if (read_latency_timer(port) < 0)
2253         priv->latency = 16;
2254     write_latency_timer(port);
2255     create_sysfs_attrs(port);
2256 
2257     result = ftdi_gpio_init(port);
2258     if (result < 0) {
2259         dev_err(&port->serial->interface->dev,
2260             "GPIO initialisation failed: %d\n",
2261             result);
2262     }
2263 
2264     return 0;
2265 }
2266 
2267 /* Setup for the USB-UIRT device, which requires hardwired
2268  * baudrate (38400 gets mapped to 312500) */
2269 /* Called from usbserial:serial_probe */
2270 static void ftdi_USB_UIRT_setup(struct ftdi_private *priv)
2271 {
2272     priv->flags |= ASYNC_SPD_CUST;
2273     priv->custom_divisor = 77;
2274     priv->force_baud = 38400;
2275 }
2276 
2277 /* Setup for the HE-TIRA1 device, which requires hardwired
2278  * baudrate (38400 gets mapped to 100000) and RTS-CTS enabled.  */
2279 
2280 static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv)
2281 {
2282     priv->flags |= ASYNC_SPD_CUST;
2283     priv->custom_divisor = 240;
2284     priv->force_baud = 38400;
2285     priv->force_rtscts = 1;
2286 }
2287 
2288 /*
2289  * Module parameter to control latency timer for NDI FTDI-based USB devices.
2290  * If this value is not set in /etc/modprobe.d/ its value will be set
2291  * to 1ms.
2292  */
2293 static int ndi_latency_timer = 1;
2294 
2295 /* Setup for the NDI FTDI-based USB devices, which requires hardwired
2296  * baudrate (19200 gets mapped to 1200000).
2297  *
2298  * Called from usbserial:serial_probe.
2299  */
2300 static int ftdi_NDI_device_setup(struct usb_serial *serial)
2301 {
2302     struct usb_device *udev = serial->dev;
2303     int latency = ndi_latency_timer;
2304 
2305     if (latency == 0)
2306         latency = 1;
2307     if (latency > 99)
2308         latency = 99;
2309 
2310     dev_dbg(&udev->dev, "%s setting NDI device latency to %d\n", __func__, latency);
2311     dev_info(&udev->dev, "NDI device with a latency value of %d\n", latency);
2312 
2313     /* FIXME: errors are not returned */
2314     usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2315                 FTDI_SIO_SET_LATENCY_TIMER_REQUEST,
2316                 FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE,
2317                 latency, 0, NULL, 0, WDR_TIMEOUT);
2318     return 0;
2319 }
2320 
2321 /*
2322  * First port on JTAG adaptors such as Olimex arm-usb-ocd or the FIC/OpenMoko
2323  * Neo1973 Debug Board is reserved for JTAG interface and can be accessed from
2324  * userspace using openocd.
2325  */
2326 static int ftdi_jtag_probe(struct usb_serial *serial)
2327 {
2328     struct usb_interface *intf = serial->interface;
2329     int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
2330 
2331     if (ifnum == 0) {
2332         dev_info(&intf->dev, "Ignoring interface reserved for JTAG\n");
2333         return -ENODEV;
2334     }
2335 
2336     return 0;
2337 }
2338 
2339 static int ftdi_8u2232c_probe(struct usb_serial *serial)
2340 {
2341     struct usb_device *udev = serial->dev;
2342 
2343     if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems"))
2344         return ftdi_jtag_probe(serial);
2345 
2346     if (udev->product &&
2347         (!strcmp(udev->product, "Arrow USB Blaster") ||
2348          !strcmp(udev->product, "BeagleBone/XDS100V2") ||
2349          !strcmp(udev->product, "SNAP Connect E10")))
2350         return ftdi_jtag_probe(serial);
2351 
2352     return 0;
2353 }
2354 
2355 /*
2356  * First two ports on JTAG adaptors using an FT4232 such as STMicroelectronics's
2357  * ST Micro Connect Lite are reserved for JTAG or other non-UART interfaces and
2358  * can be accessed from userspace.
2359  * The next two ports are enabled as UARTs by default, where port 2 is
2360  * a conventional RS-232 UART.
2361  */
2362 static int ftdi_stmclite_probe(struct usb_serial *serial)
2363 {
2364     struct usb_interface *intf = serial->interface;
2365     int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
2366 
2367     if (ifnum < 2) {
2368         dev_info(&intf->dev, "Ignoring interface reserved for JTAG\n");
2369         return -ENODEV;
2370     }
2371 
2372     return 0;
2373 }
2374 
2375 static void ftdi_sio_port_remove(struct usb_serial_port *port)
2376 {
2377     struct ftdi_private *priv = usb_get_serial_port_data(port);
2378 
2379     ftdi_gpio_remove(port);
2380 
2381     remove_sysfs_attrs(port);
2382 
2383     kfree(priv);
2384 }
2385 
2386 static int ftdi_open(struct tty_struct *tty, struct usb_serial_port *port)
2387 {
2388     struct usb_device *dev = port->serial->dev;
2389     struct ftdi_private *priv = usb_get_serial_port_data(port);
2390 
2391     /* No error checking for this (will get errors later anyway) */
2392     /* See ftdi_sio.h for description of what is reset */
2393     usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
2394             FTDI_SIO_RESET_REQUEST, FTDI_SIO_RESET_REQUEST_TYPE,
2395             FTDI_SIO_RESET_SIO,
2396             priv->interface, NULL, 0, WDR_TIMEOUT);
2397 
2398     /* Termios defaults are set by usb_serial_init. We don't change
2399        port->tty->termios - this would lose speed settings, etc.
2400        This is same behaviour as serial.c/rs_open() - Kuba */
2401 
2402     /* ftdi_set_termios  will send usb control messages */
2403     if (tty)
2404         ftdi_set_termios(tty, port, NULL);
2405 
2406     return usb_serial_generic_open(tty, port);
2407 }
2408 
2409 static void ftdi_dtr_rts(struct usb_serial_port *port, int on)
2410 {
2411     struct ftdi_private *priv = usb_get_serial_port_data(port);
2412 
2413     /* Disable flow control */
2414     if (!on) {
2415         if (usb_control_msg(port->serial->dev,
2416                 usb_sndctrlpipe(port->serial->dev, 0),
2417                 FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2418                 FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2419                 0, priv->interface, NULL, 0,
2420                 WDR_TIMEOUT) < 0) {
2421             dev_err(&port->dev, "error from flowcontrol urb\n");
2422         }
2423     }
2424     /* drop RTS and DTR */
2425     if (on)
2426         set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
2427     else
2428         clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
2429 }
2430 
2431 /* The SIO requires the first byte to have:
2432  *  B0 1
2433  *  B1 0
2434  *  B2..7 length of message excluding byte 0
2435  *
2436  * The new devices do not require this byte
2437  */
2438 static int ftdi_prepare_write_buffer(struct usb_serial_port *port,
2439                         void *dest, size_t size)
2440 {
2441     struct ftdi_private *priv;
2442     int count;
2443     unsigned long flags;
2444 
2445     priv = usb_get_serial_port_data(port);
2446 
2447     if (priv->chip_type == SIO) {
2448         unsigned char *buffer = dest;
2449         int i, len, c;
2450 
2451         count = 0;
2452         spin_lock_irqsave(&port->lock, flags);
2453         for (i = 0; i < size - 1; i += priv->max_packet_size) {
2454             len = min_t(int, size - i, priv->max_packet_size) - 1;
2455             c = kfifo_out(&port->write_fifo, &buffer[i + 1], len);
2456             if (!c)
2457                 break;
2458             port->icount.tx += c;
2459             buffer[i] = (c << 2) + 1;
2460             count += c + 1;
2461         }
2462         spin_unlock_irqrestore(&port->lock, flags);
2463     } else {
2464         count = kfifo_out_locked(&port->write_fifo, dest, size,
2465                                 &port->lock);
2466         port->icount.tx += count;
2467     }
2468 
2469     return count;
2470 }
2471 
2472 #define FTDI_RS_ERR_MASK (FTDI_RS_BI | FTDI_RS_PE | FTDI_RS_FE | FTDI_RS_OE)
2473 
2474 static int ftdi_process_packet(struct usb_serial_port *port,
2475         struct ftdi_private *priv, unsigned char *buf, int len)
2476 {
2477     unsigned char status;
2478     bool brkint = false;
2479     int i;
2480     char flag;
2481 
2482     if (len < 2) {
2483         dev_dbg(&port->dev, "malformed packet\n");
2484         return 0;
2485     }
2486 
2487     /* Compare new line status to the old one, signal if different/
2488        N.B. packet may be processed more than once, but differences
2489        are only processed once.  */
2490     status = buf[0] & FTDI_STATUS_B0_MASK;
2491     if (status != priv->prev_status) {
2492         char diff_status = status ^ priv->prev_status;
2493 
2494         if (diff_status & FTDI_RS0_CTS)
2495             port->icount.cts++;
2496         if (diff_status & FTDI_RS0_DSR)
2497             port->icount.dsr++;
2498         if (diff_status & FTDI_RS0_RI)
2499             port->icount.rng++;
2500         if (diff_status & FTDI_RS0_RLSD) {
2501             struct tty_struct *tty;
2502 
2503             port->icount.dcd++;
2504             tty = tty_port_tty_get(&port->port);
2505             if (tty)
2506                 usb_serial_handle_dcd_change(port, tty,
2507                         status & FTDI_RS0_RLSD);
2508             tty_kref_put(tty);
2509         }
2510 
2511         wake_up_interruptible(&port->port.delta_msr_wait);
2512         priv->prev_status = status;
2513     }
2514 
2515     /* save if the transmitter is empty or not */
2516     if (buf[1] & FTDI_RS_TEMT)
2517         priv->transmit_empty = 1;
2518     else
2519         priv->transmit_empty = 0;
2520 
2521     if (len == 2)
2522         return 0;   /* status only */
2523 
2524     /*
2525      * Break and error status must only be processed for packets with
2526      * data payload to avoid over-reporting.
2527      */
2528     flag = TTY_NORMAL;
2529     if (buf[1] & FTDI_RS_ERR_MASK) {
2530         /*
2531          * Break takes precedence over parity, which takes precedence
2532          * over framing errors. Note that break is only associated
2533          * with the last character in the buffer and only when it's a
2534          * NUL.
2535          */
2536         if (buf[1] & FTDI_RS_BI && buf[len - 1] == '\0') {
2537             port->icount.brk++;
2538             brkint = true;
2539         }
2540         if (buf[1] & FTDI_RS_PE) {
2541             flag = TTY_PARITY;
2542             port->icount.parity++;
2543         } else if (buf[1] & FTDI_RS_FE) {
2544             flag = TTY_FRAME;
2545             port->icount.frame++;
2546         }
2547         /* Overrun is special, not associated with a char */
2548         if (buf[1] & FTDI_RS_OE) {
2549             port->icount.overrun++;
2550             tty_insert_flip_char(&port->port, 0, TTY_OVERRUN);
2551         }
2552     }
2553 
2554     port->icount.rx += len - 2;
2555 
2556     if (brkint || port->sysrq) {
2557         for (i = 2; i < len; i++) {
2558             if (brkint && i == len - 1) {
2559                 if (usb_serial_handle_break(port))
2560                     return len - 3;
2561                 flag = TTY_BREAK;
2562             }
2563             if (usb_serial_handle_sysrq_char(port, buf[i]))
2564                 continue;
2565             tty_insert_flip_char(&port->port, buf[i], flag);
2566         }
2567     } else {
2568         tty_insert_flip_string_fixed_flag(&port->port, buf + 2, flag,
2569                 len - 2);
2570     }
2571 
2572     return len - 2;
2573 }
2574 
2575 static void ftdi_process_read_urb(struct urb *urb)
2576 {
2577     struct usb_serial_port *port = urb->context;
2578     struct ftdi_private *priv = usb_get_serial_port_data(port);
2579     char *data = urb->transfer_buffer;
2580     int i;
2581     int len;
2582     int count = 0;
2583 
2584     for (i = 0; i < urb->actual_length; i += priv->max_packet_size) {
2585         len = min_t(int, urb->actual_length - i, priv->max_packet_size);
2586         count += ftdi_process_packet(port, priv, &data[i], len);
2587     }
2588 
2589     if (count)
2590         tty_flip_buffer_push(&port->port);
2591 }
2592 
2593 static void ftdi_break_ctl(struct tty_struct *tty, int break_state)
2594 {
2595     struct usb_serial_port *port = tty->driver_data;
2596     struct ftdi_private *priv = usb_get_serial_port_data(port);
2597     u16 value;
2598 
2599     /* break_state = -1 to turn on break, and 0 to turn off break */
2600     /* see drivers/char/tty_io.c to see it used */
2601     /* last_set_data_value NEVER has the break bit set in it */
2602 
2603     if (break_state)
2604         value = priv->last_set_data_value | FTDI_SIO_SET_BREAK;
2605     else
2606         value = priv->last_set_data_value;
2607 
2608     if (usb_control_msg(port->serial->dev,
2609             usb_sndctrlpipe(port->serial->dev, 0),
2610             FTDI_SIO_SET_DATA_REQUEST,
2611             FTDI_SIO_SET_DATA_REQUEST_TYPE,
2612             value , priv->interface,
2613             NULL, 0, WDR_TIMEOUT) < 0) {
2614         dev_err(&port->dev, "%s FAILED to enable/disable break state (state was %d)\n",
2615             __func__, break_state);
2616     }
2617 
2618     dev_dbg(&port->dev, "%s break state is %d - urb is %d\n", __func__,
2619         break_state, value);
2620 
2621 }
2622 
2623 static bool ftdi_tx_empty(struct usb_serial_port *port)
2624 {
2625     unsigned char buf[2];
2626     int ret;
2627 
2628     ret = ftdi_get_modem_status(port, buf);
2629     if (ret == 2) {
2630         if (!(buf[1] & FTDI_RS_TEMT))
2631             return false;
2632     }
2633 
2634     return true;
2635 }
2636 
2637 /* old_termios contains the original termios settings and tty->termios contains
2638  * the new setting to be used
2639  * WARNING: set_termios calls this with old_termios in kernel space
2640  */
2641 static void ftdi_set_termios(struct tty_struct *tty,
2642         struct usb_serial_port *port, struct ktermios *old_termios)
2643 {
2644     struct usb_device *dev = port->serial->dev;
2645     struct device *ddev = &port->dev;
2646     struct ftdi_private *priv = usb_get_serial_port_data(port);
2647     struct ktermios *termios = &tty->termios;
2648     unsigned int cflag = termios->c_cflag;
2649     u16 value, index;
2650     int ret;
2651 
2652     /* Force baud rate if this device requires it, unless it is set to
2653        B0. */
2654     if (priv->force_baud && ((termios->c_cflag & CBAUD) != B0)) {
2655         dev_dbg(ddev, "%s: forcing baud rate for this device\n", __func__);
2656         tty_encode_baud_rate(tty, priv->force_baud,
2657                     priv->force_baud);
2658     }
2659 
2660     /* Force RTS-CTS if this device requires it. */
2661     if (priv->force_rtscts) {
2662         dev_dbg(ddev, "%s: forcing rtscts for this device\n", __func__);
2663         termios->c_cflag |= CRTSCTS;
2664     }
2665 
2666     /*
2667      * All FTDI UART chips are limited to CS7/8. We shouldn't pretend to
2668      * support CS5/6 and revert the CSIZE setting instead.
2669      *
2670      * CS5 however is used to control some smartcard readers which abuse
2671      * this limitation to switch modes. Original FTDI chips fall back to
2672      * eight data bits.
2673      *
2674      * TODO: Implement a quirk to only allow this with mentioned
2675      *       readers. One I know of (Argolis Smartreader V1)
2676      *       returns "USB smartcard server" as iInterface string.
2677      *       The vendor didn't bother with a custom VID/PID of
2678      *       course.
2679      */
2680     if (C_CSIZE(tty) == CS6) {
2681         dev_warn(ddev, "requested CSIZE setting not supported\n");
2682 
2683         termios->c_cflag &= ~CSIZE;
2684         if (old_termios)
2685             termios->c_cflag |= old_termios->c_cflag & CSIZE;
2686         else
2687             termios->c_cflag |= CS8;
2688     }
2689 
2690     cflag = termios->c_cflag;
2691 
2692     if (!old_termios)
2693         goto no_skip;
2694 
2695     if (old_termios->c_cflag == termios->c_cflag
2696         && old_termios->c_ispeed == termios->c_ispeed
2697         && old_termios->c_ospeed == termios->c_ospeed)
2698         goto no_c_cflag_changes;
2699 
2700     /* NOTE These routines can get interrupted by
2701        ftdi_sio_read_bulk_callback  - need to examine what this means -
2702        don't see any problems yet */
2703 
2704     if ((old_termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)) ==
2705         (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)))
2706         goto no_data_parity_stop_changes;
2707 
2708 no_skip:
2709     /* Set number of data bits, parity, stop bits */
2710 
2711     value = 0;
2712     value |= (cflag & CSTOPB ? FTDI_SIO_SET_DATA_STOP_BITS_2 :
2713             FTDI_SIO_SET_DATA_STOP_BITS_1);
2714     if (cflag & PARENB) {
2715         if (cflag & CMSPAR)
2716             value |= cflag & PARODD ?
2717                     FTDI_SIO_SET_DATA_PARITY_MARK :
2718                     FTDI_SIO_SET_DATA_PARITY_SPACE;
2719         else
2720             value |= cflag & PARODD ?
2721                     FTDI_SIO_SET_DATA_PARITY_ODD :
2722                     FTDI_SIO_SET_DATA_PARITY_EVEN;
2723     } else {
2724         value |= FTDI_SIO_SET_DATA_PARITY_NONE;
2725     }
2726     switch (cflag & CSIZE) {
2727     case CS5:
2728         dev_dbg(ddev, "Setting CS5 quirk\n");
2729         break;
2730     case CS7:
2731         value |= 7;
2732         dev_dbg(ddev, "Setting CS7\n");
2733         break;
2734     default:
2735     case CS8:
2736         value |= 8;
2737         dev_dbg(ddev, "Setting CS8\n");
2738         break;
2739     }
2740 
2741     /* This is needed by the break command since it uses the same command
2742        - but is or'ed with this value  */
2743     priv->last_set_data_value = value;
2744 
2745     if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
2746                 FTDI_SIO_SET_DATA_REQUEST,
2747                 FTDI_SIO_SET_DATA_REQUEST_TYPE,
2748                 value , priv->interface,
2749                 NULL, 0, WDR_SHORT_TIMEOUT) < 0) {
2750         dev_err(ddev, "%s FAILED to set databits/stopbits/parity\n",
2751             __func__);
2752     }
2753 
2754     /* Now do the baudrate */
2755 no_data_parity_stop_changes:
2756     if ((cflag & CBAUD) == B0) {
2757         /* Disable flow control */
2758         if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
2759                     FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2760                     FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2761                     0, priv->interface,
2762                     NULL, 0, WDR_TIMEOUT) < 0) {
2763             dev_err(ddev, "%s error from disable flowcontrol urb\n",
2764                 __func__);
2765         }
2766         /* Drop RTS and DTR */
2767         clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
2768     } else {
2769         /* set the baudrate determined before */
2770         mutex_lock(&priv->cfg_lock);
2771         if (change_speed(tty, port))
2772             dev_err(ddev, "%s urb failed to set baudrate\n", __func__);
2773         mutex_unlock(&priv->cfg_lock);
2774         /* Ensure RTS and DTR are raised when baudrate changed from 0 */
2775         if (old_termios && (old_termios->c_cflag & CBAUD) == B0)
2776             set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
2777     }
2778 
2779 no_c_cflag_changes:
2780     /* Set hardware-assisted flow control */
2781     value = 0;
2782 
2783     if (C_CRTSCTS(tty)) {
2784         dev_dbg(&port->dev, "enabling rts/cts flow control\n");
2785         index = FTDI_SIO_RTS_CTS_HS;
2786     } else if (I_IXON(tty)) {
2787         dev_dbg(&port->dev, "enabling xon/xoff flow control\n");
2788         index = FTDI_SIO_XON_XOFF_HS;
2789         value = STOP_CHAR(tty) << 8 | START_CHAR(tty);
2790     } else {
2791         dev_dbg(&port->dev, "disabling flow control\n");
2792         index = FTDI_SIO_DISABLE_FLOW_CTRL;
2793     }
2794 
2795     index |= priv->interface;
2796 
2797     ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
2798             FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2799             FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2800             value, index, NULL, 0, WDR_TIMEOUT);
2801     if (ret < 0)
2802         dev_err(&port->dev, "failed to set flow control: %d\n", ret);
2803 }
2804 
2805 /*
2806  * Get modem-control status.
2807  *
2808  * Returns the number of status bytes retrieved (device dependant), or
2809  * negative error code.
2810  */
2811 static int ftdi_get_modem_status(struct usb_serial_port *port,
2812                         unsigned char status[2])
2813 {
2814     struct ftdi_private *priv = usb_get_serial_port_data(port);
2815     unsigned char *buf;
2816     int len;
2817     int ret;
2818 
2819     buf = kmalloc(2, GFP_KERNEL);
2820     if (!buf)
2821         return -ENOMEM;
2822     /*
2823      * The 8U232AM returns a two byte value (the SIO a 1 byte value) in
2824      * the same format as the data returned from the in point.
2825      */
2826     switch (priv->chip_type) {
2827     case SIO:
2828         len = 1;
2829         break;
2830     case FT8U232AM:
2831     case FT232BM:
2832     case FT2232C:
2833     case FT232RL:
2834     case FT2232H:
2835     case FT4232H:
2836     case FT232H:
2837     case FTX:
2838         len = 2;
2839         break;
2840     default:
2841         ret = -EFAULT;
2842         goto out;
2843     }
2844 
2845     ret = usb_control_msg(port->serial->dev,
2846             usb_rcvctrlpipe(port->serial->dev, 0),
2847             FTDI_SIO_GET_MODEM_STATUS_REQUEST,
2848             FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE,
2849             0, priv->interface,
2850             buf, len, WDR_TIMEOUT);
2851 
2852     /* NOTE: We allow short responses and handle that below. */
2853     if (ret < 1) {
2854         dev_err(&port->dev, "failed to get modem status: %d\n", ret);
2855         if (ret >= 0)
2856             ret = -EIO;
2857         ret = usb_translate_errors(ret);
2858         goto out;
2859     }
2860 
2861     status[0] = buf[0];
2862     if (ret > 1)
2863         status[1] = buf[1];
2864     else
2865         status[1] = 0;
2866 
2867     dev_dbg(&port->dev, "%s - 0x%02x%02x\n", __func__, status[0],
2868                                 status[1]);
2869 out:
2870     kfree(buf);
2871 
2872     return ret;
2873 }
2874 
2875 static int ftdi_tiocmget(struct tty_struct *tty)
2876 {
2877     struct usb_serial_port *port = tty->driver_data;
2878     struct ftdi_private *priv = usb_get_serial_port_data(port);
2879     unsigned char buf[2];
2880     int ret;
2881 
2882     ret = ftdi_get_modem_status(port, buf);
2883     if (ret < 0)
2884         return ret;
2885 
2886     ret =   (buf[0] & FTDI_SIO_DSR_MASK  ? TIOCM_DSR : 0) |
2887         (buf[0] & FTDI_SIO_CTS_MASK  ? TIOCM_CTS : 0) |
2888         (buf[0] & FTDI_SIO_RI_MASK   ? TIOCM_RI  : 0) |
2889         (buf[0] & FTDI_SIO_RLSD_MASK ? TIOCM_CD  : 0) |
2890         priv->last_dtr_rts;
2891 
2892     return ret;
2893 }
2894 
2895 static int ftdi_tiocmset(struct tty_struct *tty,
2896             unsigned int set, unsigned int clear)
2897 {
2898     struct usb_serial_port *port = tty->driver_data;
2899 
2900     return update_mctrl(port, set, clear);
2901 }
2902 
2903 static int ftdi_ioctl(struct tty_struct *tty,
2904                     unsigned int cmd, unsigned long arg)
2905 {
2906     struct usb_serial_port *port = tty->driver_data;
2907     void __user *argp = (void __user *)arg;
2908 
2909     switch (cmd) {
2910     case TIOCSERGETLSR:
2911         return get_lsr_info(port, argp);
2912     default:
2913         break;
2914     }
2915 
2916     return -ENOIOCTLCMD;
2917 }
2918 
2919 module_usb_serial_driver(serial_drivers, id_table_combined);
2920 
2921 MODULE_AUTHOR(DRIVER_AUTHOR);
2922 MODULE_DESCRIPTION(DRIVER_DESC);
2923 MODULE_LICENSE("GPL");
2924 
2925 module_param(ndi_latency_timer, int, 0644);
2926 MODULE_PARM_DESC(ndi_latency_timer, "NDI device latency timer override");