]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: apple_z2 - fix reading incorrect reports after exiting sleep
authorSasha Finkelstein <fnkl.kernel@gmail.com>
Thu, 18 Dec 2025 18:15:23 +0000 (10:15 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 18 Dec 2025 20:17:10 +0000 (12:17 -0800)
Under certain conditions (more prevalent after a suspend/resume cycle),
the touchscreen controller can send the "boot complete" interrupt before
it actually finished booting. In those cases, attempting to read touch
data resuls in a stream of "not ready" messages being read and
interpreted as a touch report. Check that the response is in fact a
touch report and discard it otherwise.

Reported-by: pitust <piotr@stelmaszek.com>
Closes: https://oftc.catirclogs.org/asahi/2025-12-17#34878715;
Fixes: 471a92f8a21a ("Input: apple_z2 - add a driver for Apple Z2 touchscreens")
Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
Link: https://patch.msgid.link/20251218-z2-init-fix-v1-1-48e3aa239caf@gmail.com
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/apple_z2.c

index 0de161eae59a05c2e7a0bd9e71d0929ad57d91f8..271ababf0ad559a1d92e910c6120338945e2a376 100644 (file)
@@ -21,6 +21,7 @@
 #define APPLE_Z2_TOUCH_STARTED           3
 #define APPLE_Z2_TOUCH_MOVED             4
 #define APPLE_Z2_CMD_READ_INTERRUPT_DATA 0xEB
+#define APPLE_Z2_REPLY_INTERRUPT_DATA    0xE1
 #define APPLE_Z2_HBPP_CMD_BLOB           0x3001
 #define APPLE_Z2_FW_MAGIC                0x5746325A
 #define LOAD_COMMAND_INIT_PAYLOAD        0
@@ -142,6 +143,9 @@ static int apple_z2_read_packet(struct apple_z2 *z2)
        if (error)
                return error;
 
+       if (z2->rx_buf[0] != APPLE_Z2_REPLY_INTERRUPT_DATA)
+               return 0;
+
        pkt_len = (get_unaligned_le16(z2->rx_buf + 1) + 8) & 0xfffffffc;
 
        error = spi_read(z2->spidev, z2->rx_buf, pkt_len);