[PATCH] macintosh/adbhid.c: adb buttons support for aluminium PowerBook G4
authorAndreas Jaggi <andreas.jaggi@waterwave.ch>
Sun, 1 May 2005 15:58:41 +0000 (08:58 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 1 May 2005 15:58:41 +0000 (08:58 -0700)
This patch adds support for the special adb buttons of the aluminium
PowerBook G4.

Signed-off-by: Andreas Jaggi <andreas.jaggi@waterwave.ch>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/macintosh/adbhid.c
include/linux/input.h

index 8f93d01d89283da9b83229a69aa4298079a08a5d..db654e8bd67e2611733069ecfb1c3f03043b00cf 100644 (file)
@@ -555,6 +555,42 @@ adbhid_buttons_input(unsigned char *data, int nb, struct pt_regs *regs, int auto
 #endif /* CONFIG_PMAC_BACKLIGHT */
                        input_report_key(&adbhid[id]->input, KEY_BRIGHTNESSUP, down);
                        break;
+
+               case 0xc:       /* videomode switch */
+                       input_report_key(&adbhid[id]->input, KEY_SWITCHVIDEOMODE, down);
+                       break;
+
+               case 0xd:       /* keyboard illumination toggle */
+                       input_report_key(&adbhid[id]->input, KEY_KBDILLUMTOGGLE, down);
+                       break;
+
+               case 0xe:       /* keyboard illumination decrease */
+                       input_report_key(&adbhid[id]->input, KEY_KBDILLUMDOWN, down);
+                       break;
+
+               case 0xf:
+                       switch (data[1]) {
+                       case 0x8f:
+                       case 0x0f:
+                               /* keyboard illumination increase */
+                               input_report_key(&adbhid[id]->input, KEY_KBDILLUMUP, down);
+                               break;
+
+                       case 0x7f:
+                       case 0xff:
+                               /* keypad overlay toogle */
+                               break;
+
+                       default:
+                               printk(KERN_INFO "Unhandled ADB_MISC event %02x, %02x, %02x, %02x\n",
+                                      data[0], data[1], data[2], data[3]);
+                               break;
+                       }
+                       break;
+               default:
+                       printk(KERN_INFO "Unhandled ADB_MISC event %02x, %02x, %02x, %02x\n",
+                              data[0], data[1], data[2], data[3]);
+                       break;
                }
          }
          break;
@@ -775,6 +811,10 @@ adbhid_input_register(int id, int default_id, int original_handler_id,
                        set_bit(KEY_BRIGHTNESSUP, adbhid[id]->input.keybit);
                        set_bit(KEY_BRIGHTNESSDOWN, adbhid[id]->input.keybit);
                        set_bit(KEY_EJECTCD, adbhid[id]->input.keybit);
+                       set_bit(KEY_SWITCHVIDEOMODE, adbhid[id]->input.keybit);
+                       set_bit(KEY_KBDILLUMTOGGLE, adbhid[id]->input.keybit);
+                       set_bit(KEY_KBDILLUMDOWN, adbhid[id]->input.keybit);
+                       set_bit(KEY_KBDILLUMUP, adbhid[id]->input.keybit);
                        break;
                }
                if (adbhid[id]->name[0])
index b70df8fe60e677df475d939bc9243daf7f4846d2..72731d7d189ee2be0f223e77d75799e18d5eb26c 100644 (file)
@@ -328,6 +328,11 @@ struct input_absinfo {
 #define KEY_BRIGHTNESSUP       225
 #define KEY_MEDIA              226
 
+#define KEY_SWITCHVIDEOMODE    227
+#define KEY_KBDILLUMTOGGLE     228
+#define KEY_KBDILLUMDOWN       229
+#define KEY_KBDILLUMUP         230
+
 #define KEY_UNKNOWN            240
 
 #define BTN_MISC               0x100