The double-pressing plaguing the Motorola Milestone 2 is a software-bug, as Motorola forgot to enable the generic android gpio debounce code in their keyboard-driver. When looking at the Motorola Milestone 2 kernel, which is available at https://opensource.motorola.com/sf/projects/milestone (Milestone-2 2.2.16, kernel.tar.gz), the following code can be found in the file arch/arm/mach-omap2/board-sholes-keypad.c: [CODE] static struct gpio_event_matrix_info sholes_keypad_matrix_info = { .info.func = gpio_event_matrix_func, .keymap = sholes_p3_keymap, .output_gpios = sholes_col_gpios, .input_gpios = sholes_row_gpios, .noutputs = ARRAY_SIZE(sholes_col_gpios), .ninputs = ARRAY_SIZE(sholes_row_gpios), .settle_time.tv.nsec = 40 * NSEC_PER_USEC, .poll_time.tv.nsec = 20 * NSEC_PER_MSEC, .flags = GPIOKPF_LEVEL_TRIGGERED_IRQ | GPIOKPF_REMOVE_PHANTOM_KEYS | GPIOKPF_PRINT_UNMAPPED_KEYS /*| GPIOKPF_PRINT_MAPPED_KEYS*/ }; [/CODE] But the header defining this struct (include/linux/gpio_event.h) adds another very interesting member: [CODE] struct gpio_event_matrix_info { ... ktime_t debounce_delay; ... }; [/CODE] This debounce_delay is 0 as it is never initialized, and so the debouncing code in drivers/input/misc/gpio_matrix.c does nothing. The easy fix for this problem would be to recompile the kernel and set this member to the value used in other android handsets (5ms). But "thanks" to the locked bootloader this is impossible. So the only solution to this is an ugly hack, which searches for the structure in memory and sets debounce_delay to an useful value. I have written a kernel-module which does just that. It's code can be found at: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/ms2-fixes (And this is its README file) As I assume not everybody wants to go through the pain of setting up a toolchain which can be used to compile modules for the motorola kernel, I have also uploaded a precompiled version of the module at http://rmdir.de/~michael/ms2-fixes/debounce.ko This version should work at least on MS2 2.2.16 and MS2 2.4.24 (which I am using), as I have built it against the 2.2.16 kernel sources (which are the only ones I can find) To use this module, you need a rooted phone. Copy the module to /tmp and run "insmod /tmp/debounce.ko". After that, you should see the following output in "dmesg": [CODE] <6>[ 1226.493377] Searching for gpio-event... <6>[ 1226.493804] Found it! <6>[ 1226.494079] And there is a sholes-keypad connected... <6>[ 1226.494842] settle_time: 40000 <6>[ 1226.495117] poll_time: 20000000 <6>[ 1226.495391] debounce_delay: 0 <6>[ 1226.495635] Activating debounce! <6>[ 1226.496917] debounce_delay: 5000000 [/CODE] Please test this module and see if it fixes your keyboard problems. (I have only slight double-presses, which are not really reproducible (but I had none since activating the debouncing)). I would be happy to hear that it works for other people, too. Thanks Motorola for making our lives so easy with a locked bootloader! Michael Gernoth