]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: tsc2007 - reduce I2C transactions for Z2 read
authorYuki Horii <yuuki198708@gmail.com>
Fri, 10 Apr 2026 07:41:00 +0000 (16:41 +0900)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 5 May 2026 00:27:43 +0000 (17:27 -0700)
The current implementation sends a separate power-down command
after reading the Z2 value, resulting in an extra I2C
transaction per measurement cycle.

The TSC2007 command byte contains a 2-bit power-down mode
selection field. By selecting the power-down state in the Z2
measurement command, the device powers down after the Z2 A/D
conversion completes, eliminating the subsequent power-down
transaction.

This reduces the number of I2C transactions by one per touch
measurement cycle, decreasing I2C bus overhead and improving
touch sampling performance.

Signed-off-by: Yuki Horii <yuuki198708@gmail.com>
Tested-by: Andreas Kemnade <andreas@kemnade.info> # GTA04
Link: https://patch.msgid.link/20260410074100.1660-1-horiiyuk@ishida.co.jp
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/tsc2007_core.c

index 524f14eb3da2f95f8ea21288b083f87c118b7c6c..f9b3d2598933ce2bb9ebee3f851268a4888dcc32 100644 (file)
@@ -61,10 +61,8 @@ static void tsc2007_read_values(struct tsc2007 *tsc, struct ts_event *tc)
 
        /* turn y+ off, x- on; we'll use formula #1 */
        tc->z1 = tsc2007_xfer(tsc, READ_Z1);
-       tc->z2 = tsc2007_xfer(tsc, READ_Z2);
-
-       /* Prepare for next touch reading - power down ADC, enable PENIRQ */
-       tsc2007_xfer(tsc, PWRDOWN);
+       /* Read Z2 and power down ADC after A/D conversion, enable PENIRQ */
+       tc->z2 = tsc2007_xfer(tsc, (TSC2007_POWER_OFF_IRQ_EN | TSC2007_MEASURE_Z2));
 }
 
 u32 tsc2007_calculate_resistance(struct tsc2007 *tsc, struct ts_event *tc)