Page MenuHomeFreeBSD

D28196.diff
No OneTemporary

D28196.diff

diff --git a/share/man/man4/hconf.4 b/share/man/man4/hconf.4
--- a/share/man/man4/hconf.4
+++ b/share/man/man4/hconf.4
@@ -23,7 +23,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 14, 2020
+.Dd January 18, 2021
.Dt HCONF 4
.Os
.Sh NAME
@@ -61,11 +61,11 @@
.Xr loader 8
tunable as well.
.Bl -tag -width indent
-.It Va dev.hmt.*.input_mode
+.It Va dev.hconf.*.input_mode
HID device input mode: 0 = mouse, 3 = touchpad.
-.It Va dev.hmt.*.surface_switch
+.It Va dev.hconf.*.surface_switch
Enable / disable switch for surface: 1 = on, 0 = off.
-.It Va dev.hmt.*.buttons_switch
+.It Va dev.hconf.*.buttons_switch
Enable / disable switch for buttons: 1 = on, 0 = off.
.It Va hw.hid.hconf.debug
Debug output level, where 0 is debugging disabled and larger values increase
diff --git a/sys/dev/hid/hconf.c b/sys/dev/hid/hconf.c
--- a/sys/dev/hid/hconf.c
+++ b/sys/dev/hid/hconf.c
@@ -2,6 +2,7 @@
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2019 Vladimir Kondratyev <wulf@FreeBSD.org>
+ * Copyright (c) 2020 Andriy Gapon <avg@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -69,21 +70,25 @@
const char *name;
const char *descr;
uint16_t usage;
+ u_int value;
} feature_control_descrs[] = {
[INPUT_MODE] = {
.name = "input_mode",
.descr = "HID device input mode: 0 = mouse, 3 = touchpad",
- .usage = HUD_INPUT_MODE
+ .usage = HUD_INPUT_MODE,
+ .value = HCONF_INPUT_MODE_MOUSE,
},
[SURFACE_SWITCH] = {
.name = "surface_switch",
.descr = "Enable / disable switch for surface: 1 = on, 0 = off",
- .usage = HUD_SURFACE_SWITCH
+ .usage = HUD_SURFACE_SWITCH,
+ .value = 1,
},
[BUTTONS_SWITCH] = {
.name = "buttons_switch",
.descr = "Enable / disable switch for buttons: 1 = on, 0 = off",
- .usage = HUD_BUTTONS_SWITCH
+ .usage = HUD_BUTTONS_SWITCH,
+ .value = 1,
},
};
@@ -145,35 +150,25 @@
fbuf = malloc(fc->rlen, M_TEMP, M_WAITOK | M_ZERO);
sx_xlock(&sc->lock);
- /* Reports are not strictly required to be readable */
- error = hid_get_report(sc->dev, fbuf, fc->rlen, NULL,
- HID_FEATURE_REPORT, fc->rid);
-
/*
- * If the report is write-only, then we have to check for other controls
- * that may share the same report and set their bits as well.
+ * Assume the report is write-only. Then we have to check for other
+ * controls that may share the same report and set their bits as well.
*/
- if (error != 0) {
- bzero(fbuf + 1, fc->rlen - 1);
- for (i = 0; i < nitems(sc->feature_controls); i++) {
- struct feature_control *ofc = &sc->feature_controls[i];
-
- /* Skip unrelated report IDs. */
- if (ofc->rid != fc->rid)
- continue;
- /* Skip self. */
- if (ofc == fc)
- continue;
- KASSERT(fc->rlen == ofc->rlen,
- ("different lengths for report %d: %d vs %d\n",
- fc->rid, fc->rlen, ofc->rlen));
- hid_put_udata(fbuf + 1, ofc->rlen - 1, &ofc->loc,
- ofc->val);
- }
+ bzero(fbuf + 1, fc->rlen - 1);
+ for (i = 0; i < nitems(sc->feature_controls); i++) {
+ struct feature_control *ofc = &sc->feature_controls[i];
+
+ /* Skip unrelated report IDs. */
+ if (ofc->rid != fc->rid)
+ continue;
+ KASSERT(fc->rlen == ofc->rlen,
+ ("different lengths for report %d: %d vs %d\n",
+ fc->rid, fc->rlen, ofc->rlen));
+ hid_put_udata(fbuf + 1, ofc->rlen - 1, &ofc->loc,
+ i == ctrl_id ? val : ofc->val);
}
fbuf[0] = fc->rid;
- hid_put_udata(fbuf + 1, fc->rlen - 1, &fc->loc, val);
error = hid_set_report(sc->dev, fbuf, fc->rlen,
HID_FEATURE_REPORT, fc->rid);
@@ -277,11 +272,9 @@
sc, i, hconf_feature_control_handler, "I",
feature_control_descrs[i].descr);
}
+ sc->feature_controls[i].val = feature_control_descrs[i].value;
}
- /* Fully enable (at least, try to). */
- (void)hconf_set_feature_control(sc, SURFACE_SWITCH, 1);
- (void)hconf_set_feature_control(sc, BUTTONS_SWITCH, 1);
return (0);
}
@@ -305,6 +298,10 @@
for (i = 0; i < nitems(sc->feature_controls); i++) {
if (sc->feature_controls[i].rlen < 2)
continue;
+ /* Do not update usages to default value */
+ if (sc->feature_controls[i].val ==
+ feature_control_descrs[i].value)
+ continue;
error = hconf_set_feature_control(sc, i,
sc->feature_controls[i].val);
if (error != 0) {

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 8, 12:00 PM (20 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16526203
Default Alt Text
D28196.diff (4 KB)

Event Timeline