diff -urN -X /home/arm/dontdiff_tml_arm /home/download/kernels/linux-2.4.19-rmk2-vanilla/drivers/char/keyboard.c linux-2.4.19-rmk2/drivers/char/keyboard.c
diff -urN -X /home/arm/dontdiff_tml_arm /home/download/kernels/linux-2.4.19-rmk2-vanilla/drivers/char/keyboard.c linux-2.4.19-rmk2/drivers/char/keyboard.c
--- /home/download/kernels/linux-2.4.19-rmk2-vanilla/drivers/char/keyboard.c	2002-10-02 22:05:14.000000000 -0700
+++ linux-2.4.19-rmk2/drivers/char/keyboard.c	2002-10-02 22:07:30.000000000 -0700
@@ -120,17 +120,17 @@
 static k_handfn
 	do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift,
 	do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2,
-	do_ignore;
+	do_ignore, do_arch; /* PSIONW_NONSTANDARD */
 
 static k_hand key_handler[16] = {
 	do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift,
 	do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2,
-	do_ignore, do_ignore
+	do_ignore, do_arch
 };
 
 /* Key types processed even in raw modes */
 
-#define TYPES_ALLOWED_IN_RAW_MODE ((1 << KT_SPEC) | (1 << KT_SHIFT))
+#define TYPES_ALLOWED_IN_RAW_MODE ((1 << KT_SPEC) | (1 << KT_CONS) | (1 << KT_SLOCK) | (1 << KT_SHIFT) | (1 << KT_ARCH1) | (1 << KT_ARCH2) | (1 << KT_ARCH3))
 
 typedef void (*void_fnp)(void);
 typedef void (void_fn)(void);
@@ -167,7 +167,7 @@
 struct pt_regs * kbd_pt_regs;
 
 #ifdef CONFIG_MAGIC_SYSRQ
-static int sysrq_pressed;
+int sysrq_pressed;
 #endif
 
 static struct pm_dev *pm_kbd;
@@ -352,8 +352,15 @@
 
 			if (type >= 0xf0) {
 			    type -= 0xf0;
-			    if (raw_mode && ! (TYPES_ALLOWED_IN_RAW_MODE & (1 << type)))
-				goto out;
+
+#if 0
+			    printk("keysym=0x%x type=0x%x 0x%x && 0x%x\n",
+				    keysym, type, raw_mode, !(TYPES_ALLOWED_IN_RAW_MODE & (1<<type)) );
+#endif
+			    if (raw_mode && ! (TYPES_ALLOWED_IN_RAW_MODE & (1 << type))) {
+				    //printk("Raw mode or type match failed\n");
+				    goto out;
+			    }
 			    if (type == KT_LETTER) {
 				type = KT_LATIN;
 				if (vc_kbd_led(kbd, VC_CAPSLOCK)) {
@@ -363,7 +370,9 @@
 				}
 			    }
 			    (*key_handler[type])(keysym & 0xff, up_flag);
-			    if (type != KT_SLOCK)
+
+			    /* We don't support sticky keys in raw mode */
+			    if (type != KT_SLOCK  || raw_mode)
 			      kbd->slockstate = 0;
 			} else {
 			    /* maybe only if (kbd->kbdmode == VC_UNICODE) ? */
@@ -608,6 +617,13 @@
 	compute_shiftstate();
 }
 
+static void do_arch(unsigned char value, char up_flag)
+{
+#ifdef kbd_arch_handler
+	kbd_arch_handler(value,up_flag);
+#endif
+}
+
 static void do_spec(unsigned char value, char up_flag)
 {
 	if (up_flag)
