USB: serial: ftdi_sio: detect BM chip with iSerialNumber bug
authorIan Abbott <abbotti@mev.co.uk>
Wed, 8 Mar 2017 16:02:58 +0000 (16:02 +0000)
committerJohan Hovold <johan@kernel.org>
Mon, 13 Mar 2017 15:55:40 +0000 (16:55 +0100)
commit7e1e6ceda3f07a40445ae1c4ac5549a899d5e252
treec6dbd14cefe98ea306ac157ba7fb712e58d4084c
parent2dea7cd7287781cd4bfd0167dba423e0f486ef61
USB: serial: ftdi_sio: detect BM chip with iSerialNumber bug

If a BM type chip has iSerialNumber set to 0 in its EEPROM, an incorrect
value is read from the bcdDevice field of the USB descriptor, making it
look like an AM type chip.  Attempt to correct this in
ftdi_determine_type() by attempting to read the latency timer for an AM
type chip if it has iSerialNumber set to 0.  If that succeeds, assume it
is a BM type chip.

Currently, read_latency_timer() bails out without reading the latency
timer for an AM type chip, so factor out the guts of
read_latency_timer() into a new function _read_latency_timer() that
attempts to read the latency timer regardless of chip type, and returns
either the latency timer value or a negative error number.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Johan Hovold <johan@kernel.org>
drivers/usb/serial/ftdi_sio.c