From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f98.google.com (mail-pj1-f98.google.com [209.85.216.98]) (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 35C2F3B9D90 for ; Mon, 27 Apr 2026 17:47:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.98 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777312023; cv=none; b=qgs2fm4fnUM8FJ7zfsx4Gqrj4tIfF0J6m5ptp1MIjhlpuH92JqO8dOuhLgsfQGj6bqJDmFIMJ17svrnPPgW9TCokYsgrvjkzJpttA/ZQLoMTbpVisczEl9q666zUSEqWkXKu/nNsKrH2qVXKW0nfwlbbjXkamBFkFu2xFbpiaRQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777312023; c=relaxed/simple; bh=SCT8D80G+jmfhUjd2eDo80+D2h1zd7FvDnYKrKfZlvA=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=hbuhPsRr+vhqdQNxSdlFoxgR4VJZ3w9gpJU8E+jWM3BtsWPKFpMvzJVd7o5gpyA8mbueDVc1O98nBWL3zipxRTkvpffdxtnMuijxdZXH/g7CDFdmBNu3Wqp2a4qgDJdtnipiJgOYg25IeGB297RZwp3QBzBphLsoyxs5oYBE27o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=embeddedTS.com; spf=pass smtp.mailfrom=embeddedts.com; dkim=pass (1024-bit key) header.d=embeddedts.com header.i=@embeddedts.com header.b=c53Uaxsq; arc=none smtp.client-ip=209.85.216.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=embeddedTS.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=embeddedts.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=embeddedts.com header.i=@embeddedts.com header.b="c53Uaxsq" Received: by mail-pj1-f98.google.com with SMTP id 98e67ed59e1d1-35fbca04006so5291555a91.1 for ; Mon, 27 Apr 2026 10:47:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embeddedts.com; s=google; t=1777312019; x=1777916819; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=mtxZYUJWsG0tUhkOglqtm1G9mRh7DJSqPuF8GOXSvQE=; b=c53Uaxsq4nE3rDd4TaJgn083FKMCeiaWDqQvC1TgBcjzIB8nvhyBeQy3vQG4wqUJn4 Rh4u9h+67agyO3g3a6YhOOOZydJiClmmWZXIUyMI90YTXYs8TxwkP+TCRvG94rrUJiYI BYwygK5DwT2u3Z5S4JrtUU0P1t//Ya7CAQO1Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777312019; x=1777916819; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mtxZYUJWsG0tUhkOglqtm1G9mRh7DJSqPuF8GOXSvQE=; b=IlIgMuiUzwKXA7Jq5FWhIM4PCXqeWvpWur7moxXKhwLrwIg5iB094QwuhWkW1PMH7p fVmBsoaOa0+NFGgpPrDzJg/kHUcF/HsMDZh9ZK/zxji/m+0Us5Tqa2ugyNjaGj9QsNaP TLrmelWpzC8s8E9b4nwk8KiuJGUwWEhShsHa0VGeGA53citMrzJT40oeD2OfVJiWqvTc hy/aKL6R5V/BwJvAiTpIS3n7hi2PIL7Vw2AnZPQVFPkcSTbGpWgkLZhcQYVppHrnS2qk MCMknCan4hKNGN2BZpu9HQdfhMdPnavuWi+gi+eAb41IRwSodgQcMVS0Rae3Yl79MpF1 myFw== X-Forwarded-Encrypted: i=1; AFNElJ/HLDR5QQYQMPdFZGlpJRmohghn8+y9jGbGypyIfAG4BM32bhpRR92jAxnY7zsZ7C5b/DUcZeTaQxXLQz0=@vger.kernel.org X-Gm-Message-State: AOJu0YxyKGgLSTsriVSC3kQsAjzAVdouid95unFWoQQ/PA0r5cIT3mg/ 8MHYMYwlQFkVqI8/aEK+Uc2tv9KS3MJ2hdrupd3VlyQ5fV9lcCv3qwp3TQroz1uVlwZ+2YotCNA dHJ5Rd4HZFKIj2j1FbcbxSPt09dTF7Gjsip3A X-Gm-Gg: AeBDievZgI7jxRBpILZD/Q8PN+MfM9jznG7db0/dXJn+VvP3Z+gR11JmskCzTTsr5Tx xqmWOKA0IpGZ/kEAN886GoPaoyK5lb5k7Afe6MUBK07PHd9agXSTyGgaqZxkOsMWvD2C+JTVwcz rHHz2rkYyzzXF3q58vp+kCr5C4mKCEoh5cGcdavUPLiIPYTskZElIeFba7EPqAHmf84RGUS9YNN Hj0W6OhK8ELoif9f04tL8gPXgjx5ksGhMpcJW/ycI8eUBxPuoVt+ljhzdrp7DePi20pcrGALRDw 9u6fbRsDv5FmVjlkCJyMhmTjpspnpWyQ6zM6piGG2euyMVMnlCC2w/7C/H6NzMpymkUW2gz9TRr okq9OuA7LNwVN+xQW0Y32zrk9f9t0m7RYRC2bAlwZQi6k46aKc1NIibU4zE4= X-Received: by 2002:a17:90b:3bc7:b0:35c:30a8:341 with SMTP id 98e67ed59e1d1-36490c99b61mr60652a91.13.1777312019609; Mon, 27 Apr 2026 10:46:59 -0700 (PDT) Received: from tornado.. (wsip-70-191-90-18.ph.ph.cox.net. [70.191.90.18]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-364902f5c44sm18498a91.3.2026.04.27.10.46.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Apr 2026 10:46:59 -0700 (PDT) X-Relaying-Domain: embeddedts.com From: Kris Bahnsen To: Dmitry Torokhov , Marek Vasut Cc: Kris Bahnsen , stable@vger.kernel.org, Mark Featherston , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] Input: ads7846 - don't use scratch for tx_buf when clearing register Date: Mon, 27 Apr 2026 17:46:57 +0000 Message-Id: <20260427174657.691272-1-kris@embeddedTS.com> X-Mailer: git-send-email 2.34.1 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 workaround for XPT2046 clears the command register, giving the touchscreen controller a NOP. The change incorrectly re-uses the req->scratch variable which is used as rx_buf for xfer[5], so by the time xfer[6] occurs, the contents of req->scratch may not be 0. It was found that the touchscreen controller can end up in a completely unresponsive state due to it being given a command the driver does not expect. Instead, rely on the spi_transfer behavior of tx_buf being NULL to transmit all 0 bits. Also set rx_buf to NULL because the value returned does not matter. Thus moving the 3 byte pattern to clear the command register to a single message. This change was tested on real TSC2046 and ADS7843 controllers, but not the XPT2046 the workaround was originally created for. Confirming that the original modification to clear the command register does not impact either real controller. Fixes: 781a07da9bb94 ("Input: ads7846 - add dummy command register clearing cycle") Cc: stable@vger.kernel.org Co-developed-by: Mark Featherston Signed-off-by: Mark Featherston Signed-off-by: Kris Bahnsen --- V1 -> V2: Don't use rx_buf when clearing command reg drivers/input/touchscreen/ads7846.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c index 4b39f7212d35c..93edd2419db5b 100644 --- a/drivers/input/touchscreen/ads7846.c +++ b/drivers/input/touchscreen/ads7846.c @@ -327,7 +327,7 @@ struct ser_req { u8 ref_off; u16 scratch; struct spi_message msg; - struct spi_transfer xfer[8]; + struct spi_transfer xfer[7]; /* * DMA (thus cache coherency maintenance) requires the * transfer buffers to live in their own cache lines. @@ -403,16 +403,10 @@ static int ads7846_read12_ser(struct device *dev, unsigned command) spi_message_add_tail(&req->xfer[5], &req->msg); /* clear the command register */ - req->scratch = 0; - req->xfer[6].tx_buf = &req->scratch; - req->xfer[6].len = 1; + req->xfer[6].len = 3; + CS_CHANGE(req->xfer[6]); spi_message_add_tail(&req->xfer[6], &req->msg); - req->xfer[7].rx_buf = &req->scratch; - req->xfer[7].len = 2; - CS_CHANGE(req->xfer[7]); - spi_message_add_tail(&req->xfer[7], &req->msg); - scoped_guard(mutex, &ts->lock) { ads7846_stop(ts); status = spi_sync(spi, &req->msg); base-commit: dd6c438c3e64a5ff0b5d7e78f7f9be547803ef1b -- 2.34.1