linux/drivers/usb/class
Macpaul Lin b669ce7d02 cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader.
commit eafb27fa52 upstream.

Mediatek Preloader is a proprietary embedded boot loader for loading
Little Kernel and Linux into device DRAM.

This boot loader also handle firmware update. Mediatek Preloader will be
enumerated as a virtual COM port when the device is connected to Windows
or Linux OS via CDC-ACM class driver. When the USB enumeration has been
done, Mediatek Preloader will send out handshake command "READY" to PC
actively instead of waiting command from the download tool.

Since Linux 4.12, the commit "tty: reset termios state on device
registration" (93857edd98) causes Mediatek
Preloader receiving some abnoraml command like "READYXX" as it sent.
This will be recognized as an incorrect response. The behavior change
also causes the download handshake fail. This change only affects
subsequent connects if the reconnected device happens to get the same minor
number.

By disabling the ECHO termios flag could avoid this problem. However, it
cannot be done by user space configuration when download tool open
/dev/ttyACM0. This is because the device running Mediatek Preloader will
send handshake command "READY" immediately once the CDC-ACM driver is
ready.

This patch wants to fix above problem by introducing "DISABLE_ECHO"
property in driver_info. When Mediatek Preloader is connected, the
CDC-ACM driver could disable ECHO flag in termios to avoid the problem.

Signed-off-by: Macpaul Lin <macpaul.lin@mediatek.com>
Reviewed-by: Johan Hovold <johan@kernel.org>
Acked-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2019-04-04 16:14:01 +01:00
..
cdc-acm.c cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader. 2019-04-04 16:14:01 +01:00
cdc-acm.h cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader. 2019-04-04 16:14:01 +01:00
cdc-wdm.c cdc-wdm: fix endianness bug in debug statements 2015-05-05 11:09:34 +01:00
Kconfig USB: regroup all depends on USB within an if USB block 2013-04-09 16:49:07 -07:00
Makefile USB: add USB test and measurement class driver 2008-10-17 14:40:51 -07:00
usblp.c usblp: do not set TASK_INTERRUPTIBLE before lock 2015-12-14 10:17:11 +00:00
usbtmc.c USB: usbtmc: add missing endpoint sanity check 2017-07-18 18:40:18 +01:00