aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorVladimir Kondratyev <wulf@FreeBSD.org>2020-11-20 00:13:30 +0000
committerVladimir Kondratyev <wulf@FreeBSD.org>2020-11-20 00:13:30 +0000
commitb33ba834704eed574b752e1f97a8fb075514ab78 (patch)
tree9f843b37de973de9b1b1f806eebbf4794d9ca0f9 /sys/dev
parent65c207758a9586116a023dea8eb3d173e85cb0a9 (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/atkbdc/atkbdc.c2
-rw-r--r--sys/dev/atkbdc/atkbdcreg.h1
-rw-r--r--sys/dev/atkbdc/psm.c5
3 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/atkbdc/atkbdc.c b/sys/dev/atkbdc/atkbdc.c
index 692330754294..068faeeb9565 100644
--- a/sys/dev/atkbdc/atkbdc.c
+++ b/sys/dev/atkbdc/atkbdc.c
@@ -117,6 +117,8 @@ static struct atkbdc_quirks quirks[] = {
{"coreboot", NULL, NULL,
KBDC_QUIRK_KEEP_ACTIVATED | KBDC_QUIRK_IGNORE_PROBE_RESULT |
KBDC_QUIRK_RESET_AFTER_PROBE | KBDC_QUIRK_SETLEDS_ON_INIT},
+ /* KBDC hangs on Lenovo X120e and X121e after disabling AUX MUX */
+ {NULL, "LENOVO", NULL, KBDC_QUIRK_DISABLE_MUX_PROBE},
{NULL, NULL, NULL, 0}
};
diff --git a/sys/dev/atkbdc/atkbdcreg.h b/sys/dev/atkbdc/atkbdcreg.h
index 8d02489c9f3a..956861b657d6 100644
--- a/sys/dev/atkbdc/atkbdcreg.h
+++ b/sys/dev/atkbdc/atkbdcreg.h
@@ -211,6 +211,7 @@ typedef struct atkbdc_softc {
#define KBDC_QUIRK_IGNORE_PROBE_RESULT (1 << 1)
#define KBDC_QUIRK_RESET_AFTER_PROBE (1 << 2)
#define KBDC_QUIRK_SETLEDS_ON_INIT (1 << 3)
+#define KBDC_QUIRK_DISABLE_MUX_PROBE (1 << 4)
int aux_mux_enabled; /* active PS/2 multiplexing is enabled */
int aux_mux_port; /* current aux mux port */
} atkbdc_softc_t;
diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c
index ca1ab6178f20..f2c4cc71e242 100644
--- a/sys/dev/atkbdc/psm.c
+++ b/sys/dev/atkbdc/psm.c
@@ -517,7 +517,7 @@ static int verbose = PSM_DEBUG;
static int synaptics_support = 1;
static int trackpoint_support = 1;
static int elantech_support = 1;
-static int mux_disabled = 0;
+static int mux_disabled = -1;
/* for backward compatibility */
#define OLD_MOUSE_GETHWINFO _IOR('M', 1, old_mousehw_t)
@@ -6292,7 +6292,8 @@ enable_synaptics_mux(struct psm_softc *sc, enum probearg arg)
int active_ports_count = 0;
int active_ports_mask = 0;
- if (mux_disabled != 0)
+ if (mux_disabled == 1 || (mux_disabled == -1 &&
+ (kbdc->quirks & KBDC_QUIRK_DISABLE_MUX_PROBE) != 0))
return (FALSE);
version = enable_aux_mux(kbdc);