#
# USB Serial device configuration
#

menuconfig USB_SERIAL
	tristate "USB Serial Converter support"
	depends on TTY
	---help---
	  Say Y here if you have a USB device that provides normal serial
	  ports, or acts like a serial device, and you want to connect it to
	  your USB bus.

	  Please read <file:Documentation/usb/usb-serial.txt> for more
	  information on the specifics of the different devices that are
	  supported, and on how to use them.

	  To compile this driver as a module, choose M here: the
	  module will be called usbserial.

if USB_SERIAL

config USB_SERIAL_CONSOLE
	bool "USB Serial Console device support"
	depends on USB_SERIAL=y
	---help---
	  If you say Y here, it will be possible to use a USB to serial
	  converter port as the system console (the system console is the
	  device which receives all kernel messages and warnings and which
	  allows logins in single user mode). This could be useful if some
	  terminal or printer is connected to that serial port.

	  Even if you say Y here, the currently visible virtual console
	  (/dev/tty0) will still be used as the system console by default, but
	  you can alter that using a kernel command line option such as
	  "console=ttyUSB0". (Try "man bootparam" or see the documentation of
	  your boot loader (lilo or loadlin) about how to pass options to the
	  kernel at boot time.)

	  If you don't have a VGA card installed and you say Y here, the
	  kernel will automatically use the first USB to serial converter
	  port, /dev/ttyUSB0, as system console.

	  If unsure, say N.

config USB_SERIAL_GENERIC
	bool "USB Generic Serial Driver"
	help
	  Say Y here if you want to use the generic USB serial driver.  Please
	  read <file:Documentation/usb/usb-serial.txt> for more information on
	  using this driver.  It is recommended that the "USB Serial converter
	  support" be compiled as a module for this driver to be used
	  properly.

config USB_SERIAL_SIMPLE
	tristate "USB Serial Simple Driver"
	help
	  Say Y here to use the USB serial "simple" driver.  This driver
	  handles a wide range of very simple devices, all in one
	  driver.  Specifically, it supports:
		- Suunto ANT+ USB device.
		- Fundamental Software dongle.
		- HP4x calculators
		- a number of Motorola phones
		- Siemens USB/MPI adapter.
		- ViVOtech ViVOpay USB device.
		- Infineon Modem Flashloader USB interface
		- ZIO Motherboard USB serial interface

	  To compile this driver as a module, choose M here: the module
	  will be called usb-serial-simple.

config USB_SERIAL_AIRCABLE
	tristate "USB AIRcable Bluetooth Dongle Driver"
	help
	    Say Y here if you want to use USB AIRcable Bluetooth Dongle.

	    To compile this driver as a module, choose M here: the module
	    will be called aircable.

config USB_SERIAL_ARK3116
	tristate "USB ARK Micro 3116 USB Serial Driver"
	help
	  Say Y here if you want to use a ARK Micro 3116 USB to Serial
	  device.

	  To compile this driver as a module, choose M here: the
	  module will be called ark3116

config USB_SERIAL_BELKIN
	tristate "USB Belkin and Peracom Single Port Serial Driver"
	help
	  Say Y here if you want to use a Belkin USB Serial single port
	  adaptor (F5U103 is one of the model numbers) or the Peracom single
	  port USB to serial adapter.

	  To compile this driver as a module, choose M here: the
	  module will be called belkin_sa.

config USB_SERIAL_CH341
	tristate "USB Winchiphead CH341 Single Port Serial Driver"
	help
	  Say Y here if you want to use a Winchiphead CH341 single port
	  USB to serial adapter.

	  To compile this driver as a module, choose M here: the
	  module will be called ch341.

config USB_SERIAL_WHITEHEAT
	tristate "USB ConnectTech WhiteHEAT Serial Driver"
	select USB_EZUSB_FX2
	help
	  Say Y here if you want to use a ConnectTech WhiteHEAT 4 port
	  USB to serial converter device.

	  To compile this driver as a module, choose M here: the
	  module will be called whiteheat.

config USB_SERIAL_DIGI_ACCELEPORT
	tristate "USB Digi International AccelePort USB Serial Driver"
	---help---
	  Say Y here if you want to use Digi AccelePort USB 2 or 4 devices,
	  2 port (plus parallel port) and 4 port USB serial converters.  The
	  parallel port on the USB 2 appears as a third serial port on Linux.
	  The Digi Acceleport USB 8 is not yet supported by this driver.

	  This driver works under SMP with the usb-uhci driver.  It does not
	  work under SMP with the uhci driver.

	  To compile this driver as a module, choose M here: the
	  module will be called digi_acceleport.

config USB_SERIAL_CP210X
	tristate "USB CP210x family of UART Bridge Controllers"
	help
	  Say Y here if you want to use a CP2101/CP2102/CP2103 based USB
	  to RS232 converters.

	  To compile this driver as a module, choose M here: the
	  module will be called cp210x.

config USB_SERIAL_CYPRESS_M8
	tristate "USB Cypress M8 USB Serial Driver"
	help
	  Say Y here if you want to use a device that contains the Cypress
	  USB to Serial microcontroller, such as the DeLorme Earthmate GPS.

		Attempted SMP support... send bug reports!

	  Supported microcontrollers in the CY4601 family are:
		CY7C63741 CY7C63742 CY7C63743 CY7C64013
	
	  To compile this driver as a module, choose M here: the
	  module will be called cypress_m8.

config USB_SERIAL_EMPEG
	tristate "USB Empeg empeg-car Mark I/II Driver"
	help
	  Say Y here if you want to connect to your Empeg empeg-car Mark I/II
	  mp3 player via USB.  The driver uses a single ttyUSB{0,1,2,...}
	  device node.  See <file:Documentation/usb/usb-serial.txt> for more
	  tidbits of information.

	  To compile this driver as a module, choose M here: the
	  module will be called empeg.

config USB_SERIAL_FTDI_SIO
	tristate "USB FTDI Single Port Serial Driver"
	---help---
	  Say Y here if you want to use a FTDI SIO single port USB to serial
	  converter device. The implementation I have is called the USC-1000.
	  This driver has also be tested with the 245 and 232 devices.

	  See <http://ftdi-usb-sio.sourceforge.net/> for more
	  information on this driver and the device.

	  To compile this driver as a module, choose M here: the
	  module will be called ftdi_sio.

config USB_SERIAL_VISOR
	tristate "USB Handspring Visor / Palm m50x / Sony Clie Driver"
	help
	  Say Y here if you want to connect to your HandSpring Visor, Palm
	  m500 or m505 through its USB docking station. See
	  <http://usbvisor.sourceforge.net/index.php3> for more information on using this
	  driver.

	  To compile this driver as a module, choose M here: the
	  module will be called visor.

config USB_SERIAL_IPAQ
	tristate "USB PocketPC PDA Driver"
	help
	  Say Y here if you want to connect to your Compaq iPAQ, HP Jornada
	  or any other PDA running Windows CE 3.0 or PocketPC 2002
	  using a USB cradle/cable. For information on using the driver,
	  read <file:Documentation/usb/usb-serial.txt>.

	  To compile this driver as a module, choose M here: the
	  module will be called ipaq.

config USB_SERIAL_IR
	tristate "USB IR Dongle Serial Driver"
	help
	  Say Y here if you want to enable simple serial support for USB IrDA
	  devices.  This is useful if you do not want to use the full IrDA
	  stack.

	  To compile this driver as a module, choose M here: the
	  module will be called ir-usb.

config USB_SERIAL_EDGEPORT
	tristate "USB Inside Out Edgeport Serial Driver"
	---help---
	  Say Y here if you want to use any of the following devices from
	  Inside Out Networks (Digi):
	  Edgeport/4
	  Rapidport/4
	  Edgeport/4t
	  Edgeport/2
	  Edgeport/4i
	  Edgeport/2i
	  Edgeport/421
	  Edgeport/21
	  Edgeport/8
	  Edgeport/8 Dual
	  Edgeport/2D8
	  Edgeport/4D8
	  Edgeport/8i
	  Edgeport/2 DIN
	  Edgeport/4 DIN
	  Edgeport/16 Dual

	  To compile this driver as a module, choose M here: the
	  module will be called io_edgeport.

config USB_SERIAL_EDGEPORT_TI
	tristate "USB Inside Out Edgeport Serial Driver (TI devices)"
	help
	  Say Y here if you want to use any of the devices from Inside Out
	  Networks (Digi) that are not supported by the io_edgeport driver.
	  This includes the Edgeport/1 device.

	  To compile this driver as a module, choose M here: the
	  module will be called io_ti.

config USB_SERIAL_F81232
	tristate "USB Fintek F81232 Single Port Serial Driver"
	help
	  Say Y here if you want to use the Fintek F81232 single
	  port usb to serial adapter.

	  To compile this driver as a module, choose M here: the
	  module will be called f81232.

config USB_SERIAL_GARMIN
       tristate "USB Garmin GPS driver"
       help
         Say Y here if you want to connect to your Garmin GPS.
         Should work with most Garmin GPS devices which have a native USB port.

         See <http://sourceforge.net/projects/garmin-gps> for the latest
         version of the driver.

         To compile this driver as a module, choose M here: the
         module will be called garmin_gps.

config USB_SERIAL_IPW
        tristate "USB IPWireless (3G UMTS TDD) Driver"
	select USB_SERIAL_WWAN
	help
	  Say Y here if you want to use a IPWireless USB modem such as
	  the ones supplied by Axity3G/Sentech South Africa.

	  To compile this driver as a module, choose M here: the
	  module will be called ipw.

config USB_SERIAL_IUU
	tristate "USB Infinity USB Unlimited Phoenix Driver"
	help
	  Say Y here if you want to use a IUU in phoenix mode and get
	  an extra ttyUSBx device. More information available on
	  http://eczema.ecze.com/iuu_phoenix.html

	  To compile this driver as a module, choose M here: the
	  module will be called iuu_phoenix.o

config USB_SERIAL_KEYSPAN_PDA
	tristate "USB Keyspan PDA Single Port Serial Driver"
	select USB_EZUSB_FX2
	help
	  Say Y here if you want to use a Keyspan PDA single port USB to
	  serial converter device.  This driver makes use of firmware
	  developed from scratch by Brian Warner.

	  To compile this driver as a module, choose M here: the
	  module will be called keyspan_pda.

config USB_SERIAL_KEYSPAN
	tristate "USB Keyspan USA-xxx Serial Driver"
	select USB_EZUSB_FX2
	---help---
	  Say Y here if you want to use Keyspan USB to serial converter
	  devices.  This driver makes use of Keyspan's official firmware
	  and was developed with their support.  You must also include
	  firmware to support your particular device(s).

	  See <http://blemings.org/hugh/keyspan.html> for more information.

	  To compile this driver as a module, choose M here: the
	  module will be called keyspan.

config USB_SERIAL_KEYSPAN_MPR
	bool "USB Keyspan MPR Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the Keyspan MPR converter.

config USB_SERIAL_KEYSPAN_USA28
	bool "USB Keyspan USA-28 Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-28 converter.

config USB_SERIAL_KEYSPAN_USA28X
	bool "USB Keyspan USA-28X Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-28X converter.
	  Be sure you have a USA-28X, there are also 28XA and 28XB
	  models, the label underneath has the actual part number.

config USB_SERIAL_KEYSPAN_USA28XA
	bool "USB Keyspan USA-28XA Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-28XA converter.
	  Be sure you have a USA-28XA, there are also 28X and 28XB
	  models, the label underneath has the actual part number.

config USB_SERIAL_KEYSPAN_USA28XB
	bool "USB Keyspan USA-28XB Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-28XB converter.
	  Be sure you have a USA-28XB, there are also 28X and 28XA
	  models, the label underneath has the actual part number.

config USB_SERIAL_KEYSPAN_USA19
	bool "USB Keyspan USA-19 Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-19 converter.

config USB_SERIAL_KEYSPAN_USA18X
	bool "USB Keyspan USA-18X Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-18X converter.

config USB_SERIAL_KEYSPAN_USA19W
	bool "USB Keyspan USA-19W Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-19W converter.

config USB_SERIAL_KEYSPAN_USA19QW
	bool "USB Keyspan USA-19QW Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-19QW converter.

config USB_SERIAL_KEYSPAN_USA19QI
	bool "USB Keyspan USA-19QI Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-19QI converter.

config USB_SERIAL_KEYSPAN_USA49W
	bool "USB Keyspan USA-49W Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-49W converter.

config USB_SERIAL_KEYSPAN_USA49WLC
	bool "USB Keyspan USA-49WLC Firmware"
	depends on USB_SERIAL_KEYSPAN && FIRMWARE_IN_KERNEL
	help
	  Say Y here to include firmware for the USA-49WLC converter.

config USB_SERIAL_KLSI
	tristate "USB KL5KUSB105 (Palmconnect) Driver"
	---help---
	  Say Y here if you want to use a KL5KUSB105 - based single port
	  serial adapter. The most widely known -- and currently the only
	  tested -- device in this category is the PalmConnect USB Serial
	  adapter sold by Palm Inc. for use with their Palm III and Palm V
	  series PDAs.

	  Please read <file:Documentation/usb/usb-serial.txt> for more
	  information.

	  To compile this driver as a module, choose M here: the
	  module will be called kl5kusb105.

config USB_SERIAL_KOBIL_SCT
        tristate "USB KOBIL chipcard reader"
        ---help---
          Say Y here if you want to use one of the following KOBIL USB chipcard
          readers:

            - USB TWIN
            - KAAN Standard Plus
            - KAAN SIM
            - SecOVID Reader Plus
            - B1 Professional
            - KAAN Professional

          Note that you need a current CT-API.
          To compile this driver as a module, choose M here: the
	  module will be called kobil_sct.

config USB_SERIAL_MCT_U232
	tristate "USB MCT Single Port Serial Driver"
	---help---
	  Say Y here if you want to use a USB Serial single port adapter from
	  Magic Control Technology Corp. (U232 is one of the model numbers).

	  This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB
	  BAY, Belkin F5U109, and Belkin F5U409 devices.

	  To compile this driver as a module, choose M here: the
	  module will be called mct_u232.

config USB_SERIAL_METRO
	tristate "USB Metrologic Instruments USB-POS Barcode Scanner Driver"
	---help---
	  Say Y here if you want to use a USB POS Metrologic barcode scanner.

	  To compile this driver as a module, choose M here: the
	  module will be called metro-usb.

config USB_SERIAL_MOS7720
	tristate "USB Moschip 7720 Serial Driver"
	---help---
	  Say Y here if you want to use USB Serial single and double
	  port adapters from Moschip Semiconductor Tech.

	  To compile this driver as a module, choose M here: the
	  module will be called mos7720.

config USB_SERIAL_MOS7715_PARPORT
	bool "Support for parallel port on the Moschip 7715"
	depends on USB_SERIAL_MOS7720
	depends on PARPORT=y || PARPORT=USB_SERIAL_MOS7720
	select PARPORT_NOT_PC
	---help---
	Say Y if you have a Moschip 7715 device and would like to use
	the parallel port it provides.  The port will register with
	the parport subsystem as a low-level driver.

config USB_SERIAL_MOS7840
	tristate "USB Moschip 7840/7820 USB Serial Driver"
	---help---
	  Say Y here if you want to use a MCS7840 Quad-Serial or MCS7820
	  Dual-Serial port device from MosChip Semiconductor.

	  The MCS7840 and MCS7820 have been developed to connect a wide range
	  of standard serial devices to a USB host.  The MCS7840 has a USB
	  device controller connected to four (4) individual UARTs while the
	  MCS7820 controller connects to two (2) individual UARTs.

	  To compile this driver as a module, choose M here: the
	  module will be called mos7840.  If unsure, choose N.

config USB_SERIAL_MXUPORT
	tristate "USB Moxa UPORT Serial Driver"
	---help---
	  Say Y here if you want to use a MOXA UPort Serial hub.

	  This driver supports:

	  [2 Port]
	  - UPort 1250 :  2 Port RS-232/422/485 USB to Serial Hub
	  - UPort 1250I : 2 Port RS-232/422/485 USB to Serial Hub with
			  Isolation

	  [4 Port]
	  - UPort 1410 :  4 Port RS-232 USB to Serial Hub
	  - UPort 1450 :  4 Port RS-232/422/485 USB to Serial Hub
	  - UPort 1450I : 4 Port RS-232/422/485 USB to Serial Hub with
			  Isolation

	  [8 Port]
	  - UPort 1610-8 : 8 Port RS-232 USB to Serial Hub
	  - UPort 1650-8 : 8 Port RS-232/422/485 USB to Serial Hub

	  [16 Port]
	  - UPort 1610-16 : 16 Port RS-232 USB to Serial Hub
	  - UPort 1650-16 : 16 Port RS-232/422/485 USB to Serial Hub

	  To compile this driver as a module, choose M here: the
	  module will be called mxuport.

config USB_SERIAL_NAVMAN
	tristate "USB Navman GPS device"
	help
	  To compile this driver as a module, choose M here: the
	  module will be called navman.

config USB_SERIAL_PL2303
	tristate "USB Prolific 2303 Single Port Serial Driver"
	help
	  Say Y here if you want to use the PL2303 USB Serial single port
	  adapter from Prolific.

	  To compile this driver as a module, choose M here: the
	  module will be called pl2303.

config USB_SERIAL_OTI6858
	tristate "USB Ours Technology Inc. OTi-6858 USB To RS232 Bridge Controller"
	help
	  Say Y here if you want to use the OTi-6858 single port USB to serial
          converter device.

	  To compile this driver as a module, choose M here: the
	  module will be called oti6858.

config USB_SERIAL_QCAUX
	tristate "USB Qualcomm Auxiliary Serial Port Driver"
	help
	  Say Y here if you want to use the auxiliary serial ports provided
	  by many modems based on Qualcomm chipsets.  These ports often use
	  a proprietary protocol called DM and cannot be used for AT- or
	  PPP-based communication.

	  To compile this driver as a module, choose M here: the
	  module will be called qcaux.  If unsure, choose N.

config USB_SERIAL_QUALCOMM
	tristate "USB Qualcomm Serial modem"
	select USB_SERIAL_WWAN
	help
	  Say Y here if you have a Qualcomm USB modem device.  These are
	  usually wireless cellular modems.

	  To compile this driver as a module, choose M here: the
	  module will be called qcserial.

config USB_SERIAL_SPCP8X5
	tristate "USB SPCP8x5 USB To Serial Driver"
	help
	  Say Y here if you want to use the spcp8x5 converter chip.  This is
	  commonly found in some Z-Wave USB devices.

	  To compile this driver as a module, choose M here: the
	  module will be called spcp8x5.

config USB_SERIAL_SAFE
	tristate "USB Safe Serial (Encapsulated) Driver"

config USB_SERIAL_SAFE_PADDED
	bool "USB Secure Encapsulated Driver - Padded"
	depends on USB_SERIAL_SAFE

config USB_SERIAL_SIERRAWIRELESS
	tristate "USB Sierra Wireless Driver"
	help
	  Say M here if you want to use Sierra Wireless devices.

	  Many devices have a feature known as TRU-Install. For those devices
	  to work properly, the USB Storage Sierra feature must be enabled.

	  To compile this driver as a module, choose M here: the
	  module will be called sierra.

config USB_SERIAL_SYMBOL
	tristate "USB Symbol Barcode driver (serial mode)"
	help
	  Say Y here if you want to use a Symbol USB Barcode device
	  in serial emulation mode.

	  To compile this driver as a module, choose M here: the
	  module will be called symbolserial.

config USB_SERIAL_TI
	tristate "USB TI 3410/5052 Serial Driver"
	help
	  Say Y here if you want to use the TI USB 3410 or 5052
	  serial devices.

	  To compile this driver as a module, choose M here: the
	  module will be called ti_usb_3410_5052.

config USB_SERIAL_CYBERJACK
	tristate "USB REINER SCT cyberJack pinpad/e-com chipcard reader"
	---help---
	  Say Y here if you want to use a cyberJack pinpad/e-com USB chipcard
	  reader. This is an interface to ISO 7816 compatible contact-based
	  chipcards, e.g. GSM SIMs.

	  To compile this driver as a module, choose M here: the
	  module will be called cyberjack.

	  If unsure, say N.

config USB_SERIAL_XIRCOM
	tristate "USB Xircom / Entregra Single Port Serial Driver"
	select USB_EZUSB_FX2
	help
	  Say Y here if you want to use a Xircom or Entregra single port USB to
	  serial converter device.  This driver makes use of firmware
	  developed from scratch by Brian Warner.

	  To compile this driver as a module, choose M here: the
	  module will be called keyspan_pda.

config USB_SERIAL_WWAN
	tristate

config USB_SERIAL_OPTION
	tristate "USB driver for GSM and CDMA modems"
	select USB_SERIAL_WWAN
	help
	  Say Y here if you have a GSM or CDMA modem that's connected to USB.

	  This driver also supports several PCMCIA cards which have a
	  built-in OHCI-USB adapter and an internally-connected GSM modem.
	  The USB bus on these cards is not accessible externally.

	  Supported devices include (some of?) those made by:
	  Option, Huawei, Audiovox, Novatel Wireless, or Anydata.

	  To compile this driver as a module, choose M here: the
	  module will be called option.

	  If this driver doesn't recognize your device,
	  it might be accessible via the FTDI_SIO driver.

config USB_SERIAL_OMNINET
	tristate "USB ZyXEL omni.net LCD Plus Driver"
	help
	  Say Y here if you want to use a ZyXEL omni.net LCD ISDN TA.

	  To compile this driver as a module, choose M here: the
	  module will be called omninet.

config USB_SERIAL_OPTICON
	tristate "USB Opticon Barcode driver (serial mode)"
	help
	  Say Y here if you want to use a Opticon USB Barcode device
	  in serial emulation mode.

	  To compile this driver as a module, choose M here: the
	  module will be called opticon.

config USB_SERIAL_XSENS_MT
	tristate "Xsens motion tracker serial interface driver"
	help
	  Say Y here if you want to use Xsens motion trackers.

	  This driver supports the new generation of motion trackers
	  by Xsens. Older devices can be accessed using the FTDI_SIO
	  driver.

	  To compile this driver as a module, choose M here: the
	  module will be called xsens_mt.

config USB_SERIAL_WISHBONE
	tristate "USB-Wishbone adapter interface driver"
	help
	  Say Y here if you want to use a USB attached Wishbone bus.

	  Wishbone is an open hardware SoC bus commonly used in FPGA
	  designs. Bus access can be serialized using the Etherbone
	  protocol <http://www.ohwr.org/projects/etherbone-core>.

	  This driver is intended to be used with devices which attach
	  their internal Wishbone bus to a USB serial interface using
	  the Etherbone protocol. A userspace library is required to
	  speak the protocol made available by this driver as ttyUSBx.

	  To compile this driver as a module, choose M here: the
	  module will be called wishbone-serial.

config USB_SERIAL_ZTE
	tristate "ZTE USB serial driver"
	help
	  Say Y here if you want to use a ZTE USB to serial device.

	  To compile this driver as a module, choose M here: the
	  module will be called zte.

config USB_SERIAL_SSU100
	tristate "USB Quatech SSU-100 Single Port Serial Driver"
	help
	  Say Y here if you want to use the Quatech SSU-100 single
	  port usb to serial adapter.

	  To compile this driver as a module, choose M here: the
	  module will be called ssu100.

config USB_SERIAL_QT2
	tristate "USB Quatech Serial Driver for USB 2 devices"
	help
	  Say Y here if you want to use the Quatech USB 2
	  serial adapters.

	  To compile this driver as a module, choose M here: the
	  module will be called quatech-serial.

config USB_SERIAL_DEBUG
	tristate "USB Debugging Device"
	help
	  Say Y here if you have a USB debugging device used to receive
	  debugging data from another machine.  The most common of these
	  devices is the NetChip TurboCONNECT device.

	  To compile this driver as a module, choose M here: the
	  module will be called usb-debug.

endif # USB_SERIAL
