Skip to content

Commit b571809

Browse files
author
Jiri Kosina
committed
Merge branch 'for-6.5/wacom' into for-linus
- touch selftests for hid-wacom (Joshua Dickens) - conversion of hid-wacom to use ktime_t (Jason Gerecke)
2 parents ef4ca05 + 9a6c0e2 commit b571809

File tree

3 files changed

+85
-7
lines changed

3 files changed

+85
-7
lines changed

drivers/hid/wacom_wac.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,7 +1314,7 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
13141314
struct input_dev *pen_input = wacom->pen_input;
13151315
unsigned char *data = wacom->data;
13161316
int number_of_valid_frames = 0;
1317-
int time_interval = 15000000;
1317+
ktime_t time_interval = 15000000;
13181318
ktime_t time_packet_received = ktime_get();
13191319
int i;
13201320

@@ -1348,7 +1348,7 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
13481348
if (number_of_valid_frames) {
13491349
if (wacom->hid_data.time_delayed)
13501350
time_interval = ktime_get() - wacom->hid_data.time_delayed;
1351-
time_interval /= number_of_valid_frames;
1351+
time_interval = div_u64(time_interval, number_of_valid_frames);
13521352
wacom->hid_data.time_delayed = time_packet_received;
13531353
}
13541354

@@ -1359,7 +1359,7 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
13591359
bool range = frame[0] & 0x20;
13601360
bool invert = frame[0] & 0x10;
13611361
int frames_number_reversed = number_of_valid_frames - i - 1;
1362-
int event_timestamp = time_packet_received - frames_number_reversed * time_interval;
1362+
ktime_t event_timestamp = time_packet_received - frames_number_reversed * time_interval;
13631363

13641364
if (!valid)
13651365
continue;

drivers/hid/wacom_wac.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ struct hid_data {
324324
int ps_connected;
325325
bool pad_input_event_flag;
326326
unsigned short sequence_number;
327-
int time_delayed;
327+
ktime_t time_delayed;
328328
};
329329

330330
struct wacom_remote_data {

tools/testing/selftests/hid/tests/test_wacom_generic.py

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from hidtools.hut import HUT
3232
from hidtools.hid import HidUnit
3333
from . import base
34+
from . import test_multitouch
3435
import libevdev
3536
import pytest
3637

@@ -517,7 +518,7 @@ def get_report_usages(report):
517518
for usage in get_report_usages(report):
518519
yield usage
519520

520-
def assertName(self, uhdev):
521+
def assertName(self, uhdev, type):
521522
"""
522523
Assert that the name is as we expect.
523524
@@ -526,7 +527,7 @@ def assertName(self, uhdev):
526527
this assertion from the base class to work properly.
527528
"""
528529
evdev = uhdev.get_evdev()
529-
expected_name = uhdev.name + " Pen"
530+
expected_name = uhdev.name + type
530531
if "wacom" not in expected_name.lower():
531532
expected_name = "Wacom " + expected_name
532533
assert evdev.name == expected_name
@@ -549,6 +550,12 @@ def usage_id(page_name, usage_name):
549550
usage_id("Generic Desktop", "Y"): PhysRange(
550551
PhysRange.CENTIMETER, 5, 150
551552
),
553+
usage_id("Digitizers", "Width"): PhysRange(
554+
PhysRange.CENTIMETER, 5, 150
555+
),
556+
usage_id("Digitizers", "Height"): PhysRange(
557+
PhysRange.CENTIMETER, 5, 150
558+
),
552559
usage_id("Digitizers", "X Tilt"): PhysRange(PhysRange.DEGREE, 90, 180),
553560
usage_id("Digitizers", "Y Tilt"): PhysRange(PhysRange.DEGREE, 90, 180),
554561
usage_id("Digitizers", "Twist"): PhysRange(PhysRange.DEGREE, 358, 360),
@@ -603,7 +610,17 @@ def test_prop_pointer(self):
603610
pass
604611

605612

606-
class TestOpaqueTablet(BaseTest.TestTablet):
613+
class PenTabletTest(BaseTest.TestTablet):
614+
def assertName(self, uhdev):
615+
super().assertName(uhdev, " Pen")
616+
617+
618+
class TouchTabletTest(BaseTest.TestTablet):
619+
def assertName(self, uhdev):
620+
super().assertName(uhdev, " Finger")
621+
622+
623+
class TestOpaqueTablet(PenTabletTest):
607624
def create_device(self):
608625
return OpaqueTablet()
609626

@@ -842,3 +859,64 @@ def offset_rotation(value):
842859
libevdev.InputEvent(libevdev.EV_KEY.BTN_0, 0),
843860
],
844861
)
862+
863+
864+
class TestDTH2452Tablet(test_multitouch.BaseTest.TestMultitouch, TouchTabletTest):
865+
def create_device(self):
866+
return test_multitouch.Digitizer(
867+
"DTH 2452",
868+
rdesc="05 0d 09 04 a1 01 85 0c 95 01 75 08 15 00 26 ff 00 81 03 09 54 81 02 09 22 a1 02 05 0d 95 01 75 01 25 01 09 42 81 02 81 03 09 47 81 02 95 05 81 03 09 51 26 ff 00 75 10 95 01 81 02 35 00 65 11 55 0e 05 01 09 30 26 a0 44 46 96 14 81 42 09 31 26 9a 26 46 95 0b 81 42 05 0d 75 08 95 01 15 00 09 48 26 5f 00 46 7c 14 81 02 09 49 25 35 46 7d 0b 81 02 45 00 65 00 55 00 c0 05 0d 09 22 a1 02 05 0d 95 01 75 01 25 01 09 42 81 02 81 03 09 47 81 02 95 05 81 03 09 51 26 ff 00 75 10 95 01 81 02 35 00 65 11 55 0e 05 01 09 30 26 a0 44 46 96 14 81 42 09 31 26 9a 26 46 95 0b 81 42 05 0d 75 08 95 01 15 00 09 48 26 5f 00 46 7c 14 81 02 09 49 25 35 46 7d 0b 81 02 45 00 65 00 55 00 c0 05 0d 09 22 a1 02 05 0d 95 01 75 01 25 01 09 42 81 02 81 03 09 47 81 02 95 05 81 03 09 51 26 ff 00 75 10 95 01 81 02 35 00 65 11 55 0e 05 01 09 30 26 a0 44 46 96 14 81 42 09 31 26 9a 26 46 95 0b 81 42 05 0d 75 08 95 01 15 00 09 48 26 5f 00 46 7c 14 81 02 09 49 25 35 46 7d 0b 81 02 45 00 65 00 55 00 c0 05 0d 09 22 a1 02 05 0d 95 01 75 01 25 01 09 42 81 02 81 03 09 47 81 02 95 05 81 03 09 51 26 ff 00 75 10 95 01 81 02 35 00 65 11 55 0e 05 01 09 30 26 a0 44 46 96 14 81 42 09 31 26 9a 26 46 95 0b 81 42 05 0d 75 08 95 01 15 00 09 48 26 5f 00 46 7c 14 81 02 09 49 25 35 46 7d 0b 81 02 45 00 65 00 55 00 c0 05 0d 09 22 a1 02 05 0d 95 01 75 01 25 01 09 42 81 02 81 03 09 47 81 02 95 05 81 03 09 51 26 ff 00 75 10 95 01 81 02 35 00 65 11 55 0e 05 01 09 30 26 a0 44 46 96 14 81 42 09 31 26 9a 26 46 95 0b 81 42 05 0d 75 08 95 01 15 00 09 48 26 5f 00 46 7c 14 81 02 09 49 25 35 46 7d 0b 81 02 45 00 65 00 55 00 c0 05 0d 27 ff ff 00 00 75 10 95 01 09 56 81 02 75 08 95 0e 81 03 09 55 26 ff 00 75 08 b1 02 85 0a 06 00 ff 09 c5 96 00 01 b1 02 c0 06 00 ff 09 01 a1 01 09 01 85 13 15 00 26 ff 00 75 08 95 3f 81 02 06 00 ff 09 01 15 00 26 ff 00 75 08 95 3f 91 02 c0",
869+
input_info=(0x3, 0x056A, 0x0383),
870+
)
871+
872+
def test_contact_id_0(self):
873+
"""
874+
Bring a finger in contact with the tablet, then hold it down and remove it.
875+
876+
Ensure that even with contact ID = 0 which is usually given as an invalid
877+
touch event by most tablets with the exception of a few, that given the
878+
confidence bit is set to 1 it should process it as a valid touch to cover
879+
the few tablets using contact ID = 0 as a valid touch value.
880+
"""
881+
uhdev = self.uhdev
882+
evdev = uhdev.get_evdev()
883+
884+
t0 = test_multitouch.Touch(0, 50, 100)
885+
r = uhdev.event([t0])
886+
events = uhdev.next_sync_events()
887+
self.debug_reports(r, uhdev, events)
888+
889+
slot = self.get_slot(uhdev, t0, 0)
890+
891+
assert libevdev.InputEvent(libevdev.EV_KEY.BTN_TOUCH, 1) in events
892+
assert evdev.slots[slot][libevdev.EV_ABS.ABS_MT_TRACKING_ID] == 0
893+
assert evdev.slots[slot][libevdev.EV_ABS.ABS_MT_POSITION_X] == 50
894+
assert evdev.slots[slot][libevdev.EV_ABS.ABS_MT_POSITION_Y] == 100
895+
896+
t0.tipswitch = False
897+
if uhdev.quirks is None or "VALID_IS_INRANGE" not in uhdev.quirks:
898+
t0.inrange = False
899+
r = uhdev.event([t0])
900+
events = uhdev.next_sync_events()
901+
self.debug_reports(r, uhdev, events)
902+
assert libevdev.InputEvent(libevdev.EV_KEY.BTN_TOUCH, 0) in events
903+
assert evdev.slots[slot][libevdev.EV_ABS.ABS_MT_TRACKING_ID] == -1
904+
905+
def test_confidence_false(self):
906+
"""
907+
Bring a finger in contact with the tablet with confidence set to false.
908+
909+
Ensure that the confidence bit being set to false should not result in a touch event.
910+
"""
911+
uhdev = self.uhdev
912+
evdev = uhdev.get_evdev()
913+
914+
t0 = test_multitouch.Touch(1, 50, 100)
915+
t0.confidence = False
916+
r = uhdev.event([t0])
917+
events = uhdev.next_sync_events()
918+
self.debug_reports(r, uhdev, events)
919+
920+
slot = self.get_slot(uhdev, t0, 0)
921+
922+
assert not events

0 commit comments

Comments
 (0)