#
# USB Serial device configuration
#

menuconfig USB_SERIAL
	tristate "USB Serial Converter support"
	depends on USB
	---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_EZUSB
	bool "Functions for loading firmware on EZUSB chips"
	help
	    Say Y here if you need EZUSB device support.

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_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_AIRPRIME
	tristate "USB AirPrime CDMA Wireless Driver"
	help
	  Say Y here if you want to use a AirPrime CDMA Wireless PC card.

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

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
	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_CP2101
	tristate "USB CP2101 UART Bridge Controller"
	help
	  Say Y here if you want to use a CP2101/CP2102 based USB to RS232
	  converter.

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

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_FUNSOFT
	tristate "USB Fundamental Software Dongle Driver"
	---help---
	  Say Y here if you want to use the Fundamental Software dongle.

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

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/> 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_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"
	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
	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
	---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://misc.nu/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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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
	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_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_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_MOTOROLA
	tristate "USB Motorola Phone modem driver"
	---help---
	  Say Y here if you want to use a Motorola phone with a USB
	  connector as a modem link.

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

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_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_HP4X
        tristate "USB HP4x Calculators support"
        help
          Say Y here if you want to use an Hewlett-Packard 4x Calculator.

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

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 a Sierra Wireless device (if
	  using an PC 5220 or AC580 please use the Airprime driver
	  instead).

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

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
	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_OPTION
	tristate "USB driver for GSM and CDMA modems"
	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_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
