HID: uclogic: Always shift touch reports to zero
authorNikolai Kondrashov <spbnick@gmail.com>
Sun, 8 May 2022 16:01:43 +0000 (18:01 +0200)
committerJiri Kosina <jkosina@suse.cz>
Wed, 11 May 2022 12:19:27 +0000 (14:19 +0200)
Always decrement touch report values to have the range start with zero,
regardless if flipped or not. This fixes the future non-flipped touch
strip reports.

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-uclogic-core.c
drivers/hid/hid-uclogic-params.c

index cc53625ed1f74ec7f207421f5fa50303e5598cc1..c4ab94d58a0fb6ed610718d9871ae724c8ad3ddb 100644 (file)
@@ -386,15 +386,16 @@ static int uclogic_raw_event_frame(
        }
 
        /* If need to, and can, transform the touch ring reports */
-       if (frame->touch_byte > 0 && frame->touch_byte < size &&
-           frame->touch_flip_at != 0) {
+       if (frame->touch_byte > 0 && frame->touch_byte < size) {
                __s8 value = data[frame->touch_byte];
-               if (value != 0) {
-                       value = frame->touch_flip_at - value;
-                       if (value < 0)
-                               value = frame->touch_max + value;
 
-                       data[frame->touch_byte] = value;
+               if (value != 0) {
+                       if (frame->touch_flip_at != 0) {
+                               value = frame->touch_flip_at - value;
+                               if (value <= 0)
+                                       value = frame->touch_max + value;
+                       }
+                       data[frame->touch_byte] = value - 1;
                }
        }
 
index 459f15288ccc15e33ca3d11491e0a50df3ce7267..163efd026881c1771af1b6594fbda422d9cbb1b6 100644 (file)
@@ -889,7 +889,7 @@ static int uclogic_params_huion_init(struct uclogic_params *params,
                                UCLOGIC_RDESC_V2_FRAME_TOUCH_DEV_ID_BYTE;
                        p.frame_list[1].touch_byte = 5;
                        p.frame_list[1].touch_max = 12;
-                       p.frame_list[1].touch_flip_at = 6;
+                       p.frame_list[1].touch_flip_at = 7;
 
                        /* Create v2 frame dial parameters */
                        rc = uclogic_params_frame_init_with_desc(