From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3FE738F620 for ; Sat, 22 Aug 2026 21:40:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787434850; cv=none; b=kaGtLNidmmfphbHxS9ej4+52r2JGE81k83CnFSx9FaPTF4LBJsGPBHp4s0TWA5ocSEF/79GygH9QYeP0249b0oR7xZKeWjYMVvbAw9cZEons+7jWI+NsVnSp7odN9RahR0SPuj6SK6CECLcf+SRhet83Q0urnig3Q2QPHhBVjXg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787434850; c=relaxed/simple; bh=KJT81DzlFzree0N2sQdZCS66jmiyMjzLoVvJJAuquTs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GoYKKAu2dI+Eo1FSGQwYbXETqf7OsGpzwY9z+Ap9/DkAJsrJ1HkMVpOo8EUz1LRVi7+YkzHM4/nzC4Wg+wk43HTbF25cbnMOjMaGZZsrz6aAxis49zxa1JhWKXZGjQ6czpWQfyemJK80NmPbNofJcnNZUD2wu/khPd7OEAzPccw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=s2zZUjGz; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="s2zZUjGz" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-c15e2dab83eso421729666b.1 for ; Sat, 22 Aug 2026 14:40:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787434840; x=1788039640; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8xIFPtL0bXPCQ9Wv1lusuTgPka354Csl8JdgcZxBeVs=; b=s2zZUjGzASqYCl7eYhoarDStryZT2nxU2QAGicis0Ajt5adlzBMz/6+19AHu3Qz+ef 9JMCA+3oO0tN87vRjKjIJjZcUbxeojSXIezk3MaVaEdUeMS9v5SyvYPmXgD2gCyqZK8C 9IiV/Zwhglz+8RVa67dNhO3DrUFK4CE1IN3et0oJPAg6LebGRih/ebxeifv4Wc/UElDF lOp6fsv8sfAbaSjF7awSlENOLCnJre0bB6JI92VDIZ+gs0G2MeT3eEA4vnZJlAsXcVOW i+pV37dgMXriNAdfbYiR68xdEWjaMupEFdA8OBuICFv3rpvfkO4NQBMMtzoG7V8FXLB2 j/yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787434840; x=1788039640; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=8xIFPtL0bXPCQ9Wv1lusuTgPka354Csl8JdgcZxBeVs=; b=QhwdE/UXEqwMW+fFoaOYR5nMwpScxI2sua/OSJnBV6VvhHVxrmpTkBHZ1oz5VT6xDa 6XgYntueiljFrpxvw8Qjv0VU8qXibNbhvpnpQMtHJWpYsVRvoKdzdaZoTPkr96R7l19l mHp9rKjK+V4e5crhefIY/RewPoy6tZamE4Fz6zL8snJadAWKBs/jB2s+WwXGlB44zT/k mQjsI6o30bCUJyAS7h5qVll3VlA5CDs/LxSFHSOQyabuuNHiHWRSF2QDbPD9+NZb/2dX oiz/DMAkbjD+Br6Mgo+svaoM+IhfmR8jZNEGHTwYcmHAD5CoOXnO6oj2mnmnTRcBaosr 0kgg== X-Forwarded-Encrypted: i=1; AHgh+RrpgvHCNwtWRHJLdqjnGLUSENNTHrUbUmnleFQQJFGuAYKe3jNuy+2MBcXA0IlPt9lcgGA9MCfIsqAVv60=@vger.kernel.org X-Gm-Message-State: AFuF++m3yCTmVXi8Mdm1W9dppqFekquP9I8ny4jwHdPhVaJC+ikzeHEo SOEwz8GARXjGthQI5vEoCN+DJwIeWps8VyZO8PCYSjqln91XPsnZbjWc X-Gm-Gg: AR+sD11KDJCJJTNIbaUYnbS2+ufLNuNUpFZYoodWt/S2b0HFQwtj2Oh9Y69bT2WHf0i N6XMRprNzKR8W9Wf70tRqZKCxHHJadaSDp2nOZBh295JZv0xHhrz4bFfE5mic5NOf5A0HHpn44m SgWLSy4AaG+1GWviEH2r1XEtGVGRMND/djWFL65qHCmXufI/D2W4wzgsT5oFcIIBtDzO4BDsg/W 1HeNA8v8QCTu2yofKnvKXGebbICFjKuD9c5VlnHA/x+maWYbnI/37XmRk9jdDL6ksSKuixuhEFz qhErsMXqWX/uJGvhhm6bfIdKHeXRXfy7YNyFGMm8kpojtra6cnqJdoLzV2yGAO08Pez0xbF6Bur CbkwmojTjH6xH3BJD/M9MnilKWqaDuelJDAZ598q/NOkj9Fs5+G/J0AP4lcbzTyXYnJO4qrAsk9 rv9Tk5MdL3zM2wAESWwSzMRcQAAebL3CVD8BTGy3im+GB6S7uGykbPHAcDcHg= X-Received: by 2002:a17:907:3cc2:b0:c21:180c:d82d with SMTP id a640c23a62f3a-c246a725749mr1773091566b.20.1787434840266; Sat, 22 Aug 2026 14:40:40 -0700 (PDT) Received: from m2.. ([37.142.151.124]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-c24966f99basm466778466b.37.2026.08.22.14.40.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Aug 2026 14:40:39 -0700 (PDT) From: Michael Zaidman To: Jiri Kosina , Benjamin Tissoires Cc: Linus Walleij , Bartosz Golaszewski , Germain Hebert , Rio Liu , Bruno Giacomazzi , Christina Quast , linux-input@vger.kernel.org, linux-gpio@vger.kernel.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Zaidman Subject: [PATCH 07/13] HID: ft260: uart: enable flow control Date: Sun, 23 Aug 2026 00:39:35 +0300 Message-ID: <20260822213941.98882-8-michael.zaidman@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260822213941.98882-1-michael.zaidman@gmail.com> References: <20260822213941.98882-1-michael.zaidman@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The FT260 is a full-speed USB device. Interrupt transfers poll at 1 ms with a 64-byte max packet size, so the theoretical UART payload ceiling is about 60 kB/s (~600 kbaud in 8N1). The chip advertises baud rates above 1M and small transfers can work there, but large transfers are not reliable above 460800 baud without flow control. Stop forcing FT260_UART_CFG_FLOW_CTRL_NONE after termios setup. Honor CRTSCTS (RTS/CTS) and IXON/IXOFF (XON/XOFF) when configuring the UART. Tested at 1500000 baud both directions against an FT2232H with XON/XOFF and with RTS/CTS (~2.9 MB transfers, no data corruption). Signed-off-by: Michael Zaidman --- drivers/hid/hid-ft260.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/hid/hid-ft260.c b/drivers/hid/hid-ft260.c index 1ed3701eaaf7..1da42b8756d8 100644 --- a/drivers/hid/hid-ft260.c +++ b/drivers/hid/hid-ft260.c @@ -1868,8 +1868,12 @@ static int ft260_uart_change_speed(struct ft260_device *port, if (termios->c_cflag & CRTSCTS) req.flow_ctrl = FT260_UART_CFG_FLOW_CTRL_RTS_CTS; + else if (termios->c_iflag & (IXON | IXOFF)) + req.flow_ctrl = FT260_UART_CFG_FLOW_CTRL_XON_XOFF; else - req.flow_ctrl = FT260_UART_CFG_FLOW_CTRL_OFF; + req.flow_ctrl = FT260_UART_CFG_FLOW_CTRL_NONE; + + req.breaking = FT260_UART_CFG_BREAKING_NO; ft260_dbg("configured termios: flow control: %d, baudrate: %d, ", req.flow_ctrl, baud); @@ -1877,9 +1881,6 @@ static int ft260_uart_change_speed(struct ft260_device *port, req.data_bit, req.parity, req.stop_bit, req.breaking); - req.flow_ctrl = FT260_UART_CFG_FLOW_CTRL_NONE; - req.breaking = FT260_UART_CFG_BREAKING_NO; - mutex_lock(&port->lock); ret = ft260_hid_feature_report_set(hdev, (u8 *)&req, sizeof(req)); -- 2.43.0