• Macpaul Lin's avatar
    cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader. · 4aac41de
    Macpaul Lin authored
    commit eafb27fa 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" (93857edd) 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: default avatarMacpaul Lin <macpaul.lin@mediatek.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarJohan Hovold <johan@kernel.org>
    Acked-by: default avatarOliver Neukum <oneukum@suse.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    4aac41de
cdc-acm.c 53.3 KB