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(&param, 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);
        }
 

Reply via email to