Skip to content

Commit 359673e

Browse files
jigpuJiri Kosina
authored andcommitted
HID: wacom: Support sequence numbers smaller than 16-bit
The current dropped packet reporting assumes that all sequence numbers are 16 bits in length. This results in misleading "Dropped" messages if the hardware uses fewer bits. For example, if a tablet uses only 8 bits to store its sequence number, once it rolls over from 255 -> 0, the driver will still be expecting a packet "256". This patch adjusts the logic to reset the next expected packet to logical_minimum whenever it overflows beyond logical_maximum. Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com> Tested-by: Joshua Dickens <joshua.dickens@wacom.com> Fixes: 6d09085 ("HID: wacom: Adding Support for new usages") Signed-off-by: Jiri Kosina <jkosina@suse.com>
1 parent 19591e1 commit 359673e

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

drivers/hid/wacom_wac.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2510,9 +2510,14 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
25102510
wacom_wac->hid_data.barrelswitch3 = value;
25112511
return;
25122512
case WACOM_HID_WD_SEQUENCENUMBER:
2513-
if (wacom_wac->hid_data.sequence_number != value)
2514-
hid_warn(hdev, "Dropped %hu packets", (unsigned short)(value - wacom_wac->hid_data.sequence_number));
2513+
if (wacom_wac->hid_data.sequence_number != value) {
2514+
int sequence_size = field->logical_maximum - field->logical_minimum + 1;
2515+
int drop_count = (value - wacom_wac->hid_data.sequence_number) % sequence_size;
2516+
hid_warn(hdev, "Dropped %d packets", drop_count);
2517+
}
25152518
wacom_wac->hid_data.sequence_number = value + 1;
2519+
if (wacom_wac->hid_data.sequence_number > field->logical_maximum)
2520+
wacom_wac->hid_data.sequence_number = field->logical_minimum;
25162521
return;
25172522
}
25182523

0 commit comments

Comments
 (0)