On Wed, 16 Sep 2009, Rick L. Vinyard, Jr. wrote: > The M* keys are intended to provide a quick way to switch between key > mappings, with each mode having their own user-defined mappings. What I'd do in this case would be this: 1. Initially have the M* level-shift keys assigned KEY_RESERVED 2. Have a big enough keymap to map all keys in all M*-level shift states possible. Eg: START OF KEYMAP M* keys 1st set of G* keys 2nd set of G* keys 3rd set of G* keys... ... last set of G* keys END OF KEYMAP 3. Have the driver special-process M* level-shift keys *as long as they are still set to KEY_RESERVED* to select which part of the keymap is used to translate the other keys. Note that this likely means pressing a M* key would be transparent to userspace in this case, i.e. no events would be issued when a M* key is doing a level shift. So, you'd be able to set all mappings you want in the driver, and the M* keys would do what they're expected to do without any userland help at all, but you'd still be able to program the M* keys to be normal keys if you want. Of course, this assumes you don't do chording on multiple M* keys to end up with a huge number of keymaps :p -- "One disk to rule them all, One disk to find them. One disk to bring them all and in the darkness grind them. In the Land of Redmond where the shadows lie." -- The Silicon Valley Tarot Henrique Holschuh -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html