INTRODUCTION

  The USB serial driver currently supports a number of different USB to
  serial converter products, as well as some devices that use a serial
  interface from userspace to talk to the device.

  See the individual product section below for specific information about
  the different devices.


CONFIGURATION

  Currently the driver can handle up to 256 different serial interfaces at
  one time. 

    The major number that the driver uses is 188 so to use the driver,
    create the following nodes:
	mknod /dev/ttyUSB0 c 188 0
	mknod /dev/ttyUSB1 c 188 1
	mknod /dev/ttyUSB2 c 188 2
	mknod /dev/ttyUSB3 c 188 3
		.
		.
		.
	mknod /dev/ttyUSB254 c 188 254
	mknod /dev/ttyUSB255 c 188 255

  When the device is connected and recognized by the driver, the driver
  will print to the system log, which node(s) the device has been bound
  to.
  

SPECIFIC DEVICES SUPPORTED


ConnectTech WhiteHEAT 4 port converter

  ConnectTech has been very forthcoming with information about their
  device, including providing a unit to test with.

  The driver is officially supported by Connect Tech Inc.
  http://www.connecttech.com

  For any questions or problems with this driver, please contact
  Connect Tech's Support Department at support@connecttech.com


HandSpring Visor, Palm USB, and Clié USB driver

  This driver works with all HandSpring USB, Palm USB, and Sony Clié USB
  devices.

  Only when the device tries to connect to the host, will the device show
  up to the host as a valid USB device. When this happens, the device is
  properly enumerated, assigned a port, and then communication _should_ be
  possible. The driver cleans up properly when the device is removed, or
  the connection is canceled on the device.

  NOTE:
    This means that in order to talk to the device, the sync button must be
    pressed BEFORE trying to get any program to communicate to the device.
    This goes against the current documentation for pilot-xfer and other
    packages, but is the only way that it will work due to the hardware
    in the device.
  
  When the device is connected, try talking to it on the second port
  (this is usually /dev/ttyUSB1 if you do not have any other usb-serial
  devices in the system.) The system log should tell you which port is
  the port to use for the HotSync transfer. The "Generic" port can be used
  for other device communication, such as a PPP link.

  For some Sony Clié devices, /dev/ttyUSB0 must be used to talk to the
  device.  This is true for all OS version 3.5 devices, and most devices
  that have had a flash upgrade to a newer version of the OS.  See the
  kernel system log for information on which is the correct port to use.

  If after pressing the sync button, nothing shows up in the system log,
  try resetting the device, first a hot reset, and then a cold reset if
  necessary.  Some devices need this before they can talk to the USB port
  properly.
  
  Devices that are not compiled into the kernel can be specified with module
  parameters.  e.g. modprobe visor vendor=0x54c product=0x66
  
  There is a webpage and mailing lists for this portion of the driver at:
  http://sourceforge.net/projects/usbvisor/

  For any questions or problems with this driver, please contact Greg
  Kroah-Hartman at greg@kroah.com


PocketPC PDA Driver

  This driver can be used to connect to Compaq iPAQ, HP Jornada, Casio EM500
  and other PDAs running Windows CE 3.0 or PocketPC 2002 using a USB
  cable/cradle.
  Most devices supported by ActiveSync are supported out of the box.
  For others, please use module parameters to specify the product and vendor
  id. e.g. modprobe ipaq vendor=0x3f0 product=0x1125

  The driver presents a serial interface (usually on /dev/ttyUSB0) over
  which one may run ppp and establish a TCP/IP link to the PDA. Once this
  is done, you can transfer files, backup, download email etc. The most
  significant advantage of using USB is speed - I can get 73 to 113
  kbytes/sec for download/upload to my iPAQ.

  This driver is only one of a set of components required to utilize
  the USB connection. Please visit http://synce.sourceforge.net which
  contains the necessary packages and a simple step-by-step howto.

  Once connected, you can use Win CE programs like ftpView, Pocket Outlook
  from the PDA and xcerdisp, synce utilities from the Linux side.

  To use Pocket IE, follow the instructions given at
  http://www.tekguru.co.uk/EM500/usbtonet.htm to achieve the same thing
  on Win98. Omit the proxy server part; Linux is quite capable of forwarding
  packets unlike Win98. Another modification is required at least for the
  iPAQ - disable autosync by going to the Start/Settings/Connections menu
  and unchecking the "Automatically synchronize ..." box. Go to
  Start/Programs/Connections, connect the cable and select "usbdial" (or
  whatever you named your new USB connection). You should finally wind
  up with a "Connected to usbdial" window with status shown as connected.
  Now start up PIE and browse away.

  If it doesn't work for some reason, load both the usbserial and ipaq module
  with the module parameter "debug" set to 1 and examine the system log.
  You can also try soft-resetting your PDA before attempting a connection.

  Other functionality may be possible depending on your PDA. According to
  Wes Cilldhaire <billybobjoehenrybob@hotmail.com>, with the Toshiba E570,
  ...if you boot into the bootloader (hold down the power when hitting the
  reset button, continuing to hold onto the power until the bootloader screen
  is displayed), then put it in the cradle with the ipaq driver loaded, open
  a terminal on /dev/ttyUSB0, it gives you a "USB Reflash" terminal, which can
  be used to flash the ROM, as well as the microP code..  so much for needing
  Toshiba's $350 serial cable for flashing!! :D
  NOTE: This has NOT been tested. Use at your own risk.
 
  For any questions or problems with the driver, please contact Ganesh
  Varadarajan <ganesh@veritas.com>


Keyspan PDA Serial Adapter

  Single port DB-9 serial adapter, pushed as a PDA adapter for iMacs (mostly
  sold in Macintosh catalogs, comes in a translucent white/green dongle).
  Fairly simple device. Firmware is homebrew.
  This driver also works for the Xircom/Entrega single port serial adapter.

  Current status:
   Things that work:
     basic input/output (tested with 'cu')
     blocking write when serial line can't keep up
     changing baud rates (up to 115200)
     getting/setting modem control pins (TIOCM{GET,SET,BIS,BIC})
     sending break (although duration looks suspect)
   Things that don't:
     device strings (as logged by kernel) have trailing binary garbage
     device ID isn't right, might collide with other Keyspan products
     changing baud rates ought to flush tx/rx to avoid mangled half characters
   Big Things on the todo list:
     parity, 7 vs 8 bits per char, 1 or 2 stop bits
     HW flow control
     not all of the standard USB descriptors are handled: Get_Status, Set_Feature
     O_NONBLOCK, select()

  For any questions or problems with this driver, please contact Brian
  Warner at warner@lothar.com 


Keyspan USA-series Serial Adapters

  Single, Dual and Quad port adapters - driver uses Keyspan supplied 
  firmware and is being developed with their support.
  
  Current status:
    The USA-18X, USA-28X, USA-19, USA-19W and USA-49W are supported and
    have been pretty thoroughly tested at various baud rates with 8-N-1
    character settings.  Other character lengths and parity setups are
    presently untested.

    The USA-28 isn't yet supported though doing so should be pretty
    straightforward.  Contact the maintainer if you require this
    functionality.
  
  More information is available at:
        http://www.carnationsoftware.com/carnation/Keyspan.html
   
  For any questions or problems with this driver, please contact Hugh
  Blemings at hugh@misc.nu


FTDI Single Port Serial Driver

  This is a single port DB-25 serial adapter.

  Devices supported include:
                -TripNav TN-200 USB GPS
                -Navis Engineering Bureau CH-4711 USB GPS

  For any questions or problems with this driver, please contact Bill Ryder.


ZyXEL omni.net lcd plus ISDN TA

  This is an ISDN TA. Please report both successes and troubles to
  azummo@towertech.it


Cypress M8 CY4601 Family Serial Driver

  This driver was in most part developed by Neil "koyama" Whelchel.  It
  has been improved since that previous form to support dynamic serial
  line settings and improved line handling.  The driver is for the most
  part stable and has been tested on an smp machine. (dual p2)

    Chipsets supported under CY4601 family:
	
		CY7C63723, CY7C63742, CY7C63743, CY7C64013

    Devices supported:

		-DeLorme's USB Earthmate GPS (SiRF Star II lp arch)
		-Cypress HID->COM RS232 adapter
	
		Note: Cypress Semiconductor claims no affiliation with the
			hid->com device.

	Most devices using chipsets under the CY4601 family should
     work with the driver.  As long as they stay true to the CY4601
     usbserial specification.

    Technical notes:

        The Earthmate starts out at 4800 8N1 by default... the driver will
	upon start init to this setting.  usbserial core provides the rest
	of the termios settings, along with some custom termios so that the
	output is in proper format and parsable.
	
	The device can be put into sirf mode by issuing NMEA command:
		$PSRF100,<protocol>,<baud>,<databits>,<stopbits>,<parity>*CHECKSUM
		$PSRF100,0,9600,8,1,0*0C

		It should then be sufficient to change the port termios to match this
		to begin communicating.

	As far as I can tell it supports pretty much every sirf command as
	documented online available with firmware 2.31, with some unknown
	message ids.

	The hid->com adapter can run at a maximum baud of 115200bps.  Please note
	that the device has trouble or is incapable of raising line voltage properly.
	It will be fine with null modem links, as long as you do not try to link two
	together without hacking the adapter to set the line high.

	The driver is smp safe.  Performance with the driver is rather low when using
	it for transferring files.  This is being worked on, but I would be willing to
	accept patches.  An urb queue or packet buffer would likely fit the bill here.

	If you have any questions, problems, patches, feature requests, etc. you can
	contact me here via email:
					dignome@gmail.com
		(your problems/patches can alternately be submitted to usb-devel)


Digi AccelePort Driver

  This driver supports the Digi AccelePort USB 2 and 4 devices, 2 port
  (plus a parallel port) and 4 port USB serial converters.  The driver
  does NOT yet support the Digi AccelePort USB 8.

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

  The driver is generally working, though we still have a few more ioctls
  to implement and final testing and debugging to do.  The parallel port
  on the USB 2 is supported as a serial to parallel converter; in other
  words, it appears as another USB serial port on Linux, even though
  physically it is really a parallel port.  The Digi Acceleport USB 8
  is not yet supported.

  Please contact Peter Berger (pberger@brimson.com) or Al Borchers
  (alborchers@steinerpoint.com) for questions or problems with this
  driver.


Belkin USB Serial Adapter F5U103

  Single port DB-9/PS-2 serial adapter from Belkin with firmware by eTEK Labs.
  The Peracom single port serial adapter also works with this driver, as
  well as the GoHubs adapter.

  Current status:
    The following have been tested and work:
      Baud rate    300-230400               
      Data bits    5-8
      Stop bits    1-2
      Parity       N,E,O,M,S
      Handshake    None, Software (XON/XOFF), Hardware (CTSRTS,CTSDTR)*
      Break        Set and clear
      Line control Input/Output query and control **

      *  Hardware input flow control is only enabled for firmware
         levels above 2.06.  Read source code comments describing Belkin
         firmware errata.  Hardware output flow control is working for all
         firmware versions.
      ** Queries of inputs (CTS,DSR,CD,RI) show the last
         reported state.  Queries of outputs (DTR,RTS) show the last
         requested state and may not reflect current state as set by
         automatic hardware flow control.

  TO DO List:
    -- Add true modem control line query capability.  Currently tracks the
       states reported by the interrupt and the states requested.
    -- Add error reporting back to application for UART error conditions.
    -- Add support for flush ioctls.
    -- Add everything else that is missing :)

  For any questions or problems with this driver, please contact William
  Greathouse at wgreathouse@smva.com


Empeg empeg-car Mark I/II Driver

  This is an experimental driver to provide connectivity support for the
  client synchronization tools for an Empeg empeg-car mp3 player.

  Tips:
    * Don't forget to create the device nodes for ttyUSB{0,1,2,...}
    * modprobe empeg (modprobe is your friend)
    * emptool --usb /dev/ttyUSB0 (or whatever you named your device node)

  For any questions or problems with this driver, please contact Gary
  Brubaker at xavyer@ix.netcom.com


MCT USB Single Port Serial Adapter U232

  This driver is for the MCT USB-RS232 Converter (25 pin, Model No.
  U232-P25) from Magic Control Technology Corp. (there is also a 9 pin
  Model No. U232-P9). More information about this device can be found at
  the manufacturer's web-site: http://www.mct.com.tw.

  The driver is generally working, though it still needs some more testing.
  It is derived from the Belkin USB Serial Adapter F5U103 driver and its
  TODO list is valid for this driver as well.

  This driver has also been found to work for other products, which have
  the same Vendor ID but different Product IDs. Sitecom's U232-P25 serial
  converter uses Product ID 0x230 and Vendor ID 0x711 and works with this
  driver. Also, D-Link's DU-H3SP USB BAY also works with this driver.

  For any questions or problems with this driver, please contact Wolfgang
  Grandegger at wolfgang@ces.ch


Inside Out Networks Edgeport Driver

  This driver supports all devices made by Inside Out Networks, specifically
  the following models:
       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

  For any questions or problems with this driver, please contact Greg
  Kroah-Hartman at greg@kroah.com


REINER SCT cyberJack pinpad/e-com USB chipcard reader
   
  Interface to ISO 7816 compatible contactbased chipcards, e.g. GSM SIMs.
  
  Current status:
    This is the kernel part of the driver for this USB card reader.
    There is also a user part for a CT-API driver available. A site
    for downloading is TBA. For now, you can request it from the
    maintainer (linux-usb@sii.li).

  For any questions or problems with this driver, please contact
  linux-usb@sii.li


Prolific PL2303 Driver

  This driver supports any device that has the PL2303 chip from Prolific
  in it.  This includes a number of single port USB to serial converters,
  more than 70% of USB GPS devices (in 2010), and some USB UPSes. Devices
  from Aten (the UC-232) and IO-Data work with this driver, as does
  the DCU-11 mobile-phone cable.

  For any questions or problems with this driver, please contact Greg
  Kroah-Hartman at greg@kroah.com
  

KL5KUSB105 chipset / PalmConnect USB single-port adapter
  
Current status:
  The driver was put together by looking at the usb bus transactions
  done by Palm's driver under Windows, so a lot of functionality is
  still missing.  Notably, serial ioctls are sometimes faked or not yet
  implemented.  Support for finding out about DSR and CTS line status is
  however implemented (though not nicely), so your favorite autopilot(1)
  and pilot-manager -daemon calls will work.  Baud rates up to 115200
  are supported, but handshaking (software or hardware) is not, which is
  why it is wise to cut down on the rate used is wise for large
  transfers until this is settled.
  
  See http://www.uuhaus.de/linux/palmconnect.html for up-to-date
  information on this driver.

Winchiphead CH341 Driver

  This driver is for the Winchiphead CH341 USB-RS232 Converter. This chip
  also implements an IEEE 1284 parallel port, I2C and SPI, but that is not
  supported by the driver. The protocol was analyzed from the behaviour
  of the Windows driver, no datasheet is available at present.
  The manufacturer's website: http://www.winchiphead.com/.
  For any questions or problems with this driver, please contact
  frank@kingswood-consulting.co.uk.

Moschip MCS7720, MCS7715 driver

  These chips are present in devices sold by various manufacturers, such as Syba
  and Cables Unlimited.  There may be others.  The 7720 provides two serial
  ports, and the 7715 provides one serial and one standard PC parallel port.
  Support for the 7715's parallel port is enabled by a separate option, which
  will not appear unless parallel port support is first enabled at the top-level
  of the Device Drivers config menu.  Currently only compatibility mode is
  supported on the parallel port (no ECP/EPP).

  TODO:
    - Implement ECP/EPP modes for the parallel port.
    - Baud rates higher than 115200 are currently broken.
    - Devices with a single serial port based on the Moschip MCS7703 may work
      with this driver with a simple addition to the usb_device_id table.  I
      don't have one of these devices, so I can't say for sure.

Generic Serial driver

  If your device is not one of the above listed devices, compatible with
  the above models, you can try out the "generic" interface. This
  interface does not provide any type of control messages sent to the
  device, and does not support any kind of device flow control. All that
  is required of your device is that it has at least one bulk in endpoint,
  or one bulk out endpoint. 

  To enable the generic driver to recognize your device, provide
	echo <vid> <pid> >/sys/bus/usb-serial/drivers/generic/new_id
  where the <vid> and <pid> is replaced with the hex representation of your
  device's vendor id and product id.
  If the driver is compiled as a module you can also provide one id when
  loading the module
	insmod usbserial vendor=0x#### product=0x####

  This driver has been successfully used to connect to the NetChip USB
  development board, providing a way to develop USB firmware without
  having to write a custom driver.

  For any questions or problems with this driver, please contact Greg
  Kroah-Hartman at greg@kroah.com


CONTACT:

  If anyone has any problems using these drivers, with any of the above
  specified products, please contact the specific driver's author listed
  above, or join the Linux-USB mailing list (information on joining the
  mailing list, as well as a link to its searchable archive is at
  http://www.linux-usb.org/ )


Greg Kroah-Hartman
greg@kroah.com
