From 03496012c9db577bc842b19750555b6638ace953 Mon Sep 17 00:00:00 2001 From: Rodney Lorrimar Date: Mon, 5 May 2008 11:59:24 -0400 Subject: [PATCH] --- yaml --- r: 104186 b: refs/heads/master c: 5b7c407baa9501e49ebd3b6eac30cd4bcb60ca9d h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/macintosh/adbhid.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 41d6c3c9cc50..dedf5d835f47 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2e75f044c717b85f65d74c8c90624428ba31078c +refs/heads/master: 5b7c407baa9501e49ebd3b6eac30cd4bcb60ca9d diff --git a/trunk/drivers/macintosh/adbhid.c b/trunk/drivers/macintosh/adbhid.c index 6e9afe26db89..b7f41d3823a6 100644 --- a/trunk/drivers/macintosh/adbhid.c +++ b/trunk/drivers/macintosh/adbhid.c @@ -225,6 +225,7 @@ struct adbhid { #define FLAG_CAPSLOCK_TRANSLATE 0x00000008 #define FLAG_CAPSLOCK_DOWN 0x00000010 #define FLAG_CAPSLOCK_IGNORE_NEXT 0x00000020 +#define FLAG_POWER_KEY_PRESSED 0x00000040 static struct adbhid *adbhid[16]; @@ -301,9 +302,11 @@ adbhid_input_keycode(int id, int scancode, int repeat) ahid->flags |= FLAG_CAPSLOCK_TRANSLATE | FLAG_CAPSLOCK_DOWN; } - } else if (scancode == 0xff) { + } else if (scancode == 0xff && + !(ahid->flags & FLAG_POWER_KEY_PRESSED)) { /* Scancode 0xff usually signifies that the capslock - * key was either pressed or released. */ + * key was either pressed or released, or that the + * power button was released. */ if (ahid->flags & FLAG_CAPSLOCK_TRANSLATE) { keycode = ADB_KEY_CAPSLOCK; if (ahid->flags & FLAG_CAPSLOCK_DOWN) { @@ -317,7 +320,7 @@ adbhid_input_keycode(int id, int scancode, int repeat) } } else { printk(KERN_INFO "Spurious caps lock event " - "(scancode 0xff)."); + "(scancode 0xff).\n"); } } } @@ -344,6 +347,12 @@ adbhid_input_keycode(int id, int scancode, int repeat) } break; case ADB_KEY_POWER: + /* Keep track of the power key state */ + if (up_flag) + ahid->flags &= ~FLAG_POWER_KEY_PRESSED; + else + ahid->flags |= FLAG_POWER_KEY_PRESSED; + /* Fn + Command will produce a bogus "power" keycode */ if (ahid->flags & FLAG_FN_KEY_PRESSED) { keycode = ADB_KEY_CMD;