linux/drivers/usb/serial
Frank Schäfer 034d1527ad pl2303: improve the chip type detection/distinction
The driver currently knows about 3 different PL2303 chip types:
The two legacy chip types type_0 and type_1 (PL2303H ?) and the HX
type.
The device distinction is currently completely based on the examination
of the USB descriptors.
During the last years, Prolific has introduced further PL2303 chips,
such as the HXD (HX rev. D), TA (which replaced the X/HX chips), SA,
RA, EA and TB variants.
Unfortunately, all these new chips are currently detected as HX chips,
because they are all using the same bMaxPacketSize0 = 0x40 value in the
USB device descriptor.

At this point it is not clear if these chips are really working with
the driver, there are just some positive indicators (like device
manufacturers claiming Linux support for these devices or commit
8d48fdf689 "correctly handle baudrates above 115200" which should only
be necessary for newer devices, ...)

For a complete support of all devices, we need to distinguish between
them, because they differ in several functional aspects, such  as the
maximum supported baud rate (HXD, TB, EA: 12Mbps, HX, TA: 6Mbps,
RA: 1Mbps, SA: 115.2kbps), handshaking line support, RS422/485 and
GPIO ports support (currently not supported by the driver).
And there might be further differences that we don't know yet.

This patch improves the chip type detection by evaluating the bcdDevice
value of the device descriptor. The values are taken from the
datasheets and are safe to use because manufacturers can't change them:

3.00: X/HX, TA
4.00: HXD, EA, RA, SA
5.00: TB

The rest of the device descriptors is completely identical, so no
further distinction is possible this way.
Anyway, Prolifics "checkChipVersion.exe"-tool is definitely able to
distinguish for example between the X/HX and the TA chips, so there
must be a possibility to improve the distinction further...

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-08-14 12:12:43 -07:00
..
aircable.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
ark3116.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
belkin_sa.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
belkin_sa.h
bus.c USB: serial: ports: add minor and port number 2013-06-10 14:46:40 -07:00
ch341.c USB: ch341: fix TIOCMIWAIT and disconnect 2013-03-25 13:50:52 -07:00
console.c USB: console: remove unnecessary operations test 2013-07-23 16:24:32 -07:00
cp210x.c Merge 3.11-rc3 into usb-next 2013-07-29 07:43:16 -07:00
cyberjack.c USB: cyberjack: fix disconnect handling 2013-03-25 13:48:26 -07:00
cypress_m8.c USB: serial: set drain delay at port probe 2013-07-23 16:21:50 -07:00
cypress_m8.h USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device 2013-06-03 10:33:10 -07:00
digi_acceleport.c USB: serial: ports: add minor and port number 2013-06-10 14:46:40 -07:00
empeg.c USB: serial: remove driver version information 2012-10-31 12:48:06 -07:00
ezusb_convert.pl
f81232.c USB: serial: set drain delay at port probe 2013-07-23 16:21:50 -07:00
ftdi_sio_ids.h USB: serial: ftdi_sio: add more RT Systems ftdi devices 2013-07-29 13:38:38 -07:00
ftdi_sio.c Merge 3.11-rc4 into usb-next 2013-08-05 08:36:14 +08:00
ftdi_sio.h
garmin_gps.c USB: serial: ports: add minor and port number 2013-06-10 14:46:40 -07:00
generic.c USB: serial: remove hupping check from tiocmiwait 2013-07-23 16:21:50 -07:00
io_16654.h
io_edgeport.c USB: io_edgeport: remove unused defines 2013-07-23 16:28:22 -07:00
io_edgeport.h
io_ionsp.h
io_tables.h USB: io_edgeport: switch to generic TIOCMIWAIT implementation 2013-03-25 13:50:53 -07:00
io_ti.c USB: io_ti: move port initialisation to probe 2013-07-23 16:28:23 -07:00
io_ti.h
io_usbvend.h
ipaq.c USB: serial: remove driver version information 2012-10-31 12:48:06 -07:00
ipw.c USB: serial: remove driver version information 2012-10-31 12:48:06 -07:00
ir-usb.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
iuu_phoenix.c USB: iuu_phoenix: fix bulk-message timeout 2013-05-29 10:50:43 +09:00
iuu_phoenix.h
Kconfig USB: serial: move the "simple" drivers into usb-serial-simple.c 2013-08-12 12:14:52 -07:00
keyspan_pda.c USB patches for 3.10-rc1 2013-04-29 12:19:23 -07:00
keyspan_usa26msg.h
keyspan_usa28msg.h
keyspan_usa49msg.h
keyspan_usa67msg.h
keyspan_usa90msg.h
keyspan.c USB: serial: ports: add minor and port number 2013-06-10 14:46:40 -07:00
keyspan.h USB: keyspan: fix NULL-pointer dereferences and memory leaks 2012-10-25 09:37:13 -07:00
kl5kusb105.c USB: kl5kusb105: always disable uart on close 2013-03-25 13:54:31 -07:00
kl5kusb105.h
kobil_sct.c USB: kobil_sct: use port interrupt-out urb 2013-04-17 10:05:35 -07:00
kobil_sct.h
Makefile USB: serial: move the "simple" drivers into usb-serial-simple.c 2013-08-12 12:14:52 -07:00
Makefile-keyspan_pda_fw
mct_u232.c USB: mct_u232: clean up read implementation 2013-04-17 10:05:35 -07:00
mct_u232.h
metro-usb.c USB: serial: ports: add minor and port number 2013-06-10 14:46:40 -07:00
mos7720.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
mos7840.c Merge 3.11-rc4 into usb-next 2013-08-05 08:36:14 +08:00
navman.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
omninet.c USB: omninet: switch to generic read implementation 2013-04-17 10:05:34 -07:00
opticon.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
option.c usb: serial: option.c: remove ONDA MT825UP product ID fromdriver 2013-07-25 11:28:31 -07:00
oti6858.c USB: oti6858: do not call set_termios with uninitialised data 2013-07-23 16:24:33 -07:00
oti6858.h
pl2303.c pl2303: improve the chip type detection/distinction 2013-08-14 12:12:43 -07:00
pl2303.h
qcaux.c qcaux: add Franklin U600 2013-03-11 11:09:17 -07:00
qcserial.c USB: option,qcserial: move Novatel Gobi1K IDs to qcserial 2013-06-24 16:21:53 -07:00
quatech2.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
safe_serial.c USB: safe_serial: remove vendor/product module parameters 2013-07-23 16:28:23 -07:00
sierra.c USB: serial: ports: add minor and port number 2013-06-10 14:46:40 -07:00
spcp8x5.c USB: serial: set drain delay at port probe 2013-07-23 16:21:50 -07:00
ssu100.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
symbolserial.c USB: symbolserial: move private-data allocation to port_probe 2013-04-17 10:05:35 -07:00
ti_usb_3410_5052.c Merge 3.11-rc3 into usb-next 2013-07-29 07:43:16 -07:00
ti_usb_3410_5052.h USB: serial: ti_usb_3410_5052: new device id for Abbot strip port cable 2013-06-19 15:54:45 -07:00
usb_debug.c USB: serial: rework usb_serial_register/deregister_drivers() 2012-05-08 15:46:14 -07:00
usb_wwan.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
usb-serial-simple.c USB: serial: move the "simple" drivers into usb-serial-simple.c 2013-08-12 12:14:52 -07:00
usb-serial.c USB: serial: clean up dtr_rts 2013-07-23 16:21:50 -07:00
usb-wwan.h USB: usb-wwan: fix multiple memory leaks in error paths 2012-10-25 09:37:13 -07:00
visor.c USB: visor: fix initialisation of Treo/Kyocera devices 2013-05-29 10:47:45 +09:00
visor.h
whiteheat.c USB: serial: make minor allocation dynamic 2013-06-17 13:30:02 -07:00
whiteheat.h
wishbone-serial.c USB: serial: wishbone-serial: fix up minor sparse warning 2013-04-11 08:45:34 -07:00
xsens_mt.c usb: add driver for xsens motion trackers 2013-01-25 09:56:54 -08:00
zte_ev.c USB: option,zte_ev: move most ZTE CDMA devices to zte_ev 2013-06-06 09:06:25 -07:00