Resent-Date: Thu, 15 Oct 1998 16:28:18 +0200 (MET DST)
Date: Thu, 15 Oct 1998 16:28:17 +0200
From: Kars de Jong <jongk@cs.utwente.nl>
To: Linux/m68k mailing list <linux-m68k@lists.linux-m68k.org>
Subject: Fix for the standard keyboard mapping
Resent-From: linux-m68k@phil.uni-sb.de

Hi all,

Here's my patch for the standard amiga usa1 keyboard mapping in the kernel
once again. This time I've uuencoded it, I hope it gets through intact this
time. Fixes since last patch:
- Now includes a shift-alt mapping, so you can type things like Meta-< and
  Meta-> (very nice in Emacs)
- Scrollback is done with shift-KP9 and shift-KP3. By the way, Geert, I've
  tried scrollback with 4 bpp once more, it helped to set the virtual screen
  size to 640x800 instead of 640x1200. Is that intended?
  It's still not working 100% correct though, when I scroll back more than 1
  screen I get the first screen again. And sometimes when I scroll forward I
  don't end up with what I started with, but with something in the middle.

Okay, that's all for now. Included is the used keymap and the diff.

Kars.
-- 
------------------------------------------------------------------------------
Kars de Jong             Signaalkamp rules the waves!       Turrican@Discworld
--------======]**-----|      jongk@cs.utwente.nl      |-----**[======---------

# Default kernel keymap. This uses 8 modifier combinations.
keymaps 0-2,4-5,8-9,12
# Change the above line into
#	keymaps 0-2,4-6,8-9,12
# in case you want the entries
#	altgr   control keycode  60 = Boot            
#	altgr   control keycode  70 = Boot            
# below.
#
# In fact AltGr is used very little, and one more keymap can
# be saved by mapping AltGr to Alt (and adapting a few entries):
# keycode 101 = Alt
#
keycode   0 = grave            asciitilde      
	control keycode   0 = nul             
	alt     keycode   0 = Meta_grave      
	shift	alt	keycode   0 = Meta_asciitilde
keycode   1 = one              exclam          
	alt     keycode   1 = Meta_one        
	shift	alt	keycode   1 = Meta_exclam
keycode   2 = two              at               at              
	control	keycode   2 = nul             
	shift	control	keycode   2 = nul             
	alt	keycode   2 = Meta_two        
	shift	alt	keycode   2 = Meta_at
keycode   3 = three            numbersign      
	control keycode   3 = Escape          
	alt     keycode   3 = Meta_three      
	shift	alt	keycode   3 = Meta_numbersign
keycode   4 = four             dollar           dollar          
	control keycode   4 = Control_backslash
	alt     keycode   4 = Meta_four       
	shift	alt	keycode   4 = Meta_dollar
keycode   5 = five             percent         
	control keycode   5 = Control_bracketright
	alt     keycode   5 = Meta_five       
	shift	alt	keycode   5 = Meta_percent
keycode   6 = six              asciicircum     
	control keycode   6 = Control_asciicircum
	alt     keycode   6 = Meta_six        
	shift	alt	keycode   6 = Meta_asciicircum
keycode   7 = seven            ampersand        braceleft       
	control keycode   7 = Control_underscore
	alt     keycode   7 = Meta_seven      
	shift	alt	keycode   7 = Meta_ampersand
keycode   8 = eight            asterisk         bracketleft     
	control keycode   8 = Delete          
	alt     keycode   8 = Meta_eight      
	shift	alt	keycode   8 = Meta_asterisk
keycode   9 = nine             parenleft        bracketright    
	alt     keycode   9 = Meta_nine       
	shift	alt	keycode   9 = Meta_parenleft
keycode  10 = zero             parenright       braceright      
	alt     keycode  10 = Meta_zero       
	shift	alt	keycode  10 = Meta_parenright
keycode  11 = minus            underscore       backslash       
	control	keycode  11 = Control_underscore
	shift	control	keycode  11 = Control_underscore
	alt	keycode  11 = Meta_minus      
	shift	alt	keycode  11 = Meta_underscore
keycode  12 = equal            plus            
	alt     keycode  12 = Meta_equal      
	shift	alt	keycode  12 = Meta_plus
keycode  13 = backslash        bar             
	control keycode  13 = Control_backslash
	alt     keycode  13 = Meta_backslash  
	shift	alt	keycode  13 = Meta_bar
keycode  14 =
keycode  15 = KP_0            
	alt     keycode  15 = Ascii_0         
	altgr   keycode  15 = Hex_0         
keycode  16 = q               
keycode  17 = w               
keycode  18 = e
	altgr   keycode  18 = Hex_E   
keycode  19 = r               
keycode  20 = t               
keycode  21 = y               
keycode  22 = u               
keycode  23 = i               
keycode  24 = o               
keycode  25 = p               
keycode  26 = bracketleft      braceleft       
	control keycode  26 = Escape          
	alt     keycode  26 = Meta_bracketleft
	shift	alt	keycode  26 = Meta_braceleft
keycode  27 = bracketright     braceright       asciitilde      
	control keycode  27 = Control_bracketright
	alt     keycode  27 = Meta_bracketright
	shift	alt	keycode  27 = Meta_braceright
keycode  28 =
keycode  29 = KP_1            
	alt     keycode  29 = Ascii_1         
	altgr   keycode  29 = Hex_1         
keycode  30 = KP_2            
	alt     keycode  30 = Ascii_2         
	altgr   keycode  30 = Hex_2         
keycode  31 = KP_3             Scroll_Forward   Hex_3
	alt     keycode  31 = Ascii_3         
keycode  32 = a
	altgr   keycode  32 = Hex_A
keycode  33 = s               
keycode  34 = d
	altgr   keycode  34 = Hex_D   
keycode  35 = f
	altgr   keycode  35 = Hex_F               
keycode  36 = g               
keycode  37 = h               
keycode  38 = j               
keycode  39 = k               
keycode  40 = l               
keycode  41 = semicolon        colon           
	alt     keycode  41 = Meta_semicolon  
	shift	alt	keycode  41 = Meta_colon
keycode  42 = apostrophe       quotedbl        
	control keycode  42 = Control_g       
	alt     keycode  42 = Meta_apostrophe 
	shift	alt	keycode  42 = Meta_quotedbl
keycode  43 =
keycode  44 =
keycode  45 = KP_4            
	alt     keycode  45 = Ascii_4         
	altgr   keycode  45 = Hex_4         
keycode  46 = KP_5            
	alt     keycode  46 = Ascii_5         
	altgr   keycode  46 = Hex_5         
keycode  47 = KP_6            
	alt     keycode  47 = Ascii_6         
	altgr   keycode  47 = Hex_6         
keycode  48 = Compose
keycode  49 = z               
keycode  50 = x               
keycode  51 = c
	altgr   keycode  51 = Hex_C   
keycode  52 = v               
keycode  53 = b
	altgr   keycode  53 = Hex_B
keycode  54 = n               
keycode  55 = m               
keycode  56 = comma            less            
	alt     keycode  56 = Meta_comma      
	shift	alt	keycode  56 = Meta_less
keycode  57 = period           greater         
	control keycode  57 = Compose         
	alt     keycode  57 = Meta_period     
	shift	alt	keycode  57 = Meta_greater
keycode  58 = slash            question        
	control keycode  58 = Delete          
	alt     keycode  58 = Meta_slash      
	shift	alt	keycode  58 = Meta_question
keycode  59 =
keycode  60 = KP_Period       
#	altgr   control keycode  60 = Boot            
	control alt     keycode  60 = Boot            
keycode  61 = KP_7            
	alt     keycode  61 = Ascii_7         
	altgr   keycode  61 = Hex_7         
keycode  62 = KP_8            
	alt     keycode  62 = Ascii_8         
	altgr   keycode  62 = Hex_8         
keycode  63 = KP_9             Scroll_Backward  Hex_9
	alt     keycode  63 = Ascii_9         
keycode  64 = space            space           
	control keycode  64 = nul             
	alt     keycode  64 = Meta_space      
keycode  65 = Delete           Delete          
	control keycode  65 = BackSpace
	alt     keycode  65 = Meta_Delete     
keycode  66 = Tab              Tab             
	alt     keycode  66 = Meta_Tab        
keycode  67 = KP_Enter        
keycode  68 = Return          
	alt     keycode  68 = Meta_Control_m  
keycode  69 = Escape           Escape          
	alt     keycode  69 = Meta_Escape     
keycode  70 = Remove          
#	altgr   control keycode  70 = Boot            
	control alt     keycode  70 = Boot            
keycode  71 =
keycode  72 =
keycode  73 =
keycode  74 = KP_Subtract     
keycode  75 =
keycode  76 = Up              
keycode  77 = Down            
keycode  78 = Right           
	alt     keycode  78 = Incr_Console
keycode  79 = Left            
	alt     keycode  79 = Decr_Console
keycode  80 = F1               F11              Console_11      
	control keycode  80 = F1              
	alt     keycode  80 = Console_1       
	control alt     keycode  80 = Console_1       
keycode  81 = F2               F12              Console_12      
	control keycode  81 = F2              
	alt     keycode  81 = Console_2       
	control alt     keycode  81 = Console_2       
keycode  82 = F3               F13              Console_13      
	control keycode  82 = F3              
	alt     keycode  82 = Console_3       
	control alt     keycode  82 = Console_3       
keycode  83 = F4               F14              Console_14      
	control keycode  83 = F4              
	alt     keycode  83 = Console_4       
	control alt     keycode  83 = Console_4       
keycode  84 = F5               F15              Console_15      
	control keycode  84 = F5              
	alt     keycode  84 = Console_5       
	control alt     keycode  84 = Console_5       
keycode  85 = F6               F16              Console_16      
	control keycode  85 = F6              
	alt     keycode  85 = Console_6       
	control alt     keycode  85 = Console_6       
keycode  86 = F7               F17              Console_17      
	control keycode  86 = F7              
	alt     keycode  86 = Console_7       
	control alt     keycode  86 = Console_7       
keycode  87 = F8               F18              Console_18      
	control keycode  87 = F8              
	alt     keycode  87 = Console_8       
	control alt     keycode  87 = Console_8       
keycode  88 = F9               F19              Console_19      
	control keycode  88 = F9              
	alt     keycode  88 = Console_9       
	control alt     keycode  88 = Console_9       
keycode  89 = F10              F20              Console_20      
	control keycode  89 = F10             
	alt     keycode  89 = Console_10      
	control alt     keycode  89 = Console_10      
keycode  90 = Num_Lock
	shift   keycode  90 = Bare_Num_Lock
keycode  91 = Scroll_Lock      Show_Memory      Show_Registers  
	control keycode  91 = Show_State      
	alt     keycode  91 = Scroll_Lock     
keycode  92 = KP_Divide       
keycode  93 = KP_Multiply     
keycode  94 = KP_Add          
keycode  95 = Help             Show_Memory      Show_Registers
	control keycode  95 = Show_State      
	alt     keycode  95 = Show_State     
keycode  96 = Shift           
keycode  97 = Shift           
keycode  98 = Caps_Lock       
keycode  99 = Control         
keycode 100 = Alt             
keycode 101 = AltGr           
keycode 102 =
keycode 103 =
keycode 104 =
keycode 105 =
keycode 106 =
keycode 107 =
keycode 108 =
keycode 109 =
keycode 110 =
keycode 111 =
keycode 112 =
keycode 113 =
keycode 114 =
keycode 115 =
keycode 116 =
keycode 117 =
keycode 118 =
keycode 119 =
keycode 120 =
keycode 121 =
keycode 122 =
keycode 123 =
keycode 124 =
keycode 125 =
keycode 126 =
keycode 127 =

--- linux/drivers/char/amikeyb.c	1998/10/13 23:09:32	1.1
+++ linux/drivers/char/amikeyb.c	1998/10/14 18:48:08
@@ -14,9 +14,7 @@
 
 #include <linux/types.h>
 #include <linux/sched.h>
-#include <linux/interrupt.h>
 #include <linux/errno.h>
-#include <linux/keyboard.h>
 #include <linux/delay.h>
 #include <linux/timer.h>
 #include <linux/kd.h>
@@ -24,6 +22,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/kbd_ll.h>
+#include <linux/kbd_kern.h>
 
 #include <asm/amigaints.h>
 #include <asm/amigahw.h>
@@ -34,136 +33,155 @@
 #define RESET_WARNING	(0xf0)	/* before rotation */
 
 static u_short amiplain_map[NR_KEYS] __initdata = {
-	0xf060, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
-	0xf038, 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf05c, 0xf200, 0xf300,
-	0xfb71, 0xfb77, 0xfb65, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69,
-	0xfb6f, 0xfb70, 0xf05b, 0xf05d, 0xf200, 0xf301, 0xf302, 0xf303,
-	0xfb61, 0xfb73, 0xfb64, 0xfb66, 0xfb67, 0xfb68, 0xfb6a, 0xfb6b,
-	0xfb6c, 0xf03b, 0xf027, 0xf200, 0xf200, 0xf304, 0xf305, 0xf306,
-	0xf200, 0xfb7a, 0xfb78, 0xfb63, 0xfb76, 0xfb62, 0xfb6e, 0xfb6d,
-	0xf02c, 0xf02e, 0xf02f, 0xf200, 0xf310, 0xf307, 0xf308, 0xf309,
-	0xf020, 0xf07f, 0xf009, 0xf30e, 0xf201, 0xf01b, 0xf07f, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, 0xf107,
-	0xf108, 0xf109, 0xf312, 0xf313, 0xf30d, 0xf30c, 0xf30a, 0xf11b,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf060,	0xf031,	0xf032,	0xf033,	0xf034,	0xf035,	0xf036,	0xf037,
+	0xf038,	0xf039,	0xf030,	0xf02d,	0xf03d,	0xf05c,	0xf200,	0xf300,
+	0xfb71,	0xfb77,	0xfb65,	0xfb72,	0xfb74,	0xfb79,	0xfb75,	0xfb69,
+	0xfb6f,	0xfb70,	0xf05b,	0xf05d,	0xf200,	0xf301,	0xf302,	0xf303,
+	0xfb61,	0xfb73,	0xfb64,	0xfb66,	0xfb67,	0xfb68,	0xfb6a,	0xfb6b,
+	0xfb6c,	0xf03b,	0xf027,	0xf200,	0xf200,	0xf304,	0xf305,	0xf306,
+	0xf20e,	0xfb7a,	0xfb78,	0xfb63,	0xfb76,	0xfb62,	0xfb6e,	0xfb6d,
+	0xf02c,	0xf02e,	0xf02f,	0xf200,	0xf310,	0xf307,	0xf308,	0xf309,
+	0xf020,	0xf07f,	0xf009,	0xf30e,	0xf201,	0xf01b,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf100,	0xf101,	0xf102,	0xf103,	0xf104,	0xf105,	0xf106,	0xf107,
+	0xf108,	0xf109,	0xf208,	0xf209,	0xf30d,	0xf30c,	0xf30a,	0xf11b,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 static u_short amishift_map[NR_KEYS] __initdata = {
-	0xf07e, 0xf021, 0xf040, 0xf023, 0xf024, 0xf025, 0xf05e, 0xf026,
-	0xf02a, 0xf028, 0xf029, 0xf05f, 0xf02b, 0xf07c, 0xf200, 0xf300,
-	0xfb51, 0xfb57, 0xfb45, 0xfb52, 0xfb54, 0xfb59, 0xfb55, 0xfb49,
-	0xfb4f, 0xfb50, 0xf07b, 0xf07d, 0xf200, 0xf301, 0xf302, 0xf303,
-	0xfb41, 0xfb53, 0xfb44, 0xfb46, 0xfb47, 0xfb48, 0xfb4a, 0xfb4b,
-	0xfb4c, 0xf03a, 0xf022, 0xf200, 0xf200, 0xf304, 0xf305, 0xf306,
-	0xf200, 0xfb5a, 0xfb58, 0xfb43, 0xfb56, 0xfb42, 0xfb4e, 0xfb4d,
-	0xf03c, 0xf03e, 0xf03f, 0xf200, 0xf310, 0xf307, 0xf308, 0xf309,
-	0xf020, 0xf07f, 0xf009, 0xf30e, 0xf201, 0xf01b, 0xf07f, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf10a, 0xf10b, 0xf10c, 0xf10d, 0xf10e, 0xf10f, 0xf110, 0xf111,
-	0xf112, 0xf113, 0xf208, 0xf209, 0xf30d, 0xf30c, 0xf30a, 0xf203,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf07e,	0xf021,	0xf040,	0xf023,	0xf024,	0xf025,	0xf05e,	0xf026,
+	0xf02a,	0xf028,	0xf029,	0xf05f,	0xf02b,	0xf07c,	0xf200,	0xf300,
+	0xfb51,	0xfb57,	0xfb45,	0xfb52,	0xfb54,	0xfb59,	0xfb55,	0xfb49,
+	0xfb4f,	0xfb50,	0xf07b,	0xf07d,	0xf200,	0xf301,	0xf302,	0xf20a,
+	0xfb41,	0xfb53,	0xfb44,	0xfb46,	0xfb47,	0xfb48,	0xfb4a,	0xfb4b,
+	0xfb4c,	0xf03a,	0xf022,	0xf200,	0xf200,	0xf304,	0xf305,	0xf306,
+	0xf20e,	0xfb5a,	0xfb58,	0xfb43,	0xfb56,	0xfb42,	0xfb4e,	0xfb4d,
+	0xf03c,	0xf03e,	0xf03f,	0xf200,	0xf310,	0xf307,	0xf308,	0xf20b,
+	0xf020,	0xf07f,	0xf009,	0xf30e,	0xf201,	0xf01b,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf10a,	0xf10b,	0xf10c,	0xf10d,	0xf10e,	0xf10f,	0xf110,	0xf111,
+	0xf112,	0xf113,	0xf213,	0xf203,	0xf30d,	0xf30c,	0xf30a,	0xf203,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 static u_short amialtgr_map[NR_KEYS] __initdata = {
-	0xf200, 0xf200, 0xf040, 0xf200, 0xf024, 0xf200, 0xf200, 0xf07b,
-	0xf05b, 0xf05d, 0xf07d, 0xf05c, 0xf200, 0xf200, 0xf200, 0xf300,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf07e, 0xf200, 0xf301, 0xf302, 0xf303,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf304, 0xf305, 0xf306,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf310, 0xf307, 0xf308, 0xf309,
-	0xf200, 0xf07f, 0xf200, 0xf30e, 0xf201, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf50c, 0xf50d, 0xf50e, 0xf50f, 0xf510, 0xf511, 0xf512, 0xf513,
-	0xf514, 0xf515, 0xf208, 0xf209, 0xf30d, 0xf30c, 0xf30a, 0xf204,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf200,	0xf200,	0xf040,	0xf200,	0xf024,	0xf200,	0xf200,	0xf07b,
+	0xf05b,	0xf05d,	0xf07d,	0xf05c,	0xf200,	0xf200,	0xf200,	0xf90a,
+	0xfb71,	0xfb77,	0xf918,	0xfb72,	0xfb74,	0xfb79,	0xfb75,	0xfb69,
+	0xfb6f,	0xfb70,	0xf200,	0xf07e,	0xf200,	0xf90b,	0xf90c,	0xf90d,
+	0xf914,	0xfb73,	0xf917,	0xf919,	0xfb67,	0xfb68,	0xfb6a,	0xfb6b,
+	0xfb6c,	0xf200,	0xf200,	0xf200,	0xf200,	0xf90e,	0xf90f,	0xf910,
+	0xf20e,	0xfb7a,	0xfb78,	0xf916,	0xfb76,	0xf915,	0xfb6e,	0xfb6d,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf310,	0xf911,	0xf912,	0xf913,
+	0xf200,	0xf200,	0xf200,	0xf30e,	0xf201,	0xf200,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf50a,	0xf50b,	0xf50c,	0xf50d,	0xf50e,	0xf50f,	0xf510,	0xf511,
+	0xf512,	0xf513,	0xf208,	0xf202,	0xf30d,	0xf30c,	0xf30a,	0xf202,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 static u_short amictrl_map[NR_KEYS] __initdata = {
-	0xf000, 0xf200, 0xf000, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f,
-	0xf07f, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf01c, 0xf200, 0xf300,
-	0xf011, 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009,
-	0xf00f, 0xf010, 0xf01b, 0xf01d, 0xf200, 0xf301, 0xf302, 0xf303,
-	0xf001, 0xf013, 0xf004, 0xf006, 0xf007, 0xf008, 0xf00a, 0xf00b,
-	0xf00c, 0xf200, 0xf007, 0xf200, 0xf200, 0xf304, 0xf305, 0xf306,
-	0xf200, 0xf01a, 0xf018, 0xf003, 0xf016, 0xf002, 0xf00e, 0xf00d,
-	0xf200, 0xf200, 0xf07f, 0xf200, 0xf310, 0xf307, 0xf308, 0xf309,
-	0xf000, 0xf07f, 0xf200, 0xf30e, 0xf201, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, 0xf107,
-	0xf108, 0xf109, 0xf208, 0xf209, 0xf30d, 0xf30c, 0xf30a, 0xf202,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf000,	0xf200,	0xf000,	0xf01b,	0xf01c,	0xf01d,	0xf01e,	0xf01f,
+	0xf07f,	0xf200,	0xf200,	0xf01f,	0xf200,	0xf01c,	0xf200,	0xf300,
+	0xf011,	0xf017,	0xf005,	0xf012,	0xf014,	0xf019,	0xf015,	0xf009,
+	0xf00f,	0xf010,	0xf01b,	0xf01d,	0xf200,	0xf301,	0xf302,	0xf200,
+	0xf001,	0xf013,	0xf004,	0xf006,	0xf007,	0xf008,	0xf00a,	0xf00b,
+	0xf00c,	0xf200,	0xf007,	0xf200,	0xf200,	0xf304,	0xf305,	0xf306,
+	0xf20e,	0xf01a,	0xf018,	0xf003,	0xf016,	0xf002,	0xf00e,	0xf00d,
+	0xf200,	0xf20e,	0xf07f,	0xf200,	0xf310,	0xf307,	0xf308,	0xf200,
+	0xf000,	0xf008,	0xf200,	0xf30e,	0xf201,	0xf200,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf100,	0xf101,	0xf102,	0xf103,	0xf104,	0xf105,	0xf106,	0xf107,
+	0xf108,	0xf109,	0xf208,	0xf204,	0xf30d,	0xf30c,	0xf30a,	0xf204,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 static u_short amishift_ctrl_map[NR_KEYS] __initdata = {
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf300,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301, 0xf302, 0xf303,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf304, 0xf305, 0xf306,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf310, 0xf307, 0xf308, 0xf309,
-	0xf200, 0xf07f, 0xf200, 0xf30e, 0xf201, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf208, 0xf209, 0xf30d, 0xf30c, 0xf30a, 0xf200,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf200,	0xf200,	0xf000,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf01f,	0xf200,	0xf200,	0xf200,	0xf300,
+	0xf011,	0xf017,	0xf005,	0xf012,	0xf014,	0xf019,	0xf015,	0xf009,
+	0xf00f,	0xf010,	0xf200,	0xf200,	0xf200,	0xf301,	0xf302,	0xf200,
+	0xf001,	0xf013,	0xf004,	0xf006,	0xf007,	0xf008,	0xf00a,	0xf00b,
+	0xf00c,	0xf200,	0xf200,	0xf200,	0xf200,	0xf304,	0xf305,	0xf306,
+	0xf20e,	0xf01a,	0xf018,	0xf003,	0xf016,	0xf002,	0xf00e,	0xf00d,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf310,	0xf307,	0xf308,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf30e,	0xf201,	0xf200,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf208,	0xf200,	0xf30d,	0xf30c,	0xf30a,	0xf200,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 static u_short amialt_map[NR_KEYS] __initdata = {
-	0xf860, 0xf831, 0xf832, 0xf833, 0xf834, 0xf835, 0xf836, 0xf837,
-	0xf838, 0xf839, 0xf830, 0xf82d, 0xf83d, 0xf85c, 0xf200, 0xf900,
-	0xf871, 0xf877, 0xf865, 0xf872, 0xf874, 0xf879, 0xf875, 0xf869,
-	0xf86f, 0xf870, 0xf85b, 0xf85d, 0xf200, 0xf901, 0xf902, 0xf903,
-	0xf861, 0xf873, 0xf864, 0xf866, 0xf867, 0xf868, 0xf86a, 0xf86b,
-	0xf86c, 0xf83b, 0xf827, 0xf200, 0xf200, 0xf904, 0xf905, 0xf906,
-	0xf200, 0xf87a, 0xf878, 0xf863, 0xf876, 0xf862, 0xf86e, 0xf86d,
-	0xf82c, 0xf82e, 0xf82f, 0xf200, 0xf310, 0xf907, 0xf908, 0xf909,
-	0xf820, 0xf87f, 0xf809, 0xf30e, 0xf80d, 0xf81b, 0xf87f, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf500, 0xf501, 0xf502, 0xf503, 0xf504, 0xf505, 0xf506, 0xf507,
-	0xf508, 0xf509, 0xf208, 0xf209, 0xf30d, 0xf30c, 0xf30a, 0xf204,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf860,	0xf831,	0xf832,	0xf833,	0xf834,	0xf835,	0xf836,	0xf837,
+	0xf838,	0xf839,	0xf830,	0xf82d,	0xf83d,	0xf85c,	0xf200,	0xf900,
+	0xf871,	0xf877,	0xf865,	0xf872,	0xf874,	0xf879,	0xf875,	0xf869,
+	0xf86f,	0xf870,	0xf85b,	0xf85d,	0xf200,	0xf901,	0xf902,	0xf903,
+	0xf861,	0xf873,	0xf864,	0xf866,	0xf867,	0xf868,	0xf86a,	0xf86b,
+	0xf86c,	0xf83b,	0xf827,	0xf200,	0xf200,	0xf904,	0xf905,	0xf906,
+	0xf20e,	0xf87a,	0xf878,	0xf863,	0xf876,	0xf862,	0xf86e,	0xf86d,
+	0xf82c,	0xf82e,	0xf82f,	0xf200,	0xf310,	0xf907,	0xf908,	0xf909,
+	0xf820,	0xf87f,	0xf809,	0xf30e,	0xf80d,	0xf81b,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf211,	0xf210,
+	0xf500,	0xf501,	0xf502,	0xf503,	0xf504,	0xf505,	0xf506,	0xf507,
+	0xf508,	0xf509,	0xf208,	0xf209,	0xf30d,	0xf30c,	0xf30a,	0xf204,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+};
+
+static u_short amishift_alt_map[NR_KEYS] = {
+	0xf87e,	0xf821,	0xf840,	0xf823,	0xf824,	0xf825,	0xf85e,	0xf826,
+	0xf82a,	0xf828,	0xf829,	0xf85f,	0xf82b,	0xf87c,	0xf200,	0xf300,
+	0xf851,	0xf857,	0xf845,	0xf852,	0xf854,	0xf859,	0xf855,	0xf849,
+	0xf84f,	0xf850,	0xf87b,	0xf87d,	0xf200,	0xf301,	0xf302,	0xf200,
+	0xf841,	0xf853,	0xf844,	0xf846,	0xf847,	0xf848,	0xf84a,	0xf84b,
+	0xf84c,	0xf83a,	0xf822,	0xf200,	0xf200,	0xf304,	0xf305,	0xf306,
+	0xf20e,	0xf85a,	0xf858,	0xf843,	0xf856,	0xf842,	0xf84e,	0xf84d,
+	0xf83c,	0xf83e,	0xf83f,	0xf200,	0xf310,	0xf307,	0xf308,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf30e,	0xf201,	0xf200,	0xf116,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf208,	0xf200,	0xf30d,	0xf30c,	0xf30a,	0xf200,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 static u_short amictrl_alt_map[NR_KEYS] __initdata = {
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf300,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301, 0xf302, 0xf303,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf304, 0xf305, 0xf306,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf20c, 0xf307, 0xf308, 0xf309,
-	0xf200, 0xf07f, 0xf200, 0xf30e, 0xf201, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf30b, 0xf200, 0xf603, 0xf600, 0xf602, 0xf601,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf208, 0xf209, 0xf30d, 0xf30c, 0xf30a, 0xf200,
-	0xf700, 0xf700, 0xf207, 0xf702, 0xf703, 0xf701, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
-	0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf300,
+	0xf811,	0xf817,	0xf805,	0xf812,	0xf814,	0xf819,	0xf815,	0xf809,
+	0xf80f,	0xf810,	0xf200,	0xf200,	0xf200,	0xf301,	0xf302,	0xf200,
+	0xf801,	0xf813,	0xf804,	0xf806,	0xf807,	0xf808,	0xf80a,	0xf80b,
+	0xf80c,	0xf200,	0xf200,	0xf200,	0xf200,	0xf304,	0xf305,	0xf306,
+	0xf20e,	0xf81a,	0xf818,	0xf803,	0xf816,	0xf802,	0xf80e,	0xf80d,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf20c,	0xf307,	0xf308,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf30e,	0xf201,	0xf200,	0xf20c,	0xf200,
+	0xf200,	0xf200,	0xf30b,	0xf200,	0xf603,	0xf600,	0xf602,	0xf601,
+	0xf500,	0xf501,	0xf502,	0xf503,	0xf504,	0xf505,	0xf506,	0xf507,
+	0xf508,	0xf509,	0xf208,	0xf200,	0xf30d,	0xf30c,	0xf30a,	0xf200,
+	0xf700,	0xf700,	0xf207,	0xf702,	0xf703,	0xf701,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
+	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,	0xf200,
 };
 
 #define	DEFAULT_KEYB_REP_DELAY	(HZ/4)
@@ -301,12 +319,14 @@
         return -EIO;
 
     /* setup key map */
+    keymap_count = 8;
     memcpy(key_maps[0], amiplain_map, sizeof(plain_map));
     memcpy(key_maps[1], amishift_map, sizeof(plain_map));
     memcpy(key_maps[2], amialtgr_map, sizeof(plain_map));
     memcpy(key_maps[4], amictrl_map, sizeof(plain_map));
     memcpy(key_maps[5], amishift_ctrl_map, sizeof(plain_map));
     memcpy(key_maps[8], amialt_map, sizeof(plain_map));
+    key_maps[9] = amishift_alt_map;
     memcpy(key_maps[12], amictrl_alt_map, sizeof(plain_map));
 
     /*

