Skip to content

Commit 68da166

Browse files
committed
Input: i8042 - disable active multiplexing by default
Active multiplexing is a nice feature as it allows several pointing devices (such as touchpad and external mouse) use their native protocols at the same time. Unfortunately many manufacturers do not implement the feature properly even though they advertise it. The problematic implementations are never fixed, since Windows by default does not use this mode, and move from one BIOS/model of laptop to another. When active multiplexing is broken turning it on usually results in touchpad, keyboard, or both unresponsive. With PS/2 usage on decline (most of PS/2 devices in use nowadays are internal laptop touchpads), I expect number of users who have laptops with working MUX implementation, docking stations with external PS/2 ports, and who are still using external PS/2 mice, to be rather small. Let's flip the default to be OFF and allow activating it through i8042.nomux=0 kernel option. We'll also keep DMI table where we can record known good models. Acked-by: Jiri Kosina <jkosina@suse.cz> Acked-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
1 parent 9ff84a1 commit 68da166

File tree

3 files changed

+10
-275
lines changed

3 files changed

+10
-275
lines changed

Documentation/kernel-parameters.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
12371237
i8042.noloop [HW] Disable the AUX Loopback command while probing
12381238
for the AUX port
12391239
i8042.nomux [HW] Don't check presence of an active multiplexing
1240-
controller
1240+
controller. Default: true.
12411241
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
12421242
controllers
12431243
i8042.notimeout [HW] Ignore timeout condition signalled by controller

drivers/input/serio/i8042-x86ia64io.h

Lines changed: 8 additions & 273 deletions
Original file line numberDiff line numberDiff line change
@@ -207,282 +207,17 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
207207
};
208208

209209
/*
210-
* Some Fujitsu notebooks are having trouble with touchpads if
211-
* active multiplexing mode is activated. Luckily they don't have
212-
* external PS/2 ports so we can safely disable it.
213-
* ... apparently some Toshibas don't like MUX mode either and
214-
* die horrible death on reboot.
210+
* Some laptops do implement active multiplexing mode correctly;
211+
* unfortunately they are in minority.
215212
*/
216-
static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
217-
{
218-
/* Fujitsu Lifebook P7010/P7010D */
219-
.matches = {
220-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
221-
DMI_MATCH(DMI_PRODUCT_NAME, "P7010"),
222-
},
223-
},
224-
{
225-
/* Fujitsu Lifebook P7010 */
226-
.matches = {
227-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
228-
DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"),
229-
},
230-
},
231-
{
232-
/* Fujitsu Lifebook P5020D */
233-
.matches = {
234-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
235-
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"),
236-
},
237-
},
238-
{
239-
/* Fujitsu Lifebook S2000 */
240-
.matches = {
241-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
242-
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"),
243-
},
244-
},
245-
{
246-
/* Fujitsu Lifebook S6230 */
247-
.matches = {
248-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
249-
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
250-
},
251-
},
252-
{
253-
/* Fujitsu T70H */
254-
.matches = {
255-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
256-
DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"),
257-
},
258-
},
259-
{
260-
/* Fujitsu-Siemens Lifebook T3010 */
261-
.matches = {
262-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
263-
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"),
264-
},
265-
},
266-
{
267-
/* Fujitsu-Siemens Lifebook E4010 */
268-
.matches = {
269-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
270-
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"),
271-
},
272-
},
273-
{
274-
/* Fujitsu-Siemens Amilo Pro 2010 */
275-
.matches = {
276-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
277-
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
278-
},
279-
},
280-
{
281-
/* Fujitsu-Siemens Amilo Pro 2030 */
282-
.matches = {
283-
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
284-
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
285-
},
286-
},
287-
{
288-
/*
289-
* No data is coming from the touchscreen unless KBC
290-
* is in legacy mode.
291-
*/
292-
/* Panasonic CF-29 */
293-
.matches = {
294-
DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"),
295-
DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"),
296-
},
297-
},
298-
{
299-
/*
300-
* HP Pavilion DV4017EA -
301-
* errors on MUX ports are reported without raising AUXDATA
302-
* causing "spurious NAK" messages.
303-
*/
304-
.matches = {
305-
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
306-
DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"),
307-
},
308-
},
309-
{
310-
/*
311-
* HP Pavilion ZT1000 -
312-
* like DV4017EA does not raise AUXERR for errors on MUX ports.
313-
*/
314-
.matches = {
315-
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
316-
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"),
317-
DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"),
318-
},
319-
},
213+
static const struct dmi_system_id __initconst i8042_dmi_mux_table[] = {
320214
{
321215
/*
322-
* HP Pavilion DV4270ca -
323-
* like DV4017EA does not raise AUXERR for errors on MUX ports.
216+
* Panasonic CF-18 needs to be in MUX mode since the
217+
* touchscreen is on serio3 and it also has touchpad.
324218
*/
325219
.matches = {
326-
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
327-
DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"),
328-
},
329-
},
330-
{
331-
.matches = {
332-
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
333-
DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"),
334-
},
335-
},
336-
{
337-
.matches = {
338-
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
339-
DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"),
340-
},
341-
},
342-
{
343-
.matches = {
344-
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
345-
DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"),
346-
},
347-
},
348-
{
349-
.matches = {
350-
DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"),
351-
DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"),
352-
},
353-
},
354-
{
355-
/* Sharp Actius MM20 */
356-
.matches = {
357-
DMI_MATCH(DMI_SYS_VENDOR, "SHARP"),
358-
DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"),
359-
},
360-
},
361-
{
362-
/* Sony Vaio FS-115b */
363-
.matches = {
364-
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
365-
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"),
366-
},
367-
},
368-
{
369-
/*
370-
* Sony Vaio FZ-240E -
371-
* reset and GET ID commands issued via KBD port are
372-
* sometimes being delivered to AUX3.
373-
*/
374-
.matches = {
375-
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
376-
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"),
377-
},
378-
},
379-
{
380-
/*
381-
* Most (all?) VAIOs do not have external PS/2 ports nor
382-
* they implement active multiplexing properly, and
383-
* MUX discovery usually messes up keyboard/touchpad.
384-
*/
385-
.matches = {
386-
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
387-
DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
388-
},
389-
},
390-
{
391-
/* Amoi M636/A737 */
392-
.matches = {
393-
DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."),
394-
DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"),
395-
},
396-
},
397-
{
398-
/* Lenovo 3000 n100 */
399-
.matches = {
400-
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
401-
DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
402-
},
403-
},
404-
{
405-
.matches = {
406-
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
407-
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"),
408-
},
409-
},
410-
{
411-
/* Acer Aspire 5710 */
412-
.matches = {
413-
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
414-
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"),
415-
},
416-
},
417-
{
418-
/* Gericom Bellagio */
419-
.matches = {
420-
DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
421-
DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
422-
},
423-
},
424-
{
425-
/* IBM 2656 */
426-
.matches = {
427-
DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
428-
DMI_MATCH(DMI_PRODUCT_NAME, "2656"),
429-
},
430-
},
431-
{
432-
/* Dell XPS M1530 */
433-
.matches = {
434-
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
435-
DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"),
436-
},
437-
},
438-
{
439-
/* Compal HEL80I */
440-
.matches = {
441-
DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"),
442-
DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"),
443-
},
444-
},
445-
{
446-
/* Dell Vostro 1510 */
447-
.matches = {
448-
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
449-
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
450-
},
451-
},
452-
{
453-
/* Acer Aspire 5536 */
454-
.matches = {
455-
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
456-
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
457-
DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
458-
},
459-
},
460-
{
461-
/* Dell Vostro V13 */
462-
.matches = {
463-
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
464-
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
465-
},
466-
},
467-
{
468-
/* Newer HP Pavilion dv4 models */
469-
.matches = {
470-
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
471-
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
472-
},
473-
},
474-
{
475-
/* Asus X450LCP */
476-
.matches = {
477-
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
478-
DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
479-
},
480-
},
481-
{
482-
/* Avatar AVIU-145A6 */
483-
.matches = {
484-
DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
485-
DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
220+
DMI_MATCH(DMI_PRODUCT_NAME, "CF-18"),
486221
},
487222
},
488223
{ }
@@ -1005,8 +740,8 @@ static int __init i8042_platform_init(void)
1005740
if (dmi_check_system(i8042_dmi_noloop_table))
1006741
i8042_noloop = true;
1007742

1008-
if (dmi_check_system(i8042_dmi_nomux_table))
1009-
i8042_nomux = true;
743+
if (dmi_check_system(i8042_dmi_mux_table))
744+
i8042_nomux = false;
1010745

1011746
if (dmi_check_system(i8042_dmi_notimeout_table))
1012747
i8042_notimeout = true;

drivers/input/serio/i8042.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static bool i8042_noaux;
3939
module_param_named(noaux, i8042_noaux, bool, 0);
4040
MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port.");
4141

42-
static bool i8042_nomux;
42+
static bool i8042_nomux = true;
4343
module_param_named(nomux, i8042_nomux, bool, 0);
4444
MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing controller is present.");
4545

0 commit comments

Comments
 (0)