]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
HID: wacom: Do not warn about dropped packets for first packet
authorJason Gerecke <jason.gerecke@wacom.com>
Mon, 9 Sep 2024 20:32:08 +0000 (13:32 -0700)
committerJiri Kosina <jkosina@suse.com>
Tue, 10 Sep 2024 21:47:03 +0000 (23:47 +0200)
The driver currently assumes that the first sequence number it will see
is going to be 0. This is not a realiable assumption and can break if,
for example, the tablet has already been running for some time prior to
the kernel driver connecting to the device. This commit initializes the
expected sequence number to -1 and will only print the "Dropped" warning
the it has been updated to a non-negative value.

Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Tested-by: Joshua Dickens <joshua.dickens@wacom.com>
Fixes: 6d09085b38e5 ("HID: wacom: Adding Support for new usages")
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/wacom_wac.c
drivers/hid/wacom_wac.h

index 22b0d281ff5ca813a37d212415472b3ef6110965..b7129cc7c6bf6e8d48c8b6ad300a3fef34af5c37 100644 (file)
@@ -2386,6 +2386,9 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
                wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS3, 0);
                features->quirks &= ~WACOM_QUIRK_PEN_BUTTON3;
                break;
+       case WACOM_HID_WD_SEQUENCENUMBER:
+               wacom_wac->hid_data.sequence_number = -1;
+               break;
        }
 }
 
@@ -2510,7 +2513,8 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
                wacom_wac->hid_data.barrelswitch3 = value;
                return;
        case WACOM_HID_WD_SEQUENCENUMBER:
-               if (wacom_wac->hid_data.sequence_number != value) {
+               if (wacom_wac->hid_data.sequence_number != value &&
+                   wacom_wac->hid_data.sequence_number >= 0) {
                        int sequence_size = field->logical_maximum - field->logical_minimum + 1;
                        int drop_count = (value - wacom_wac->hid_data.sequence_number) % sequence_size;
                        hid_warn(hdev, "Dropped %d packets", drop_count);
index 55e0c7a9fdcb4bdad03ec8364a1cc5098905facc..c8803d5c6a71e70ce7ade3a7e3f2b5e1f6dec273 100644 (file)
@@ -326,7 +326,7 @@ struct hid_data {
        int bat_connected;
        int ps_connected;
        bool pad_input_event_flag;
-       unsigned short sequence_number;
+       int sequence_number;
        ktime_t time_delayed;
 };