On Tue, Aug 16, 2005 at 10:51:55AM +1000, Benjamin Herrenschmidt wrote:
> You need to keep track that it's pressed to send appropriate key up as
> well I suppose...

Found another snag with this. Using Fn activates the numeric keypad
emulation of the keyboard, effectively blocking commands p,m,o.
Unfortunately can't use F12 itself here as that is mapped as a button.

Code below uses Alt-F11, but I'm not sure if that is specific enough
as it could be used by normal applications. Any sugestion for a better
key combination to use?

-- 
Martin

        Signed-off-by: Martin Habets <[EMAIL PROTECTED]>
---------------------------------------------------------------------------
Index: 2.6/drivers/macintosh/adbhid.c
===================================================================
--- 2.6.orig/drivers/macintosh/adbhid.c 2005-08-15 13:49:27.000000000 +0100
+++ 2.6/drivers/macintosh/adbhid.c      2005-08-16 22:48:15.000000000 +0100
@@ -69,7 +69,9 @@
 #define ADB_KEY_DEL            0x33
 #define ADB_KEY_CMD            0x37
 #define ADB_KEY_CAPSLOCK       0x39
+#define ADB_KEY_LEFTALT                0x3a
 #define ADB_KEY_FN             0x3f
+#define ADB_KEY_F11            0x67
 #define ADB_KEY_FWDEL          0x75
 #define ADB_KEY_POWER_OLD      0x7e
 #define ADB_KEY_POWER          0x7f
@@ -221,6 +223,8 @@
 #define FLAG_FN_KEY_PRESSED    0x00000001
 #define FLAG_POWER_FROM_FN     0x00000002
 #define FLAG_EMU_FWDEL_DOWN    0x00000004
+#define FLAG_LEFTALT_DOWN      0x00000008
+#define FLAG_F11_DOWN          0x00000010
 
 static struct adbhid *adbhid[16];
 
@@ -343,6 +347,31 @@
                                ahid->flags |= FLAG_EMU_FWDEL_DOWN;
                }
                break;
+#ifdef CONFIG_MAGIC_SYSRQ
+       case ADB_KEY_LEFTALT:
+               /* Keep track of the Alt key state */
+               if (up_flag) {
+                       ahid->flags &= ~FLAG_LEFTALT_DOWN;
+                       /* Map Alt+F11 to SysRq. */
+                       if (ahid->flags & FLAG_F11_DOWN) {
+                               ahid->flags &= ~FLAG_F11_DOWN;
+                               keycode = 0x69;
+                               break;
+                       }
+               } else
+                       ahid->flags |= FLAG_LEFTALT_DOWN;
+               break;
+       case ADB_KEY_F11:
+               /* Map Alt+F11 to SysRq. */
+               if (ahid->flags & FLAG_LEFTALT_DOWN) {
+                       keycode = 0x69;
+                       if (up_flag)
+                               ahid->flags &= ~FLAG_F11_DOWN;
+                       else
+                               ahid->flags |= FLAG_F11_DOWN;
+               }
+               break;
+#endif
 #endif /* CONFIG_PPC_PMAC */
        }
 


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to