Input: ads7846 - convert to one message
authorOleksij Rempel <o.rempel@pengutronix.de>
Thu, 21 Jan 2021 07:18:28 +0000 (23:18 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 21 Jan 2021 07:21:54 +0000 (23:21 -0800)
commit6965eece2a89c3f1d00881c6052ee1e987870c08
treefe310fc65c45b289b6c555fb143da03c2caef11b
parent05b67b7a08fb64ecb80d365f5d745a473a020dba
Input: ads7846 - convert to one message

Convert multiple full duplex transfers in to a single transfer to reduce
CPU load.

Current driver version support following filtering modes:
- ads7846_no_filter() - not filtered
- ads7846_debounce_filter() - driver specific debounce filter
- pdata->filter - platform specific debounce filter (do any platform
provides such filter?)

Without filter this HW is not really usable, since the physic of
resistive touchscreen can provide some bounce effects. With driver internal
filter, we have constant amount of retries + debounce retries if some anomaly
was detected.

High amount of tiny SPI transfers is the primer reason of high CPU load
and interrupt frequency.

This patch create one SPI transfer with all fields and not optional retires. If
bounce anomaly was detected, we will make more transfer if needed.

Without this patch, we will get about 10% CPU load on iMX6S on pen-down event.
For example by holding stylus on the screen.

With this patch, depending in the amount of retries, the CPU load will
be 1% with "ti,debounce-rep = <3>".

One buffer transfer allows us to use PIO FIFO or DMA engine, depending
on the platform.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20201110085041.16303-3-o.rempel@pengutronix.de
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/ads7846.c