Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp6894831rwn; Tue, 13 Sep 2022 10:26:30 -0700 (PDT) X-Google-Smtp-Source: AA6agR6YW0B1LI6dPrG5XfF3NQr1CF6Mxzu9amaWOy+4/y8bZS/JXjTMC5a4wVSLdJgME+KbxwZW X-Received: by 2002:a17:906:fc6:b0:72f:d080:416 with SMTP id c6-20020a1709060fc600b0072fd0800416mr22933838ejk.1.1663089990552; Tue, 13 Sep 2022 10:26:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663089990; cv=none; d=google.com; s=arc-20160816; b=bliIWdYt1XHFJn5AZTuIiFfbr4SYw3ShZwcS6jzGSFnvI25oszCOPfnIUJQSBX2sBa I3lLOhzUgEygiYpakEXIjpwbYKV6Cq6e4QB4AwIXCG4Oi1oKX5a7AqJ8ECqFAYZQNZDj V4VqBZDr51Xe1ZSiRufWAk37ZjQWtq9J9Ky7ZWLDrYEwQop547YgQhBfB31NEI3eK8pz wejLlJO/UvLIry+lOX6VSwj2CqukY4DajKYD9bT39pHmBcuQnGQY8hzp0L92HfFL0awe 6gaGdaddGqzWbPZsTBsqZ7rUsiLR8nwAKYOk4JB2xoLHKNRVjSBCefOI2fm4gbqKrQkK fkdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=QphtiogdSrxYaVzxITQ7PEcAcZUDRERKCOzQFePUCX0=; b=M/AFIQfMZXsL3D3EvBuu+7wKDZ513OAdnkqAjaaZNJzqN7N3k75UJBXdW4bnu6S/1T zQdfro5/lWcVE2DkSqkZnLrO4mQw/55YTqpe1hMi1Z0yHVrG41ozIHCRsHPVNcm5HwFd TcrhGknhiyLPku8OTDpna/wBIenxSOut/+eb5AOOWw6TCHvtfejU5kJ0gN+3ihQym9rk OISNzVG3/TC9hyiMUF4hfal8XAbxMHwG0ExoCwM9AO+KEhyYyKcHEHQx7MiGnYNc+Dis +JJAPEsNmuffOpbNI1ReLyO/qwx1P8C00TQ/+1NRdgzqjZbVYa+xLfQIjm20qvlldxk+ mf0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JycDiVG3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kw2-20020a170907770200b00741a0720a2bsi9519282ejc.814.2022.09.13.10.26.03; Tue, 13 Sep 2022 10:26:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JycDiVG3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232369AbiIMRG1 (ORCPT + 99 others); Tue, 13 Sep 2022 13:06:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232367AbiIMRGB (ORCPT ); Tue, 13 Sep 2022 13:06:01 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2ECA383F37; Tue, 13 Sep 2022 08:55:31 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id D4FE5B80F93; Tue, 13 Sep 2022 14:33:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48C47C433B5; Tue, 13 Sep 2022 14:32:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1663079579; bh=HwcKgcx3YUW4O5fZ2Dy56K8an7bFPB5SAM8Cc7hYdjM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JycDiVG3WxZgYxXeB8FI3lh/mBbcrIkej/L1cQ9DOVYTHw4lgT9xRyZp+rRWZpkit cU9f3Wk8215O6D1+EC9gCACSzuJMeogxTi3lBm6yrUp5U94Zk9tCvo3jgwdrMFnV8w tgpm4TvyLu14tg2skmk7Vz0D5tPr1Me3a/60kDLM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jonathan Woithe , Johan Hovold Subject: [PATCH 4.19 74/79] USB: serial: ch341: fix lost character on LCR updates Date: Tue, 13 Sep 2022 16:07:32 +0200 Message-Id: <20220913140352.462146395@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220913140348.835121645@linuxfoundation.org> References: <20220913140348.835121645@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johan Hovold commit 8e83622ae7ca481c76c8fd9579877f6abae64ca2 upstream. Disable LCR updates for pre-0x30 devices which use a different (unknown) protocol for line control and where the current register write causes the next received character to be lost. Note that updating LCR using the INIT command has no effect on these devices either. Reported-by: Jonathan Woithe Tested-by: Jonathan Woithe Link: https://lore.kernel.org/r/Ys1iPTfiZRWj2gXs@marvin.atrad.com.au Fixes: 4e46c410e050 ("USB: serial: ch341: reinitialize chip on reconfiguration") Fixes: 55fa15b5987d ("USB: serial: ch341: fix baud rate and line-control handling") Cc: stable@vger.kernel.org # 4.10 Signed-off-by: Johan Hovold [ johan: adjust context to 4.19 ] Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/usb/serial/ch341.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) --- a/drivers/usb/serial/ch341.c +++ b/drivers/usb/serial/ch341.c @@ -96,6 +96,8 @@ struct ch341_private { u8 mcr; u8 msr; u8 lcr; + + u8 version; }; static void ch341_set_termios(struct tty_struct *tty, @@ -181,6 +183,9 @@ static int ch341_set_baudrate_lcr(struct if (r) return r; + if (priv->version < 0x30) + return 0; + r = ch341_control_out(dev, CH341_REQ_WRITE_REG, 0x2518, lcr); if (r) return r; @@ -232,7 +237,9 @@ static int ch341_configure(struct usb_de r = ch341_control_in(dev, CH341_REQ_READ_VERSION, 0, 0, buffer, size); if (r < 0) goto out; - dev_dbg(&dev->dev, "Chip version: 0x%02x\n", buffer[0]); + + priv->version = buffer[0]; + dev_dbg(&dev->dev, "Chip version: 0x%02x\n", priv->version); r = ch341_control_out(dev, CH341_REQ_SERIAL_INIT, 0, 0); if (r < 0)