--- h3600_microkbd.c	Wed May 22 14:17:36 2002
+++ h3600_microkbd_org.c	Sat May 18 12:25:23 2002
@@ -34,7 +34,6 @@
 #include <asm/bitops.h>
 #include <asm/irq.h>
 #include <asm/hardware.h>
-#include <asm/mach-types.h>
 
 MODULE_AUTHOR("Andrew Christian <andyc@handhelds.org>");
 
@@ -81,10 +80,6 @@
 	u32   forced_release;
 };
 
-int iscooked = 0;
-int isshifted = 0;
-int doshift = 0;
-
 static struct mkbd_statistics     g_statistics;
 
 #define MKBD_DLEVEL 0
@@ -310,200 +305,59 @@
 
 static void h3600_compaq_process_char(struct mkbd_data *mkbd, unsigned char data )
 {
+	unsigned char key       =   data & 0x7f;
+	unsigned int  key_down  = !(data & 0x80);
 
-  unsigned char cooked;
-  unsigned char key       =   data & 0x7f;
-  unsigned int  key_down  = !(data & 0x80);
-  
-  doshift = 0;
-
-  switch (mkbd->state) {
-  case MKBD_READ:
-    SDEBUG(3,"Read 0x%02x\n", data );
-    if ( !compaq_to_scancode[key] ) {
-      g_statistics.invalid++;
-      SDEBUG(3,"   bit invalid 0x%02x\n", key );
-    } 
-    else if ( key_down && test_bit(key,mkbd->key_down)) {
-      g_statistics.already_down++;
-      SDEBUG(3,"   already down 0x%02x\n", key );
-    }
-    else if ( !key_down && !test_bit(key,mkbd->key_down)) {
-      g_statistics.already_up++;
-      SDEBUG(3,"   already up 0x%02x\n", key );
-    }
-    else {
-      mkbd->state = MKBD_CHKSUM;
-      mkbd->last  = data;
-      return;
-    }
-    break;
-  case MKBD_CHKSUM: {
-    unsigned char last      =   mkbd->last & 0x7f;
-    unsigned int  last_down = !(mkbd->last & 0x80);
-    
-    SDEBUG(3,"Checking read 0x%02x with 0x%02x\n", mkbd->last, data );
-    if ( (last ^ data) != 0xff ) {
-      g_statistics.bad_xor++;
-      SDEBUG(3,"   XOR doesn't match last=0x%02x data=0x%02x XOR=0x%02x\n", 
-	     last, data, (last ^ data));
-    }
-    else if ( last == 0x75 ) {
-      SDEBUG(3,"   Valid keyboard restart\n");
-    }
-    else {
-      SDEBUG(3,"Sending 0x%02x down=%d\n", last, last_down);
-      g_statistics.valid++;
-      
-      cooked = compaq_to_scancode[last];
-      if ( cooked == SKEY_RIGHTALT ) {
-	iscooked = !iscooked;
-      };
-      if ( cooked == SKEY_LEFTSHIFT ) {
-	isshifted = !isshifted;
-      };
-      doshift = 0;
-      if ( iscooked && !isshifted ) {
-	switch ( cooked ) {
-	  
-	  // Row 1
-	  // Q->'1' W->'2' E->'3' R->'4' T->'5' Y->'6' U->'7' I->'8' O->'9' P->'0'
-	  
-	case SKEY_Q: cooked = SKEY_1; break;
-	case SKEY_W: cooked = SKEY_2; break;
-	case SKEY_E: cooked = SKEY_3; break;
-	case SKEY_R: cooked = SKEY_4; break;
-	case SKEY_T: cooked = SKEY_5; break;
-	case SKEY_Y: cooked = SKEY_6; break;
-	case SKEY_U: cooked = SKEY_7; break;
-	case SKEY_I: cooked = SKEY_8; break;
-	case SKEY_O: cooked = SKEY_9; break;
-	case SKEY_P: cooked = SKEY_0; break;
-	  
-	  // Row 2
-	  // A->'*' S->'/' D->'+' F->'-' G->'=' H->':' J->''' K->'"' L->'@'
-	  // BACKSPACE->DELETE
-	  
-	case SKEY_A: cooked = SKEY_KPASTERISK; break;
-	case SKEY_S: cooked = SKEY_SLASH; break;
-	case SKEY_D: cooked = SKEY_KPPLUS; break;
-	case SKEY_F: cooked = SKEY_KPMINUS; break;
-	case SKEY_G: cooked = SKEY_EQUAL; break;
-	case SKEY_H: cooked = SKEY_SEMICOLON;
-	  doshift = 1;
-	  break;
-	case SKEY_J: cooked = SKEY_APOSTROPHE; break;
-	case SKEY_K: cooked = SKEY_APOSTROPHE;
-	  doshift = 1;
-	  break;
-	case SKEY_L: cooked = SKEY_2;
-	  doshift = 1;
-	  break;
-	case SKEY_BACKSPACE: cooked = SKEY_DELETE; break;
-	  
-	  // Row 3
-	  // Z->'$' X->'(' C->')' V->'?' B->'!' N->',' M->'.' CAP->'NUM' ENTER->'TAB'
-	  
-	case SKEY_Z: cooked = SKEY_4;
-	  doshift = 1;
-	  break;
-	case SKEY_X: cooked = SKEY_9;
-	  doshift = 1;
-	  break;
-	case SKEY_C: cooked = SKEY_0;
-	  doshift = 1;
-	  break;
-	case SKEY_V: cooked = SKEY_SLASH;
-	  doshift = 1;
-	  break;
-	case SKEY_B: cooked = SKEY_1;
-	  doshift = 1;
-	  break;
-	case SKEY_N: cooked = SKEY_COMMA; break;
-	case SKEY_M: cooked = SKEY_DOT; break;
-	case SKEY_CAPSLOCK: cooked = SKEY_NUMLOCK; break;
-	case SKEY_ENTER: cooked = SKEY_TAB; break;
-	  
-	  // Row 4
-	  // LEFT->'%' DOWN->'<' UP->'>'
-	  
-	case SKEY_RIGHT: cooked = SKEY_5;
-	  doshift = 1;
-	  break;
-	case SKEY_UP: cooked = SKEY_COMMA;
-	  doshift = 1;
-	  break;
-	case SKEY_DOWN: cooked = SKEY_DOT;
-	  doshift = 1;
-	  break;
-	case SKEY_LEFTCTRL: cooked = SKEY_ESC; break;
-	default: break;
-	};
-      } else if ( iscooked && isshifted ) {
-	switch ( cooked ) {
-	case SKEY_Q: cooked = SKEY_GRAVE;
-	  break;
-	case SKEY_W: cooked = SKEY_GRAVE; 
-	  doshift = 1;
-	  break;
-	case SKEY_E: cooked = SKEY_3; 
-	  doshift = 1;
-	  break;
-	case SKEY_R: cooked = SKEY_6; 
-	  doshift = 1;
-	  break;
-	case SKEY_T: cooked = SKEY_7; 
-	  doshift = 1;
-	  break;
-	case SKEY_Y: cooked = SKEY_MINUS; 
-	  doshift = 1;
-	  break;
-	case SKEY_U: cooked = SKEY_BACKSLASH; 
-	  break;
-	case SKEY_I: cooked = SKEY_BACKSLASH; 
-	  doshift = 1;
-	  break;
-	case SKEY_O: cooked = SKEY_LEFTBRACE;
-	  break;
-	case SKEY_P: cooked = SKEY_RIGHTBRACE; 
-	  break;
-	case SKEY_X: cooked = SKEY_LEFTBRACE; 
-	  doshift = 1;
-	  break;
-	case SKEY_C: cooked = SKEY_RIGHTBRACE; 
-	  doshift = 1;
-	  break;
-	default: break;
-	}
-      };
-      
-      if ( doshift ) {
-	handle_scancode(SKEY_LEFTSHIFT, !(SKEY_LEFTSHIFT & 0x80) );
-      } else if ( isshifted && iscooked ) {
-	handle_scancode(SKEY_LEFTSHIFT, SKEY_LEFTSHIFT & 0x80 );
-      };
-      
-      handle_scancode(cooked, last_down);
-      
-      if ( doshift ) {
-	handle_scancode(SKEY_LEFTSHIFT, SKEY_LEFTSHIFT & 0x80 );
-      };
-      if ( isshifted && iscooked ) {
-	handle_scancode(SKEY_LEFTSHIFT, !(SKEY_LEFTSHIFT & 0x80 ) );
-      };
-
-      if ( last_down )
-	set_bit(last,mkbd->key_down);
-      else
-	clear_bit(last,mkbd->key_down);
-      mkbd->state = MKBD_READ;
-      return;
-    }
-    break;
-  }
-  }
-  g_statistics.forced_release++;
-  h3600_microkbd_release_all_keys(mkbd->key_down);
+	switch (mkbd->state) {
+	case MKBD_READ:
+ 		SDEBUG(3,"Read 0x%02x\n", data );
+		if ( !compaq_to_scancode[key] ) {
+			g_statistics.invalid++;
+			SDEBUG(3,"   bit invalid 0x%02x\n", key );
+		} 
+		else if ( key_down && test_bit(key,mkbd->key_down)) {
+			g_statistics.already_down++;
+			SDEBUG(3,"   already down 0x%02x\n", key );
+		}
+		else if ( !key_down && !test_bit(key,mkbd->key_down)) {
+			g_statistics.already_up++;
+			SDEBUG(3,"   already up 0x%02x\n", key );
+		}
+		else {
+			mkbd->state = MKBD_CHKSUM;
+			mkbd->last  = data;
+			return;
+		}
+		break;
+	case MKBD_CHKSUM: {
+		unsigned char last      =   mkbd->last & 0x7f;
+		unsigned int  last_down = !(mkbd->last & 0x80);
+
+ 		SDEBUG(3,"Checking read 0x%02x with 0x%02x\n", mkbd->last, data );
+		if ( (last ^ data) != 0xff ) {
+			g_statistics.bad_xor++;
+			SDEBUG(3,"   XOR doesn't match last=0x%02x data=0x%02x XOR=0x%02x\n", 
+			       last, data, (last ^ data));
+		}
+		else if ( last == 0x75 ) {
+			SDEBUG(3,"   Valid keyboard restart\n");
+		}
+		else {
+			SDEBUG(3,"Sending 0x%02x down=%d\n", last, last_down);
+			g_statistics.valid++;
+			handle_scancode(compaq_to_scancode[last], last_down);
+			if ( last_down )
+				set_bit(last,mkbd->key_down);
+			else
+				clear_bit(last,mkbd->key_down);
+			mkbd->state = MKBD_READ;
+			return;
+		}
+		break;
+	}
+	}
+	g_statistics.forced_release++;
+	h3600_microkbd_release_all_keys(mkbd->key_down);
 }
 
 
@@ -838,17 +692,6 @@
 	devfs_unregister( devfs_dir );
 	devfs_unregister_chrdev( g_microkbd_major, H3600_MICROKBD_MODULE_NAME );
 }
-
-/*
-
-if ( machine_is_3800() ) {
-	compaq_to_scancode[41] = SKEY_DOWN;
-	compaq_to_scancode[48] = SKEY_LEFT;
-	compaq_to_scancode[95] = SKEY_RIGHT;
-	compaq_to_scancode[97] = SKEY_UP;
-};
-
-*/
 
 module_init(h3600_microkbd_init_module);
 module_exit(h3600_microkbd_cleanup_module);

