]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: rmi4 - fix register descriptor address calculation
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 5 May 2026 04:59:31 +0000 (21:59 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 12 Jun 2026 05:39:26 +0000 (22:39 -0700)
When reading the register descriptor, the base address is incremented by
1 to read the presence register block. However, after reading the
presence register block, the address is incorrectly incremented by only
1 byte (++addr) instead of the actual size of the presence block
(size_presence_reg). This causes the subsequent structure block read to
read from the wrong memory location if the presence block is larger than
1 byte.

Fix this by advancing the address by size_presence_reg.

Fixes: 2b6a321da9a2 ("Input: synaptics-rmi4 - add support for Synaptics RMI4 devices")
Cc: stable@vger.kernel.org
Assisted-by: Gemini:gemini-3.1-pro
Link: https://patch.msgid.link/20260505045952.1570713-1-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/rmi4/rmi_driver.c

index ccd9338a44dbef915c7b834b940e3416f641bd5c..06f5e3000cf00ef9c605c8252593285aa886ed72 100644 (file)
@@ -594,7 +594,7 @@ int rmi_read_register_desc(struct rmi_device *d, u16 addr,
        ret = rmi_read_block(d, addr, buf, size_presence_reg);
        if (ret)
                return ret;
-       ++addr;
+       addr += size_presence_reg;
 
        if (buf[0] == 0) {
                presense_offset = 3;