Hi Luca et al,
Several people have been finding the PS/2 keyboard and mouse suddenly
stop working a few hours after loading the asus_atk0110 module on
machines using the Asus P7P55D or P7P55D-E board. For example:
GSR wrote[1]:
> Newly installed machine and every few hours the PS/2 keyboard dies
> leaving a key stuck, but the USB mouse still works. Focusing different
> windows shows something being typed or a modifier key taking effect
> (depends, each time is a different key
[...]
> Accesing the machine via ssh shows the system still works, allows
> changing VT with chvt (just to see what they have, no input allowed),
> killing programs or rebooting, but no obvious way to recover the kbd
> other than restart.
[...]
> ACPI: EC: GPE storm detected, transactions will use polling mode
> atkbd serio0: Unknown key pressed (translated set 2, code 0x8b on isa0060/serio0).
> atkbd serio0: Use 'setkeycodes e00b <keycode>' to make it known.
[...]
> DMI 2.6 present.
> DMI: System manufacturer System Product Name/P7P55D, BIOS 1807 07/22/2010
[...]
> After searching some more and finding I am not alone with respect to
> stuck keyboard, I also found that someone suggests (in
> https://bugzilla.redhat.com/show_bug.cgi?id=676446 ) to invoke
>
> echo -n reconnect > /sys/devices/platform/i8042/serio0/drvctl
>
> and so far it seems to recover the keyboard
Some people reporting the problem cc-ed. Problem seems to exist in
kernels as old as 2.6.32 and as new as 3.3-rc6.
>From [2] I see that you tracked it down to a BIOS problem. So I am
curious: would there be a way to detect affected machines and
automatically work around this? Toy patch just to give the idea
follows.
[1] http://bugs.debian.org/662895
[2] http://thread.gmane.org/gmane.linux.drivers.sensors/24194/focus=26426
diff --git i/drivers/hwmon/asus_atk0110.c w/drivers/hwmon/asus_atk0110.c
index 00e98517f94c..494090df89f2 100644
--- i/drivers/hwmon/asus_atk0110.c
+++ w/drivers/hwmon/asus_atk0110.c
@@ -38,6 +38,19 @@ static const struct dmi_system_id __initconst atk_force_new_if[] = {
{ }
};
+static const struct dmi_system_id __initconst atk0110_blacklist[] = {
+ {
+ /* http://bugs.debian.org/662895 */
+ .ident = "Asus P7P55D",
+ .matches = {
+ DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+ DMI_MATCH(DMI_BOARD_NAME, "P7P55D")
+ }
+ },
+ { }
+};
+
/* Minimum time between readings, enforced in order to avoid
* hogging the CPU.
*/
@@ -1439,6 +1452,9 @@ static int __init atk0110_init(void)
if (dmi_check_system(atk_force_new_if))
new_if = true;
+ if (dmi_check_system(atk0110_blacklist))
+ return -ENODEV;
+
ret = acpi_bus_register_driver(&atk_driver);
if (ret)
pr_info("acpi_bus_register_driver failed: %d\n", ret);
_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
[Video for Linux]
[Mplayer Users]
[Linux USB Devel]
[Linux Audio Users]
[Photos]
[Yosemite Photos]
[Free Singles Community]
[Linux Kernel]
[Linux SCSI]
[XFree86]
[Yosemite Backpacking]