#
# 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_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 && 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_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
