linux_dsm_epyc7002/drivers/input/touchscreen
Paul Cercueil 9b5db7aab4 Input: goodix - poll the 'buffer status' bit before reading data
The Goodix panel triggers an interrupt on touch events. However, its
registers will contain the valid values a short time after the
interrupt, and not when it's raised. At that moment, the 'buffer status'
bit is set.

Previously, if the 'buffer status' bit was not set when the registers
were read, the data was discarded and no input event was emitted,
causing "finger down" or "finger up" events to be missed sometimes.

This went unnoticed until v4.9, as the DesignWare I2C driver commonly
used with this driver had enough latency for that bug to never trigger
until commit 2702ea7dbe ("i2c: designware: wait for disable/enable only
if necessary").

Now, in the IRQ handler we will poll (with a timeout) the 'buffer status'
bit and process the data of the panel as soon as this bit gets set.

Note that the Goodix panel will send a few spurious interrupts after the
'finger up' event, in which the 'buffer status' bit will never be set.

Cc: Bastien Nocera <hadess@hadess.net>
Cc: russianneuromancer@ya.ru
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
[hdegoede@redhat.com: Change poll loop to use jiffies,
                      add comment about typical poll time]
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
[dtor: rearranged control flow a bit to avoid explicit goto and double
check]
Reviewed-by: Bastien Nocera <hadess@hadess.net>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
2017-10-19 16:50:39 -07:00
..
88pm860x-ts.c Input: touchscreen - drop calls to platform_set_drvdata and i2c_set_clientdata 2017-01-21 23:51:53 -08:00
ad7877.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
ad7879-i2c.c Input: ad7879 - return plain error code from ad7879_probe() 2017-03-01 09:42:44 -08:00
ad7879-spi.c Input: ad7879 - return plain error code from ad7879_probe() 2017-03-01 09:42:44 -08:00
ad7879.c Input: ad7879 - do not manipulate capability bits directly 2017-03-01 09:42:45 -08:00
ad7879.h Input: ad7879 - return plain error code from ad7879_probe() 2017-03-01 09:42:44 -08:00
ads7846.c Input: ads7846 - constify attribute_group structures 2017-07-12 14:19:31 -07:00
ar1021_i2c.c Input: ar1021_i2c - use BIT to check for a bit 2017-05-01 12:30:00 -07:00
atmel_mxt_ts.c Input: atmel_mxt_ts - add support for reset line 2017-08-21 13:10:19 -07:00
atmel-wm97xx.c Input: atmel-wm97xx - drop unnecessary error messages 2017-01-18 11:33:08 -08:00
auo-pixcir-ts.c Input: auo-pixcir-ts - simplify function return logic 2015-10-02 11:44:18 -07:00
bcm_iproc_tsc.c Input: bcm_iproc_tsc - use syscon to access shared registers 2016-04-06 16:11:56 -07:00
bu21013_ts.c Input: touchscreen - drop unnecessary calls to device_init_wakeup 2017-01-21 23:53:30 -08:00
chipone_icn8318.c Input: icn8318 - use of_touchscreen helpers for inverting / swapping axes 2016-07-15 14:50:56 -07:00
colibri-vf50-ts.c Input: touchscreen - drop calls to platform_set_drvdata and i2c_set_clientdata 2017-01-21 23:51:53 -08:00
cy8ctmg110_ts.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
cyttsp4_core.c lib/vsprintf.c: remove %Z support 2017-02-27 18:43:47 -08:00
cyttsp4_core.h
cyttsp4_i2c.c Input: cyttsp - use PTR_ERR_OR_ZERO() 2015-10-02 11:44:19 -07:00
cyttsp4_spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
cyttsp_core.c Input: of_touchscreen - add support for inverted / swapped axes 2016-07-15 14:50:53 -07:00
cyttsp_core.h Input: cyttsp - switch to using device properties 2016-01-27 14:32:48 -08:00
cyttsp_i2c_common.c
cyttsp_i2c.c Input: cyttsp - use devres managed resource allocations 2016-01-27 14:32:46 -08:00
cyttsp_spi.c Input: cyttsp - use devres managed resource allocations 2016-01-27 14:32:46 -08:00
da9034-ts.c
da9052_tsi.c
dynapro.c Input: dynapro - constify serio_device_id 2017-08-18 17:15:10 -07:00
edt-ft5x06.c Input: edt-ft5x06 - fix access to non-existing register 2017-09-11 14:23:41 -07:00
eeti_ts.c Input: eeti_ts - switch to gpiod API 2017-04-05 08:52:33 -07:00
egalax_ts_serial.c Input: egalax_ts_serial - fix potential NULL dereference on error 2015-12-19 23:44:40 -08:00
egalax_ts.c Input: touchscreen - drop unnecessary calls to input_set_drvdata 2017-01-22 17:22:31 -08:00
ektf2127.c Input: ektf2127 - mark PM functions as __maybe_unused 2016-10-03 16:36:52 -07:00
elants_i2c.c Input: elants_i2c - constify attribute_group structures 2017-07-12 14:19:30 -07:00
elo.c Input: elo - constify serio_device_id 2017-08-18 17:15:13 -07:00
fsl-imx25-tcq.c Input: touchscreen - use local variables consistently 2017-01-21 23:53:17 -08:00
fujitsu_ts.c Input: fujitsu_ts - constify serio_device_id 2017-08-18 17:15:19 -07:00
goodix.c Input: goodix - poll the 'buffer status' bit before reading data 2017-10-19 16:50:39 -07:00
gunze.c Input: gunze - constify serio_device_id 2017-08-18 17:15:28 -07:00
hampshire.c Input: hampshire - constify serio_device_id 2017-08-18 17:15:30 -07:00
hp680_ts_input.c
htcpen.c
ili210x.c Input: touchscreen - drop unnecessary calls to input_set_drvdata 2017-01-22 17:22:31 -08:00
imx6ul_tsc.c Input: imx6ul_tsc - fix error handling 2017-04-12 08:47:17 -07:00
inexio.c Input: inexio - constify serio_device_id 2017-08-18 17:15:31 -07:00
ipaq-micro-ts.c
jornada720_ts.c Input: jornada720_ts - get rid of mach/irqs.h and mach/hardware.h includes 2016-09-10 10:47:48 -07:00
Kconfig Input: add support for the STMicroelectronics FingerTip touchscreen 2017-06-05 15:35:34 -07:00
lpc32xx_ts.c Input: lpc32xx_ts - check for clk_prepare_enable() error 2017-04-12 08:47:18 -07:00
mainstone-wm97xx.c
Makefile Input: add support for the STMicroelectronics FingerTip touchscreen 2017-06-05 15:35:34 -07:00
max11801_ts.c Input: max11801_ts - add missing of_match_table 2017-03-29 00:25:03 -07:00
mc13783_ts.c Input: mc13783_ts - remove deprecated create_singletheread_workqueue 2016-08-25 10:11:00 -07:00
mcs5000_ts.c Input: mcs - move header file out of I2C realm 2017-05-22 17:26:57 -07:00
melfas_mip4.c Input: melfas_mip4 - ensure that device is present 2017-03-29 00:25:01 -07:00
migor_ts.c Input: migor-ts - mark PM functions as __maybe_unused 2016-05-19 09:35:15 -07:00
mk712.c Annotate hardware config module parameters in drivers/input/ 2017-04-20 12:02:32 +01:00
mms114.c Input: mms114 - move header file out of I2C realm 2017-05-22 17:26:58 -07:00
mtouch.c Input: mtouch - constify serio_device_id 2017-08-18 17:15:32 -07:00
mxs-lradc-ts.c Input: mxs-lradc - make symbol mxs_lradc_ts_irq_names static 2017-08-14 20:28:47 -07:00
of_touchscreen.c Input: of_touchscreen - add support for inverted / swapped axes 2016-07-15 14:50:53 -07:00
pcap_ts.c Input: pcap_ts - use to_delayed_work 2016-01-02 21:08:53 -08:00
penmount.c Input: penmount - constify serio_device_id 2017-08-18 17:15:34 -07:00
pixcir_i2c_ts.c Input: touchscreen - use local variables consistently 2017-01-21 23:53:17 -08:00
raydium_i2c_ts.c Input: raydium_i2c_ts - constify attribute_group structures 2017-07-12 14:19:29 -07:00
rohm_bu21023.c Input: touchscreen - use local variables consistently 2017-01-21 23:53:17 -08:00
s3c2410_ts.c Input: s3c2410_ts - handle return value of clk_prepare_enable 2017-06-02 17:57:26 -07:00
silead.c Input: silead - disable interrupt during suspend 2017-05-29 19:58:25 -07:00
sis_i2c.c Input: sis_i2c - drop unnecessary call to i2c_set_clientdata 2017-01-18 14:29:57 -08:00
st1232.c Input: touchscreen - drop unnecessary calls to device_init_wakeup 2017-01-21 23:53:30 -08:00
stmfts.c Input: stmfts - fix setting ABS_MT_POSITION_* maximum size 2017-10-18 17:54:13 -07:00
stmpe-ts.c Input: stmpe-ts - restore kerneldoc 2016-03-02 09:40:20 -08:00
sun4i-ts.c Input: sun4i-ts - constify thermal_zone_of_device_ops structures 2017-08-14 22:12:06 -07:00
sur40.c Input: sur40 - skip all blobs that are not touches 2017-07-12 14:20:28 -07:00
surface3_spi.c Input: surface3_spi - make const array header static, reduces object code size 2017-09-11 14:23:39 -07:00
sx8654.c Input: touchscreen - drop calls to platform_set_drvdata and i2c_set_clientdata 2017-01-21 23:51:53 -08:00
ti_am335x_tsc.c Input: ti_am335x_tsc - fix incorrect step config for 5 wire touchscreen 2017-10-18 17:54:12 -07:00
touchit213.c Input: touchit213 - constify serio_device_id 2017-08-18 17:15:35 -07:00
touchright.c Input: touchright - constify serio_device_id 2017-08-18 17:15:36 -07:00
touchwin.c Input: touchwin - constify serio_device_id 2017-08-18 17:15:37 -07:00
tps6507x-ts.c Input: tps6507x-ts - update to devm_* API 2017-03-15 15:44:49 -07:00
ts4800-ts.c Input: ts4800-ts - add missing of_node_put after calling of_parse_phandle 2016-07-15 10:50:12 -07:00
tsc40.c Input: tsc40 - constify serio_device_id 2017-08-18 17:15:40 -07:00
tsc200x-core.c Input: tsc2004/5 - switch to using generic device properties 2017-02-12 14:55:09 -08:00
tsc200x-core.h Input: tsc200x - report proper input_dev name 2016-07-20 17:50:24 -07:00
tsc2004.c Input: tsc200x - report proper input_dev name 2016-07-20 17:50:24 -07:00
tsc2005.c Input: tsc2005 - add OF device table 2017-02-12 14:55:08 -08:00
tsc2007_core.c Input: tsc2007 - move header file out of I2C realm 2017-05-22 17:26:58 -07:00
tsc2007_iio.c Input: tsc2007 - rename function tsc2007_calculate_pressure 2017-02-22 23:55:07 -08:00
tsc2007.h Input: tsc2007 - rename function tsc2007_calculate_pressure 2017-02-22 23:55:07 -08:00
ucb1400_ts.c Input: ucb1400_ts - fix suspend and resume handling 2017-09-11 14:23:56 -07:00
usbtouchscreen.c Input: usbtouchscreen - avoid unresponsive TSC-30 touch screen 2015-07-23 14:43:17 -07:00
w90p910_ts.c
wacom_i2c.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
wacom_w8001.c Input: wacom_w8001 - constify serio_device_id 2017-08-18 17:15:41 -07:00
wdt87xx_i2c.c Input: wdt87xx_i2c - fix the flash erase issue 2016-09-05 10:31:47 -07:00
wm97xx-core.c Input: wm97xx - make missing platform data non-fatal 2017-01-24 10:27:34 -08:00
wm831x-ts.c
wm9705.c
wm9712.c
wm9713.c
zet6223.c Input: zet6223 - export OF device ID as module aliases 2017-02-20 15:12:26 -08:00
zforce_ts.c Input: zforce_ts - fix dual touch recognition 2016-04-25 14:27:56 -07:00
zylonite-wm97xx.c