From: Marek Vasut <marex@denx.de>
To: Kees Bakker <kees@ijzerbout.nl>,
linux-input@vger.kernel.org,
Nathan Chancellor <nathan@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Linus Walleij <linus.walleij@linaro.org>,
kernel@dh-electronics.com
Subject: Re: [PATCH] Input: ads7846 - add dummy command register clearing cycle
Date: Tue, 12 Nov 2024 22:52:33 +0100 [thread overview]
Message-ID: <474c8a72-07c9-4a9b-a189-a9a7b533f40a@denx.de> (raw)
In-Reply-To: <da5aab40-4a50-4794-b9b8-d473a832451c@ijzerbout.nl>
On 11/12/24 8:40 PM, Kees Bakker wrote:
> Op 20-03-2024 om 08:23 schreef Marek Vasut:
>> On STM32MP135F with XPT2046 touch controller attached to SPI bus, it has
>> been observed that the touch controller locks up after Linux kernel has
>> finished booting. Adding a dummy cycle on the SPI bus seems to mitigate
>> the lock up.
>>
>> The XPTEK XPT2046 controller seems to be an identical clone of TI
>> TSC2046,
>> the datasheet seems to be a clone of the TI part as well, text seem to be
>> word to word identical, except all the pictures have been drawn again.
>>
>> This touch controller is present e.g. on WaveShare 3.2inch RPi LCD (B)
>> panel, the DTO provided by WaveShare uses 50 kHz SPI clock for this
>> touch controller, which is unusually low and possibly might have been
>> used as some sort of workaround for an issue. The SPI LCD on the same
>> bus uses 16 MHz clock.
>>
>> SPI bus DT properties spi-cs-setup-delay-ns, spi-cs-hold-delay-ns,
>> spi-cs-inactive-delay-ns, spi-rx-delay-us, spi-tx-delay-us set to
>> range of 500ns..5us seem to have no impact on the behavior of the
>> touch controller, the lock up always occurs. The STM32MP13xx SPI
>> controller users GPIO control for the nCS pins.
>>
>> Since the dummy cycle happens after the controller has been put into
>> power down mode and both ADC and REF regulators have been disabled,
>> the cycle should have no impact on the configuration of the controller,
>> i.e. it should be a NOP.
>>
>> It is unclear whether this problem is specific to this cloned XPT2046
>> controller, or whether this is also present on TSC2046. A test on
>> either TSC2046 or ADS7846 would be very welcome.
>>
>> Signed-off-by: Marek Vasut <marex@denx.de>
>> ---
>> Cc: Arnd Bergmann <arnd@arndb.de>
>> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: Linus Walleij <linus.walleij@linaro.org>
>> Cc: kernel@dh-electronics.com
>> Cc: linux-input@vger.kernel.org
>> ---
>> drivers/input/touchscreen/ads7846.c | 12 +++++++++++-
>> 1 file changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/
>> touchscreen/ads7846.c
>> index d2bbb436a77df..90b5251797963 100644
>> --- a/drivers/input/touchscreen/ads7846.c
>> +++ b/drivers/input/touchscreen/ads7846.c
>> @@ -404,9 +404,19 @@ static int ads7846_read12_ser(struct device *dev,
>> unsigned command)
>> req->xfer[5].rx_buf = &req->scratch;
>> req->xfer[5].len = 2;
>> - CS_CHANGE(req->xfer[5]);
>> 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;
>> + 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);
>> +
>> mutex_lock(&ts->lock);
>> ads7846_stop(ts);
>> status = spi_sync(spi, &req->msg);
> Sorry for sending a comment this late.
>
> You need to increase the size of req->xfer, because it is an
> array of size 6.
> struct spi_transfer xfer[6];
>
> You're writing beyond the array boundary.
A fix for that was already posted by Nathan:
[PATCH] Input: ads7846 - Increase xfer array size in 'struct ser_req'
Sorry for the inconvenience.
prev parent reply other threads:[~2024-11-12 21:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-20 7:23 [PATCH] Input: ads7846 - add dummy command register clearing cycle Marek Vasut
2024-06-23 18:21 ` Marek Vasut
2024-06-25 20:50 ` Dmitry Torokhov
2024-06-26 12:40 ` Linus Walleij
2024-06-26 22:33 ` Aaro Koskinen
2024-10-31 18:21 ` Marek Vasut
2024-11-08 6:08 ` Dmitry Torokhov
2024-06-26 20:08 ` Marek Vasut
2024-11-12 19:40 ` Kees Bakker
2024-11-12 21:52 ` Marek Vasut [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=474c8a72-07c9-4a9b-a189-a9a7b533f40a@denx.de \
--to=marex@denx.de \
--cc=arnd@arndb.de \
--cc=dmitry.torokhov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=kees@ijzerbout.nl \
--cc=kernel@dh-electronics.com \
--cc=linus.walleij@linaro.org \
--cc=linux-input@vger.kernel.org \
--cc=nathan@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).