Skip to content

Commit f892476

Browse files
jigpumehmetb0
authored andcommitted
HID: wacom: Support sequence numbers smaller than 16-bit
BugLink: https://bugs.launchpad.net/bugs/2089340 [ Upstream commit 359673e ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Portia Stephens <portia.stephens@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
1 parent 4d7e399 commit f892476

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
@@ -2492,9 +2492,14 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
24922492
wacom_wac->hid_data.barrelswitch3 = value;
24932493
return;
24942494
case WACOM_HID_WD_SEQUENCENUMBER:
2495-
if (wacom_wac->hid_data.sequence_number != value)
2496-
hid_warn(hdev, "Dropped %hu packets", (unsigned short)(value - wacom_wac->hid_data.sequence_number));
2495+
if (wacom_wac->hid_data.sequence_number != value) {
2496+
int sequence_size = field->logical_maximum - field->logical_minimum + 1;
2497+
int drop_count = (value - wacom_wac->hid_data.sequence_number) % sequence_size;
2498+
hid_warn(hdev, "Dropped %d packets", drop_count);
2499+
}
24972500
wacom_wac->hid_data.sequence_number = value + 1;
2501+
if (wacom_wac->hid_data.sequence_number > field->logical_maximum)
2502+
wacom_wac->hid_data.sequence_number = field->logical_minimum;
24982503
return;
24992504
}
25002505

0 commit comments

Comments
 (0)