I've taken into account Dmitry's comments (thanks Dmitry!) and generated
a new patch.
Thanks,
P.
Jesse Barnes wrote:
On Friday, January 21, 2005 8:35 am, Vojtech Pavlik wrote:
No. But vacant ports usually return 0xff. The problem here is that 0xff
is a valid value for the status register, too. Fortunately this patch
checks for 0xff only after the timeout failed.
On PCs you'll get all 1s, but on some ia64 platforms and others, you'll take a
hard machine check exception if you try to access non-existent memory (mmio,
port space, or otherwise).
Jesse
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
===== i8042.c 1.71 vs edited =====
--- 1.71/drivers/input/serio/i8042.c 2005-01-03 08:11:49 -05:00
+++ edited/i8042.c 2005-01-21 11:50:11 -05:00
@@ -696,7 +696,10 @@
unsigned char param;
if (i8042_command(¶m, I8042_CMD_CTL_TEST)) {
- printk(KERN_ERR "i8042.c: i8042 controller self test
timeout.\n");
+ if (i8042_read_status() != 0xFF)
+ printk(KERN_ERR "i8042.c: i8042 controller self
test timeout.\n");
+ else
+ printk(KERN_ERR "i8042.c: no i8042 controller
found.\n");
return -1;
}
@@ -1016,16 +1019,22 @@
i8042_aux_values.irq = I8042_AUX_IRQ;
i8042_kbd_values.irq = I8042_KBD_IRQ;
- if (i8042_controller_init())
+ if (i8042_controller_init()) {
+ i8042_platform_exit();
return -ENODEV;
+ }
err = driver_register(&i8042_driver);
- if (err)
+ if (err) {
+ i8042_platform_exit();
return err;
+ }
i8042_platform_device = platform_device_register_simple("i8042", -1,
NULL, 0);
if (IS_ERR(i8042_platform_device)) {
driver_unregister(&i8042_driver);
+ i8042_platform_exit();
+ del_timer_sync(&i8042_timer);
return PTR_ERR(i8042_platform_device);
}