]> git.baikalelectronics.ru Git - kernel.git/commitdiff
HID: wacom: Set a default resolution for older tablets
authorPing Cheng <pinglinux@gmail.com>
Sun, 9 Apr 2023 16:42:29 +0000 (09:42 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 09:36:02 +0000 (11:36 +0200)
commit 08a46b4190d345544d04ce4fe2e1844b772b8535 upstream.

Some older tablets may not report physical maximum for X/Y
coordinates. Set a default to prevent undefined resolution.

Signed-off-by: Ping Cheng <ping.cheng@wacom.com>
Link: https://lore.kernel.org/r/20230409164229.29777-1-ping.cheng@wacom.com
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hid/wacom_wac.c

index aa477a43a3123a7e067c54148b571fffc97b1e75..05989aac9c0cb9dafb4d726450e6e6b0c5a7cc2e 100644 (file)
@@ -1853,6 +1853,7 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage,
        int fmax = field->logical_maximum;
        unsigned int equivalent_usage = wacom_equivalent_usage(usage->hid);
        int resolution_code = code;
+       int resolution = hidinput_calc_abs_res(field, resolution_code);
 
        if (equivalent_usage == HID_DG_TWIST) {
                resolution_code = ABS_RZ;
@@ -1875,8 +1876,15 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage,
        switch (type) {
        case EV_ABS:
                input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
-               input_abs_set_res(input, code,
-                                 hidinput_calc_abs_res(field, resolution_code));
+
+               /* older tablet may miss physical usage */
+               if ((code == ABS_X || code == ABS_Y) && !resolution) {
+                       resolution = WACOM_INTUOS_RES;
+                       hid_warn(input,
+                                "Wacom usage (%d) missing resolution \n",
+                                code);
+               }
+               input_abs_set_res(input, code, resolution);
                break;
        case EV_KEY:
                input_set_capability(input, EV_KEY, code);