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. More information about this
  device and the Linux driver can be found at:
	http://reality.sgi.com/bryder_wellington/ftdi_sio/

  For any questions or problems with this driver, please contact Bill Ryder
  at bryder@sgi.com


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 manufacture'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.

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
