aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Kondratyev <wulf@FreeBSD.org>2023-11-02 06:20:20 +0000
committerVladimir Kondratyev <wulf@FreeBSD.org>2023-11-27 15:20:16 +0000
commit16a379ffde4baadc5bc5bae23658b0bf2ff6ab2f (patch)
treed4a182dd61b3c2b3d152dba88e67801d46f96914
parentdad62799f5bd44b14ae1ed704edfb60772ae524a (diff)
downloadsrc-16a379ffde4baadc5bc5bae23658b0bf2ff6ab2f.tar.gz
src-16a379ffde4baadc5bc5bae23658b0bf2ff6ab2f.zip
hmt(4): Do not require input report HID usages to be a member of TLC
Some touchpads places button usages (in HID report descriptor) in to the 2-nd level collection rather than in to the top level one. That confuses current code. Remove collection level check in HID report descriptor parser to fix device detection. Reported by: Peter Much <pmc@citylink.dinoex.sub.org> PR: 267094 (cherry picked from commit 1d46c8e5c2702c141c6be982b3ca44e74d1cb8f1)
-rw-r--r--sys/dev/hid/hmt.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/dev/hid/hmt.c b/sys/dev/hid/hmt.c
index 199a6a2ff045..f6b593222317 100644
--- a/sys/dev/hid/hmt.c
+++ b/sys/dev/hid/hmt.c
@@ -744,14 +744,13 @@ hmt_hid_parse(struct hmt_softc *sc, const void *d_ptr, hid_size_t d_len,
else
break;
- if (hi.collevel == 1 && left_btn == 2 &&
+ if (left_btn == 2 &&
hi.usage == HID_USAGE2(HUP_BUTTON, 1)) {
has_int_button = true;
sc->int_btn_loc = hi.loc;
break;
}
- if (hi.collevel == 1 &&
- hi.usage >= HID_USAGE2(HUP_BUTTON, left_btn) &&
+ if (hi.usage >= HID_USAGE2(HUP_BUTTON, left_btn) &&
hi.usage <= HID_USAGE2(HUP_BUTTON, HMT_BTN_MAX)) {
btn = (hi.usage & 0xFFFF) - left_btn;
setbit(sc->buttons, btn);
@@ -760,13 +759,13 @@ hmt_hid_parse(struct hmt_softc *sc, const void *d_ptr, hid_size_t d_len,
sc->max_button = btn + 1;
break;
}
- if (hi.collevel == 1 && hi.usage ==
+ if (hi.usage ==
HID_USAGE2(HUP_DIGITIZERS, HUD_CONTACTCOUNT)) {
cont_count_found = true;
sc->cont_count_loc = hi.loc;
break;
}
- if (hi.collevel == 1 && hi.usage ==
+ if (hi.usage ==
HID_USAGE2(HUP_DIGITIZERS, HUD_SCAN_TIME)) {
scan_time_found = true;
sc->scan_time_loc = hi.loc;