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://usbvisor.sourceforge.net/

  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/Entrgra 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://misc.nu/hugh/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.

  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 (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 and USB GPS devices.  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.
  
Options supported:
  If this driver is compiled as a module you can pass the following
  options to it:
  debug			- extra verbose debugging info
  			  (default: 0; nonzero enables)
  use_lowlatency	- use low_latency flag to speed up tty layer
			  when reading from the device.
			  (default: 0; nonzero enables)

  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.


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, build the driver
  as a module and load it by the following invocation:
	insmod usbserial vendor=0x#### product=0x####
  where the #### is replaced with the hex representation of your device's
  vendor id and product id.

  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
