diff -bupr -X skiplist linux-2.6.11.7-orig/drivers/macintosh/adbhid.c linux-2.6.11.7/drivers/macintosh/adbhid.c
--- linux-2.6.11.7-orig/drivers/macintosh/adbhid.c	2005-04-07 11:58:39.000000000 -0700
+++ linux-2.6.11.7/drivers/macintosh/adbhid.c	2005-04-28 17:16:51.000000000 -0700
@@ -285,17 +285,27 @@ adbhid_input_keycode(int id, int keycode
 {
 	struct adbhid *ahid = adbhid[id];
 	int up_flag;
-
+	static int caps_lock_down = 0;
 	up_flag = (keycode & 0x80);
 	keycode &= 0x7f;
 
+	/* hack to allow capslock to remapped to a normal key */
+	if (keycode == 0x39) {
+				caps_lock_down = 1;
+	} else if (keycode == 0x7f) { 
+			if (caps_lock_down) {
+					/* caps-lock is down, must be caps-lock being released */
+					caps_lock_down = 0;
+					keycode = 0xb9;
+			} else {
+					/* caps-lock being pressed */
+					keycode = 0x39;
+			}
+	}
+
 	switch (keycode) {
 	case ADB_KEY_CAPSLOCK: /* Generate down/up events for CapsLock everytime. */
-		input_regs(&ahid->input, regs);
-		input_report_key(&ahid->input, KEY_CAPSLOCK, 1);
-		input_report_key(&ahid->input, KEY_CAPSLOCK, 0);
-		input_sync(&ahid->input);
-		return;
+				break;
 #ifdef CONFIG_PPC_PMAC
 	case ADB_KEY_POWER_OLD: /* Power key on PBook 3400 needs remapping */
 		switch(pmac_call_feature(PMAC_FTR_GET_MB_INFO,
