xref: /netbsd-src/sys/dev/hpc/hpckbdkeymap.h (revision bbde328be4e75ea9ad02e9715ea13ca54b797ada)
1 /*	$NetBSD: hpckbdkeymap.h,v 1.49 2010/04/17 13:36:21 nonaka Exp $	*/
2 
3 /*-
4  * Copyright (c) 1999-2002 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #define UNK		255	/* unknown */
30 #define IGN		254	/* ignore */
31 #define SPL		253	/* special key */
32 #define KC(n)		KS_KEYCODE(n)
33 #define CMDMAP(map)	{ map, (sizeof(map)/sizeof(keysym_t)) }
34 #define NULLCMDMAP	{ NULL, 0 }
35 
36 #define KEY_SPECIAL_OFF		0
37 #define KEY_SPECIAL_LIGHT	1
38 
39 const uint8_t default_keymap[] = {
40 /*      0    1    2    3    4    5    6    7 */
41 /* 0 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
42 /* 1 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
43 /* 2 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
44 /* 3 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
45 /* 4 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
46 /* 5 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
47 /* 6 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
48 /* 7 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
49 /* 8 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
50 /* 9 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
51 /*10 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
52 /*11 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
53 /*12 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
54 /*13 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
55 /*14 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
56 /*15 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK
57 };
58 
59 const int default_special_keymap[] = {
60 	[KEY_SPECIAL_OFF]	= -1,
61 	[KEY_SPECIAL_LIGHT]	= -1
62 };
63 
64 #ifdef hpcmips
65 const uint8_t tc5165_mobilon_keymap[] = {
66 /*      0    1    2    3    4    5    6    7 */
67 /* 0 */	37 , 45 , 44 , UNK, 9  , 51 , 23 , UNK,
68 /* 1 */	UNK, 56 , UNK, UNK, UNK, UNK, UNK, UNK,
69 /* 2 */	UNK, UNK, 29 , UNK, UNK, UNK, UNK, UNK,
70 /* 3 */	24 , 203, UNK, 38 , 10 , 27 , 13 , UNK,
71 /* 4 */	40 , UNK, UNK, 39 , 26 , 53 , 11 , 12 ,
72 /* 5 */	UNK, UNK, UNK, 53 , 25 , UNK, UNK, SPL, /* Light */
73 /* 6 */	208, UNK, UNK, UNK, 52 , UNK, 43 , 14 ,
74 /* 7 */	205, 200, UNK, UNK, SPL, UNK, UNK, 28 , /* Off key */
75 /* 8 */	UNK, 41 , 59 , 15 , 2  , UNK, UNK, UNK,
76 /* 9 */	63 , 64 , 1  , UNK, 65 , 16 , 17 , UNK,
77 /*10 */	60 , UNK, 61 , 62 , 3  , UNK, UNK, UNK,
78 /*11 */	UNK, UNK, UNK, 42 , 58 , UNK, UNK, UNK,
79 /*12 */	47 , 33 , 46 , 5  , 4  , 18 , 19 , UNK,
80 /*13 */	34 , 35 , 20 , 48 , 6  , 7  , 21 , 49 ,
81 /*14 */	22 , 31 , 32 , 36 , 8  , 30 , 50 , 57 ,
82 /*15 */	UNK, IGN, UNK, UNK, UNK, UNK, UNK, UNK /* Windows key */
83 };
84 
85 const int tc5165_mobilon_special_keymap[] = {
86 	[KEY_SPECIAL_OFF]	= -1,	/* 60 */
87 	[KEY_SPECIAL_LIGHT]	= 47
88 };
89 
90 const uint8_t tc5165_telios_jp_keymap[] = {
91 /*      0    1    2    3    4    5    6    7 */
92 /* 0 */	58,  15,  IGN, 1,   IGN, IGN, IGN, IGN,
93 /* 1 */	IGN, IGN, IGN, IGN, 54,  42,  IGN, IGN,
94 /* 2 */	31,  18,  4,   IGN, IGN, 32,  45,  59,
95 /* 3 */	33,  19,  5,   61,  IGN, 46,  123, 60,
96 /* 4 */	35,  21,  8,   64,  IGN, 48,  49,  63,
97 /* 5 */	17,  16,  3,   IGN, 2,   30,  44,  41,
98 /* 6 */	IGN, IGN, IGN, IGN, IGN, IGN, 221, IGN,
99 /* 7 */	IGN, IGN, IGN, IGN, IGN, IGN, 56,  IGN,
100 /* 8 */	34,  20,  7,   IGN, 6,   47,  57,  62,
101 /* 9 */	IGN, IGN, IGN, IGN, IGN, IGN, 29,  IGN,
102 /*10 */	27,  125, 13,  203, 208, 40,  115, 68,
103 /*11 */	39,  26,  25,  112, 12,  52,  53,  67,
104 /*12 */	37,  24,  11,  121, 10,  38,  51,  66,
105 /*13 */	23,  22,  9,   IGN, IGN, 36,  50,  65,
106 /*14 */	28,  43,  14,  200, 205, IGN, IGN, 211,
107 /*15 */	IGN, IGN, IGN, IGN, IGN, IGN, 184, IGN
108 };
109 
110 static const keysym_t tc5165_telios_jp_cmdmap[] = {
111 /*	pos      command		normal		shifted		*/
112 	KC(184), KS_Cmd,		KS_Alt_R,	KS_Multi_key,
113 	KC(205), KS_Cmd_BrightnessUp,	KS_Right,
114 	KC(203), KS_Cmd_BrightnessDown,	KS_Left,
115 	KC(57),  KS_Cmd_BacklightToggle,KS_space,
116 };
117 
118 const uint8_t tc5165_compaq_c_jp_keymap[] = {
119 /*      0    1    2    3    4    5    6    7 */
120 /* 0 */	38,  50,  49,  48,  47,  46,  45,  44,
121 /* 1 */	56,  IGN, IGN, IGN, IGN, IGN, IGN, IGN,
122 /* 2 */	13,  IGN, 112, 121, 123, 41,  28,  57,
123 /* 3 */	205, 203, 208, 200, 39,  53,  52,  51,
124 /* 4 */	24,  25,  40,  IGN, 43,  26,  115, 58,
125 /* 5 */	54,  IGN, IGN, IGN, IGN, IGN, IGN, IGN,
126 /* 6 */	IGN, IGN, IGN, SPL, IGN, IGN, IGN, IGN, /* Light */
127 /* 7 */	IGN, IGN, IGN, IGN, IGN, IGN, IGN, IGN,
128 /* 8 */	42,  IGN, IGN, IGN, IGN, IGN, IGN, IGN,
129 /* 9 */	29,  IGN, IGN, IGN, IGN, IGN, IGN, IGN,
130 /*10 */	221, IGN, IGN, IGN, IGN, IGN, IGN, IGN,
131 /*11 */	221, IGN, IGN, IGN, IGN, IGN, IGN, IGN,
132 /*12 */	14,  27,  12,  11,  10,  15,  1,   125,
133 /*13 */	9,   8,   7,   6,   5,   4,   3,   2,
134 /*14 */	23,  22,  21,  20,  19,  18,  17,  16,
135 /*15 */	37,  36,  35,  34,  33,  32,  31,  30
136 };
137 
138 const int tc5165_compaq_c_jp_special_keymap[] = {
139 	[KEY_SPECIAL_OFF]	= -1, /* don't have off button */
140 	[KEY_SPECIAL_LIGHT]	= 51
141 };
142 
143 const uint8_t m38813c_keymap[] = {
144 /*      0    1    2    3    4    5    6    7 */
145 /* 0 */	0,   1,   2,   3,   4,   5,   6,   7,
146 /* 1 */	8,   9,   10,  11,  12,  13,  14,  15,
147 /* 2 */	16,  17,  18,  19,  20,  21,  22,  23,
148 /* 3 */	24,  25,  26,  27,  28,  29,  30,  31,
149 /* 4 */	32,  33,  34,  35,  36,  37,  38,  39,
150 /* 5 */	40,  41,  42,  43,  44,  45,  46,  47,
151 /* 6 */	48,  49,  50,  51,  52,  53,  54,  55,
152 /* 7 */	56,  57,  58,  59,  60,  61,  62,  63,
153 /* 8 */	64,  65,  66,  67,  68,  69,  70,  71,
154 /* 9 */	200, 73,  74,  203, 76,  205,  78,  79,
155 /*10 */	208, 81,  82,  83,  84,  85,  86,  87,
156 /*11 */	88,  89,  90,  91,  92,  93,  94,  95,
157 /*12 */	96,  97,  98,  99,  100, 101, 102, 103,
158 /*13 */	104, 105, 106, 107, 108, 109, 110, 111,
159 /*14 */	112, 113, 114, 115, 116, 117, 118, 119,
160 /*15 */	120, 121, 122, 123, 124, 125, 126, 127
161 };
162 
163 /* NEC MobileGearII MCR series (Japan) */
164 static uint8_t mcr_jp_keytrans[] = {
165 /*00	right	ent	p	.	y	b	z	space	*/
166 /*08	down	/	o	,	t	v	a	nfer	*/
167 /*10	left	\	i	m	r	c	w	menu	*/
168 /*18	^	-	u	-	e	x	q	1	*/
169 /*20	pgdn	h/z	0	l	:	g	tab	f1	*/
170 /*28	xfer	;	9	n	5	f	2	k	*/
171 /*30	up	[	8	j	4	d	6	-	*/
172 /*38	-	@	7	h	3	]	s	-	*/
173 /*40	caps	-	-	-	bs	fnc	f8	f3	*/
174 /*48	-	alt	-	-	|	k/h	f7	f4	*/
175 /*50	-	-	ctrl	-	f10	pgup	f6	f2	*/
176 /*58	-	-	-	shift	del	f9	f5	esc	*/
177 /*----------------------------------------------------------------------*/
178 /*00*/	205,	 28,	 25,	 52,	 21,	 48,	 44,	 57,
179 /*08*/	208,	 53,	 24,	 51,	 20,	 47,	 30,	123,
180 /*10*/	203,	115,	 23,	 50,	 19,	 46,	 17,	221,
181 /*18*/	 13,	IGN,	 22,	IGN,	 18,	 45,	 16,	  2,
182 /*20*/	 81,	 41,	 11,	 38,	 40,	 34,	 15,	 59,
183 /*28*/	121,	 39,	 10,	 49,	  6,	 33,	  3,	 37,
184 /*30*/	200,	 27,	  9,	 36,	  5,	 32,	  7,	IGN,
185 /*38*/	 12,	 26,	  8,	 35,	  4,	 43,	 31,	IGN,
186 /*40*/	 58,	IGN,	IGN,	IGN,	 14,	184,	 66,	 61,
187 /*48*/	IGN,	 56,	IGN,	IGN,	125,	112,	 65,	 62,
188 /*50*/	IGN,	IGN,	 29,	IGN,	 68,	 73,	 64,	 60,
189 /*58*/	IGN,	IGN,	IGN,	 42,	 14,	 67,	 63,	  1,
190 };
191 
192 static const keysym_t mcr_jp_cmdmap[] = {
193 /*	pos      command		normal		shifted		*/
194 	KC(184), KS_Cmd,		KS_Alt_R,	KS_Multi_key,
195 	KC(73),  KS_Cmd_BrightnessUp,	KS_KP_Prior,	KS_KP_9,
196 	KC(81),  KS_Cmd_BrightnessDown,	KS_KP_Next,	KS_KP_3,
197 	KC(51),  KS_Cmd_ContrastDown,	KS_comma,	KS_less,
198 	KC(52),  KS_Cmd_ContrastUp,	KS_period,	KS_greater,
199 	KC(57),  KS_Cmd_BacklightToggle,KS_space,
200 };
201 
202 /* IBM WorkPad z50 */
203 static uint8_t z50_keytrans[] = {
204 /*00	f1	f3	f5	f7	f9	-	-	f11	*/
205 /*08	f2	f4	f6	f8	f10	-	-	f12	*/
206 /*10	'	[	-	0	p	;	up	/	*/
207 /*18	-	-	-	9	o	l	.	-	*/
208 /*20	left	]	=	8	i	k	,	-	*/
209 /*28	h	y	6	7	u	j	m	n	*/
210 /*30	-	bs	num	del	-	\	ent	sp	*/
211 /*38	g	t	5	4	r	f	v	b	*/
212 /*40	-	-	-	3	e	d	c	right	*/
213 /*48	-	-	-	2	w	s	x	down	*/
214 /*50	esc	tab	~	1	q	a	z	-	*/
215 /*58	menu	Ls	Lc	Rc	La	Ra	Rs	-	*/
216 /*----------------------------------------------------------------------*/
217 /*00*/	 59,	 61,	 63,	 65,	 67,	IGN,	IGN,	 87,
218 /*08*/	 60,	 62,	 64,	 66,	 68,	IGN,	IGN,	 88,
219 /*10*/	 40,	 26,	 12,	 11,	 25,	 39,	200,	 53,
220 /*18*/	IGN,	IGN,	IGN,	 10,	 24,	 38,	 52,	IGN,
221 /*20*/	203,	 27,	 13,	  9,	 23,	 37,	 51,	IGN,
222 /*28*/	 35,	 21,	  7,	  8,	 22,	 36,	 50,	 49,
223 /*30*/	IGN,	 14,	 69,	 14,	IGN,	 43,	 28,	 57,
224 /*38*/	 34,	 20,	  6,	  5,	 19,	 33,	 47,	 48,
225 /*40*/	IGN,	IGN,	IGN,	  4,	 18,	 32,	 46,	205,
226 /*48*/	IGN,	IGN,	IGN,	  3,	 17,	 31,	 45,	208,
227 /*50*/	  1,	 15,	 41,	  2,	 16,	 30,	 44,	IGN,
228 /*58*/	221,	 42,	 29,	 29,	 56,	 56,	 54,	IGN,
229 };
230 
231 /* Sharp Tripad PV6000 and VADEM CLIO */
232 static uint8_t tripad_keytrans[] = {
233 /*00	lsh	tab	`	q	esc	1	WIN	-	*/
234 /*08	ctrl	z	x	a	s	w	e	2	*/
235 /*10	lalt	sp	c	v	d	f	r	3	*/
236 /*18	b	n	g	h	t	y	4	5	*/
237 /*20	m	,	j	k	u	i	6	7	*/
238 /*28	Fn	caps	l	o	p	8	9	0	*/
239 /*30	[	]	la	.	/	;	-	=	*/
240 /*38	rsh	ra	ua	da	'	ent	\	del	*/
241 /*40	-	-	-	-	-	-	-	-	*/
242 /*48	-	-	-	-	-	-	-	-	*/
243 /*50	-	-	-	-	-	-	-	-	*/
244 /*58	-	-	-	-	-	-	-	-	*/
245 /*----------------------------------------------------------------------*/
246 /*00*/	 42,	 15,	 41,	 16,	  1,	  2,	104,	221,
247 /*08*/	 29,	 44,	 45,	 30,	 31,	 17,	 18,	  3,
248 /*10*/	 56,	 57,	 46,	 47,	 32,	 33,	 19,	  4,
249 /*18*/	 48,	 49,	 34,	 35,	 20,	 21,	  5,	  6,
250 /*20*/	 50,	 51,	 36,	 37,	 22,	 23,	  7,	  8,
251 /*28*/	184,	 58,	 38,	 24,	 25,	  9,	 10,	 11,
252 /*30*/	 26,	 27,	203,	 52,	 53,	 39,	 12,	 13,
253 /*38*/	 54,	205,	200,	208,	 40,	 28,	 43,	 14,
254 /*40*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
255 /*48*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
256 /*50*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
257 /*58*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
258 };
259 
260 static const keysym_t tripad_cmdmap[] = {
261 /*  pos      command		normal		shifted		fn    */
262 KC(2),	 KS_Cmd_Screen0,	KS_1,		KS_exclam,	KS_f1,
263 KC(3),	 KS_Cmd_Screen1,	KS_2,		KS_at,		KS_f2,
264 KC(4),	 KS_Cmd_Screen2,	KS_3,		KS_numbersign,	KS_f3,
265 KC(5),	 KS_Cmd_Screen3,	KS_4,		KS_dollar,	KS_f4,
266 KC(6),	 KS_Cmd_Screen4,	KS_5,		KS_percent,	KS_f5,
267 KC(7),	 KS_Cmd_Screen5,	KS_6,		KS_asciicircum,	KS_f6,
268 KC(8),	 KS_Cmd_Screen6,	KS_7,		KS_ampersand,	KS_f7,
269 KC(9),	 KS_Cmd_Screen7,	KS_8,		KS_asterisk,	KS_f8,
270 KC(10),  KS_Cmd_Screen8,	KS_9,		KS_parenleft,	KS_f9,
271 KC(11),  KS_Cmd_Screen9,	KS_0,		KS_parenright,	KS_f10,
272 KC(12),  KS_Cmd_BrightnessDown,	KS_minus,	KS_underscore,	KS_f11,
273 KC(13),  KS_Cmd_BrightnessUp,	KS_equal,	KS_plus,	KS_f12,
274 KC(20),  KS_Cmd_BacklightToggle, KS_t,
275 KC(33),  KS_Cmd_BacklightOff,	KS_f,
276 KC(49),  KS_Cmd_BacklightOn,	KS_n,
277 KC(51),  KS_Cmd_ContrastDown,	KS_comma,	KS_less,
278 KC(52),  KS_Cmd_ContrastUp,	KS_period,	KS_greater,
279 KC(184), KS_Mode_switch,	KS_Multi_key,
280 KC(200), KS_Cmd_ScrollSlowUp,	KS_Up,		KS_Up,		KS_Prior,
281 KC(203), KS_Cmd_ScrollFastUp,	KS_Left,	KS_Left,	KS_Home,
282 KC(205), KS_Cmd_ScrollFastDown,	KS_Right,	KS_Right,	KS_End,
283 KC(208), KS_Cmd_ScrollSlowDown,	KS_Down,	KS_Down,	KS_Next,
284 };
285 
286 /* NEC Mobile Gear MCCS series */
287 static uint8_t mccs_keytrans[] = {
288 /*00	caps	cr	rar	p	.	y	b	z	*/
289 /*08	alt	[	dar	o	,	t	v	a	*/
290 /*10	zen	@	lar	i	m	r	c	w	*/
291 /*18	lctrl	;	uar	u	n	e	x	q	*/
292 /*20	lshft	bs	\	0	l	6	g	tab	*/
293 /*28	nconv	|	/	9	k	5	f	2	*/
294 /*30	conv	=	]	8	j	4	d	1	*/
295 /*38	hira	-	'	7	h	3	s	esc	*/
296 /*40	-	sp	-	-	-	-	-	-	*/
297 /*48	-	-	-	-	-	-	-	-	*/
298 /*50	-	-	-	-	-	-	-	-	*/
299 /*58	-	-	-	-	-	-	-	-	*/
300 /*----------------------------------------------------------------------*/
301 /*00*/	 58,	 28,	205,	 25,	 52,	 21,	 48,	 44,
302 /*08*/	 56,	 27,	208,	 24,	 51,	 20,	 47,	 30,
303 /*10*/	 41,	 26,	203,	 23,	 50,	 19,	 46,	 17,
304 /*18*/	 29,	 39,	200,	 22,	 49,	 18,	 45,	 16,
305 /*20*/	 42,	 14,	115,	 11,	 38,	  7,	 34,	 15,
306 /*28*/	123,	125,	 53,	 10,	 37,	  6,	 33,	  3,
307 /*30*/	121,	 13,	 43,	  9,	 36,	  5,	 32,	  2,
308 /*38*/	112,	 12,	 40,	  8,	 35,	  4,	 31,	  1,
309 /*40*/	IGN,	 57,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
310 /*48*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
311 /*50*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
312 /*58*/	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,	IGN,
313 };
314 
315 static const keysym_t mccs_cmdmap[] = {
316 /*	pos      command		normal		shifted		*/
317 	KC(51),  KS_Cmd_ContrastDown,	KS_comma,	KS_less,
318 	KC(52),  KS_Cmd_ContrastUp,	KS_period,	KS_greater,
319 	KC(57),  KS_Cmd_BacklightToggle,KS_space,
320 };
321 
322 static uint8_t mobilepro_keytrans[] = {
323 /*00	space	]	\	/	left	down	enter	l	*/
324 /*08	-	[	'	;	right	up	.	o	*/
325 /*10	-	-	-	Windows	v	c	x	z	*/
326 /*18	-	=	\-	`	f	d	s	a	*/
327 /*20	8	7	6	5	r	e	w	q	*/
328 /*28	,	m	n	b	-	-	0	9	*/
329 /*30	k	j	h	g	4	3	2	1	*/
330 /*38	i	u	y	t	-	caps	del	esc	*/
331 /*40	alt_R	-	-	-	BS	p	TAB	Fn	*/
332 /*48	-	alt_L	-	-	pgdn	pgup	f10	f9	*/
333 /*50	-	-	ctrl	-	f8	f7	f6	f5	*/
334 /*58	-	-	-	shift	f4	f3	f2	f1	*/
335 /*----------------------------------------------------------------------*/
336 /*00*/	 57,	 27,	 43,	 53,	203,	208,	 28,	 38,
337 /*08*/	IGN,	 26,	 40,	 39,	205,	200,	 52,	 24,
338 /*10*/	IGN,	IGN,	IGN,	221,	 47,	 46,	 45,	 44,
339 /*18*/	IGN,	 13,	 12,	 41,	 33,	 32,	 31,	 30,
340 /*20*/	  9,	  8,	  7,	  6,	 19,	 18,	 17,	 16,
341 /*28*/	 51,	 50,	 49,	 48,	IGN,	IGN,	 11,	 10,
342 /*30*/	 37,	 36,	 35,	 34,	  5,	  4,	  3,	  2,
343 /*38*/	 23,	 22,	 21,	 20,	IGN,	 58,	 14,	  1,
344 /*40*/	184,	IGN,	IGN,	IGN,	 14,	 25,	 15,	219,
345 /*48*/	IGN,	 56,	IGN,	IGN,	 81,	 73,	 68,	 67,
346 /*50*/	IGN,	IGN,	 29,	IGN,	 66,	 65,	 64,	 63,
347 /*58*/	IGN,	IGN,	IGN,	 42,	 62,	 61,	 60,	 59,
348 };
349 
350 static const keysym_t mobilepro_cmdmap[] = {
351 /*	pos      command		normal		shifted		*/
352 	KC(219), KS_Cmd,		KS_Meta_L,	KS_Multi_key,
353 	KC(73),  KS_Cmd_BrightnessUp,	KS_KP_Prior,	KS_KP_9,
354 	KC(81),  KS_Cmd_BrightnessDown,	KS_KP_Next,	KS_KP_3,
355 	KC(51),  KS_Cmd_ContrastDown,	KS_comma,	KS_less,
356 	KC(52),  KS_Cmd_ContrastUp,	KS_period,	KS_greater,
357 	KC(57),  KS_Cmd_BacklightToggle,KS_space,
358 };
359 
360 /* NEC MobilePro 750c by "Castor Fu" <castor@geocast.com> */
361 static uint8_t mobilepro750c_keytrans[] = {
362 /*00	right	\	p	.	y	b	z	space	*/
363 /*08	down	/	o	,	t	v	a	-	*/
364 /*10	left	enter	i	m	r	c	w	Win	*/
365 /*18	num	]	u	n	e	x	q	caps	*/
366 /*20	pgdn	-	0	l	:	g	tab	esc	*/
367 /*28	-	;	9	k	5	f	2	`	*/
368 /*30	up	[	8	j	4	d	1	'	*/
369 /*38	-	@	7	h	3	s	del	-	*/
370 /*40	shift	-	-	-	bs	f12	f8	f4	*/
371 /*48	-	alt	-	-	|	f11	f7	f3	*/
372 /*50	-	-	ctrl	-	f10	f10	f6	f2	*/
373 /*58	-	-	-	shift	del	f9	f5	f1	*/
374 /*----------------------------------------------------------------------*/
375 /*00*/	205,	43,	25,	52,	21,	48,	44,	57,
376 /*08*/	208,	53,	24,	51,	20,	47,	30,	IGN,
377 /*10*/	203,	28,	23,	50,	19,	46,	17,	221,
378 /*18*/	69,	27,	22,	49,	18,	45,	16,	58,
379 /*20*/	81,	IGN,	11,	38,	7,	34,	15,	1,
380 /*28*/	IGN,	39,	10,	37,	6,	33,	3,	41,
381 /*30*/	200,	26,	9,	36,	5,	32,	2,	40,
382 /*38*/	12,	26,	8,	35,	4,	31,	83,	IGN,
383 /*40*/	42,	IGN,	IGN,	IGN,	14,	88,	66,	62,
384 /*48*/	IGN,	56,	IGN,	IGN,	125,	87,	65,	61,
385 /*50*/	IGN,	IGN,	29,	IGN,	68,	68,	64,	60,
386 /*58*/	IGN,	IGN,	IGN,	42,	13,	67,	63,	59,
387 };
388 
389 /* NEC MobilePro 780 */
390 static uint8_t mobilepro780_keytrans[] = {
391 /*00	space	]	\	/	left	right	enter	l	*/
392 /*08	-	[	'	;	up	down	.	o	*/
393 /*10	-	-	-	Windows	v	c	x	z	*/
394 /*18	-	=	\-	`	f	d	s	a	*/
395 /*20	8	7	6	5	r	e	w	q	*/
396 /*28	,	m	n	b	-	-	0	9	*/
397 /*30	k	j	h	g	4	3	2	1	*/
398 /*38	i	u	y	t	-	caps	del	esc	*/
399 /*40	alt_R	-	-	-	BS	p	TAB	Fn	*/
400 /*48	-	alt_L	-	-	f12	f11	f10	f9	*/
401 /*50	-	-	ctrl	-	f8	f7	f6	f5	*/
402 /*58	-	-	-	shift	f4	f3	f2	f1	*/
403 /*----------------------------------------------------------------------*/
404 /*00*/	 57,	 27,	 43,	 53,	203,	205,	 28,	 38,
405 /*08*/	IGN,	 26,	 40,	 39,	200,	208,	 52,	 24,
406 /*10*/	IGN,	IGN,	IGN,	221,	 47,	 46,	 45,	 44,
407 /*18*/	IGN,	 13,	 12,	 41,	 33,	 32,	 31,	 30,
408 /*20*/	  9,	  8,	  7,	  6,	 19,	 18,	 17,	 16,
409 /*28*/	 51,	 50,	 49,	 48,	IGN,	IGN,	 11,	 10,
410 /*30*/	 37,	 36,	 35,	 34,	  5,	  4,	  3,	  2,
411 /*38*/	 23,	 22,	 21,	 20,	IGN,	 58,	 14,	  1,
412 /*40*/	184,	IGN,	IGN,	IGN,	 14,	 25,	 15,	IGN,
413 /*48*/	IGN,	 56,	IGN,	IGN,	 88,	 87,	 68,	 67,
414 /*50*/	IGN,	IGN,	 29,	IGN,	 66,	 65,	 64,	 63,
415 /*58*/	IGN,	IGN,	IGN,	 42,	 62,	 61,	 60,	 59,
416 };
417 
418 /* NEC MobilePro 8x0 */
419 static uint8_t mobilepro8x0_keytrans[] = {
420 /*00	space	]	\	/	left	right	enter	l	*/
421 /*08	-	[	'	;	up	down	.	o	*/
422 /*10	-	-	-	Windows	v	c	x	z	*/
423 /*18	-	=	\-	`	f	d	s	a	*/
424 /*20	8	7	6	5	r	e	w	q	*/
425 /*28	,	m	n	b	-	-	0	9	*/
426 /*30	k	j	h	g	4	3	2	1	*/
427 /*38	i	u	y	t	-	caps	del	esc	*/
428 /*40	alt_R	-	-	-	BS	p	TAB	Fn	*/
429 /*48	-	alt_L	-	-	pgdn	pgup	f10	f9	*/
430 /*50	-	-	ctrl	-	f8	f7	f6	f5	*/
431 /*58	-	-	-	shift	f4	f3	f2	f1	*/
432 /*----------------------------------------------------------------------*/
433 /*00*/	 57,	 27,	 43,	 53,	203,	205,	 28,	 38,
434 /*08*/	IGN,	 26,	 40,	 39,	200,	208,	 52,	 24,
435 /*10*/	IGN,	IGN,	IGN,	221,	 47,	 46,	 45,	 44,
436 /*18*/	IGN,	 13,	 12,	 41,	 33,	 32,	 31,	 30,
437 /*20*/	  9,	  8,	  7,	  6,	 19,	 18,	 17,	 16,
438 /*28*/	 51,	 50,	 49,	 48,	IGN,	IGN,	 11,	 10,
439 /*30*/	 37,	 36,	 35,	 34,	  5,	  4,	  3,	  2,
440 /*38*/	 23,	 22,	 21,	 20,	IGN,	 58,	 14,	  1,
441 /*40*/	184,	IGN,	IGN,	IGN,	 14,	 25,	 15,	219,
442 /*48*/	IGN,	 56,	IGN,	IGN,	 81,	 73,	 68,	 67,
443 /*50*/	IGN,	IGN,	 29,	IGN,	 66,	 65,	 64,	 63,
444 /*58*/	IGN,	IGN,	IGN,	 42,	 62,	 61,	 60,	 59,
445 };
446 
447 static const keysym_t mobilepro8x0_cmdmap[] = {
448 /*	pos      command		normal		shifted		*/
449 	KC(219), KS_Cmd,		KS_Meta_L,	KS_Multi_key,
450 	KC(73),  KS_Cmd_BrightnessUp,	KS_KP_Prior,	KS_KP_9,
451 	KC(81),  KS_Cmd_BrightnessDown,	KS_KP_Next,	KS_KP_3,
452 	KC(51),  KS_Cmd_ContrastDown,	KS_comma,	KS_less,
453 	KC(52),  KS_Cmd_ContrastUp,	KS_period,	KS_greater,
454 	KC(57),  KS_Cmd_BacklightToggle,KS_space,
455 };
456 
457 /* FUJITSU INTERTOP CX300 */
458 static uint8_t intertop_keytrans[] = {
459 /*00	space   a2      1       tab     enter   caps    left    zenkaku	*/
460 /*08	hiraga  a1      2       q       -       a       fnc     esc	*/
461 /*10	ins     w       3       s       del     ]       down    x	*/
462 /*18	z       e       4       d       a10     \       right   c	*/
463 /*20	backsla r       ;       f       a9      @       ^       v	*/
464 /*28	/       t       5       g       a8      p       -       b	*/
465 /*30	.       y       6       h       a7      l       0       n	*/
466 /*38	-       u       7       j       a5      o       bs      m	*/
467 /*40	-       a3      8       a4      -       i       k       ,	*/
468 /*48	num     :       9       [       a6      -       up      -	*/
469 /*50	-       -       -       -       shift_L -       -       shift_R	*/
470 /*58	ctrl    win     muhenka henkan  alt     -       -       -	*/
471 /*----------------------------------------------------------------------*/
472 /*00*/	57,	60,	2,	15,	28,	58,	205,	41,
473 /*08*/	112,	59,	3,	16,	IGN,	30,	56,	1,
474 /*10*/	210,	17,	4,	31,	83,	43,	208,	45,
475 /*18*/	44,	18,	5,	32,	68,	125,	203,	46,
476 /*20*/	115,	19,	39,	33,	67,	26,	13,	47,
477 /*28*/	53,	20,	6,	34,	66,	25,	12,	48,
478 /*30*/	52,	21,	7,	35,	65,	38,	11,	49,
479 /*38*/	IGN,	22,	8,	36,	63,	24,	14,	50,
480 /*40*/	IGN,	61,	9,	62,	IGN,	23,	37,	51,
481 /*48*/	69,	40,	10,	27,	64,	IGN,	200,	IGN,
482 /*50*/	IGN,	IGN,	IGN,	IGN,	42,	IGN,	IGN,	54,
483 /*58*/	29,	221,	123,	121,	184,	IGN,	IGN,	IGN,
484 };
485 
486 /* DoCoMo sigmarion (Japan) */
487 static uint8_t sigmarion_jp_keytrans[] = {
488 /*00	right	ent	p	.	y	b	z	space	*/
489 /*08	down	/	o	,	t	v	a	nfer	*/
490 /*10	left	\	i	m	r	c	w	menu	*/
491 /*18	|	-	u	-	e	x	q	1	*/
492 /*20	pgdn	h/z	0	l	:	g	tab	f1	*/
493 /*28	xfer	;	9	n	5	f	2	k	*/
494 /*30	up	[	8	j	4	d	6	-	*/
495 /*38	-	@	7	h	3	]	s	-	*/
496 /*40	caps	-	-	-	bs	fnc	f8	f3	*/
497 /*48	-	alt	-	-	^	k/h	f7	f4	*/
498 /*50	-	-	ctrl	-	f10	pgup	f6	f2	*/
499 /*58	-	-	-	shift	del	f9	f5	esc	*/
500 /*----------------------------------------------------------------------*/
501 /*00*/	205,	 28,	 25,	 52,	 21,	 48,	 44,	 57,
502 /*08*/	208,	 53,	 24,	 51,	 20,	 47,	 30,	123,
503 /*10*/	203,	115,	 23,	 50,	 19,	 46,	 17,	221,
504 /*18*/	125,	IGN,	 22,	IGN,	 18,	 45,	 16,	  2,
505 /*20*/	 81,	 41,	 11,	 38,	 40,	 34,	 15,	IGN,
506 /*28*/	121,	 39,	 10,	 49,	  6,	 33,	  3,	 37,
507 /*30*/	200,	 27,	  9,	 36,	  5,	 32,	  7,	IGN,
508 /*38*/	 12,	 26,	  8,	 35,	  4,	 43,	 31,	IGN,
509 /*40*/	 58,	IGN,	IGN,	IGN,	 14,	184,	 66,	IGN,
510 /*48*/	IGN,	 56,	IGN,	IGN,	 13,	112,	 65,	IGN,
511 /*50*/	IGN,	IGN,	 29,	IGN,	 68,	 73,	 64,	IGN,
512 /*58*/	IGN,	IGN,	IGN,	 42,	 14,	 67,	IGN,	  1,
513 };
514 
515 static const keysym_t sigmarion_cmdmap[] = {
516 /*	pos      command		normal		shifted		*/
517 	KC(184), KS_Cmd,		KS_Alt_R,	KS_Multi_key,
518 	KC(64),  KS_Cmd_Screen0,	KS_f6,		KS_f1,
519 	KC(65),  KS_Cmd_Screen1,	KS_f7,		KS_f2,
520 	KC(66),  KS_Cmd_Screen2,	KS_f8,		KS_f3,
521 	KC(67),  KS_Cmd_Screen3,	KS_f9,		KS_f4,
522 	KC(68),  KS_Cmd_Screen4,	KS_f10,		KS_f5,
523 	KC(27),  KS_Cmd_BrightnessUp,	KS_bracketleft,	KS_braceleft,
524 	KC(43),  KS_Cmd_BrightnessDown,	KS_bracketright,KS_braceright,
525 	KC(51),  KS_Cmd_ContrastDown,	KS_comma,	KS_less,
526 	KC(52),  KS_Cmd_ContrastUp,	KS_period,	KS_greater,
527 	KC(57),  KS_Cmd_BacklightToggle,KS_space,
528 };
529 
530 /* NTT DoCoMo Pocket PostPet (Japan) */
531 static uint8_t pocketpostpet_keytrans[] = {
532 /*00	esc	1	q	a	ctrl	-	down	left	*/
533 /*08	tab	2	w	s	z	-	right	up	*/
534 /*10	pgup	3	e	d	x	shift	-	-	*/
535 /*18	pgdn	4	r	f	c	alt	-	-	*/
536 /*20	f5	5	t	g	v	nfer	-	-	*/
537 /*28	f6	6	y	h	b	-	-	-	*/
538 /*30	f7	7	u	j	n	space	-	-	*/
539 /*38	f8	8	i	k	m	-	-	-	*/
540 /*40	f9	9	o	l	,	xfer	-	-	*/
541 /*48	f10	0	p	;	.	-	-	-	*/
542 /*50	\|	minus	@	:	/	ent	-	-	*/
543 /*58	bs	^	[	]	\_	del	-	-	*/
544 /* MailCheck  -> tab	*/
545 /* Prev       -> pgup	*/
546 /* Next       -> pgdn	*/
547 /* tab        -> ctrl	*/
548 /* h/z        -> menu	*/
549 /* k/h        -> alt	*/
550 /* knj        -> nfer	*/
551 /* eng        -> xfer	*/
552 /*----------------------------------------------------------------------*/
553 /*00*/	1,	2,	16,	30,	29,	UNK,	208,	203,
554 /*08*/	15,	3,	17,	31,	44,	UNK,	205,	200,
555 /*10*/	73,	4,	18,	32,	45,	42,	UNK,	UNK,
556 /*08*/	81,	5,	19,	33,	46,	56,	UNK,	UNK,
557 /*20*/	63,	6,	20,	34,	47,	123,	UNK,	UNK,
558 /*28*/	64,	7,	21,	35,	48,	UNK,	UNK,	UNK,
559 /*30*/	65,	8,	22,	36,	49,	57,	UNK,	UNK,
560 /*38*/	66,	9,	23,	37,	50,	UNK,	UNK,	UNK,
561 /*40*/	67,	10,	24,	38,	51,	121,	UNK,	UNK,
562 /*48*/	68,	11,	25,	39,	52,	UNK,	UNK,	UNK,
563 /*50*/	125,	12,	26,	40,	53,	28,	UNK,	UNK,
564 /*58*/	14,	13,	27,	43,	115,	14,	UNK,	UNK,
565 };
566 #endif /* hpcmips */
567 
568 #ifdef hpcsh
569 /*
570  * HP Jornada 680/690
571  */
572 /* Japanese */
573 const uint8_t jornada6x0_jp_keytrans[] = {
574 /*      0    1    2    3    4    5    6    7 */
575 /* 0 */ 59 , 45 , 31 , 17 , 3  , UNK, 29 , UNK, /* ctrl 29 */
576 /* 1 */ 60 , 46 , 32 , 18 , 4  , 42 , UNK, UNK, /* shift L 42 */
577 /* 2 */ 61 , 47 , 33 , 19 , 5  , UNK, 57 , UNK,
578 /* 3 */ 66 , 52 , 38 , 24 , 10 , UNK, 14 , 203,
579 /* 4 */ 65 , 51 , 37 , 23 , 9  , UNK, 115, UNK,
580 /* 5 */ 64 , 50 , 36 , 22 , 8  , UNK, 121, UNK,
581 /* 6 */ 62 , 48 , 34 , 20 , 6  , UNK, UNK, 56 , /* alt 56 */
582 /* 7 */ 63 , 49 , 35 , 21 , 7  , UNK, UNK, 123,
583 /* 8 */ IGN, 53 , 39 , 25 , 11 , 200, UNK, 208,
584 /* 9 */ 112, 40 , 27 , 26 , 12 , 125, UNK, 205,
585 /*10 */ 41 , 28 , 43 , 14 , 13 , 54 , UNK, UNK, /* shift R 54 */
586 /*11 */ SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN,
587 /*12 */ 1  , 44 , 30 , 16 , 2  , 15 , 221, UNK,
588 /*13 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
589 /*14 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
590 /*15 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
591 };
592 
593 /* US/UK - Fn to the left of the space bar and missing few keys */
594 const uint8_t jornada6x0_us_keytrans[] = {
595 /*      0    1    2    3    4    5    6    7 */
596 /* 0 */ 59 , 45 , 31 , 17 , 3  , UNK, 29 , UNK,
597 /* 1 */ 60 , 46 , 32 , 18 , 4  , 42 , UNK, UNK,
598 /* 2 */ 61 , 47 , 33 , 19 , 5  , UNK, 57 , UNK,
599 /* 3 */ 66 , 52 , 38 , 24 , 10 , UNK, 211, 203,
600 /* 4 */ 65 , 51 , 37 , 23 , 9  , UNK, 53 , UNK,
601 /* 5 */ 64 , 50 , 36 , 22 , 8  , UNK, UNK, UNK,
602 /* 6 */ 62 , 48 , 34 , 20 , 6  , UNK, UNK, 56 ,
603 /* 7 */ 63 , 49 , 35 , 21 , 7  , UNK, UNK, 184,
604 /* 8 */ 67 , UNK, 39 , 25 , 11 , 200, UNK, 208,
605 /* 9 */ 68 , 40 , UNK, 43 , 12 , UNK, UNK, 205,
606 /*10 */ 87 , 28 , UNK, 14 , 13 , 54 , UNK, UNK,
607 /*11 */ SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN,
608 /*12 */ 1  , 44 , 30 , 16 , 2  , 15 , 219, UNK,
609 /*13 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
610 /*14 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
611 /*15 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
612 };
613 
614 /* International - AltGr to the right and extra keys in three middle rows */
615 const uint8_t jornada6x0_intl_keytrans[] = {
616 /*      0    1    2    3    4    5    6    7 */
617 /* 0 */ 59 , 45 , 31 , 17 , 3  , UNK, 29 , UNK,
618 /* 1 */ 60 , 46 , 32 , 18 , 4  , 42 , UNK, UNK,
619 /* 2 */ 61 , 47 , 33 , 19 , 5  , UNK, 57 , UNK,
620 /* 3 */ 66 , 52 , 38 , 24 , 10 , UNK, 211, 203,
621 /* 4 */ 65 , 51 , 37 , 23 , 9  , UNK, 184, UNK,
622 /* 5 */ 64 , 50 , 36 , 22 , 8  , UNK, UNK, UNK,
623 /* 6 */ 62 , 48 , 34 , 20 , 6  , UNK, UNK, 56 ,
624 /* 7 */ 63 , 49 , 35 , 21 , 7  , UNK, UNK, 41 ,
625 /* 8 */ 67 , 53 , 39 , 25 , 11 , 200, UNK, 208,
626 /* 9 */ 68 , 40 , 27 , 26 , 12 , UNK, UNK, 205,
627 /*10 */ 87 , 28 , 43 , 14 , 13 , 54 , UNK, UNK,
628 /*11 */ SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN,
629 /*12 */ 1  , 44 , 30 , 16 , 2  , 15 , 219, UNK,
630 /*13 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
631 /*14 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
632 /*15 */ UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
633 };
634 
635 const int jornada6x0_special_keymap[] = {
636 	[KEY_SPECIAL_OFF]	= -1,
637 	[KEY_SPECIAL_LIGHT]	= -1
638 };
639 
640 
641 /*
642  * HP 620LX
643  */
644 /* Japanese */
645 const uint8_t hp620lx_jp_keytrans[] = {
646 /*      0    1    2    3    4    5    6    7 */
647 /* 0 */	2  , 16 , 112, UNK, IGN, UNK, 42 , 30 , /* REC button */
648 /* 1 */	3  , 17 , 58 , 44 , UNK, 45 , 15 , 31 ,
649 /* 2 */	4  , 18 , UNK, 56 , 59 , 46 , 1  , 32 ,
650 /* 3 */	5  , 19 , UNK, UNK, 60 , 123, UNK, 33 ,
651 /* 4 */	6  , 20 , 47 , 57 , 61 , 48 , UNK, 34 ,
652 /* 5 */	7  , 21 , UNK, 121, 62 , 49 , UNK, 35 ,
653 /* 6 */	8  , 22 , UNK, 125, 63 , 50 , UNK, 36 ,
654 /* 7 */	9  , 23 , 52 , 115, 64 , 51 , UNK, 37 ,
655 /* 8 */	10 , 24 , 53 , 203, 65 , 200, 39 , 38 ,
656 /* 9 */	11 , 25 , 40 , 208, 66 , 205, 27 , 26 ,
657 /*10 */	12 , 13 , 28 , UNK, UNK, UNK, 41 , 43 ,
658 /*11 */	SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN, /* ON button */
659 /*12 */	29 , IGN, IGN, IGN, IGN, IGN, IGN, IGN,
660 /*13 */	14 , IGN, IGN, IGN, IGN, IGN, IGN, IGN,
661 /*14 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
662 /*15 */	SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN  /* LED button */
663 };
664 
665 /* Other models */
666 const uint8_t hp620lx_intl_keytrans[] = {
667 /*      0    1    2    3    4    5    6    7 */
668 /* 0 */	2  , 16 , 219, UNK, IGN, UNK, 42 , 30 , /* REC button */
669 /* 1 */	3  , 17 , 15 , 44 , UNK, 45 , 41 , 31 ,
670 /* 2 */	4  , 18 , UNK, 69 , 59 , 46 , 1  , 32 ,
671 /* 3 */	5  , 19 , UNK, UNK, 60 , 56 , UNK, 33 ,
672 /* 4 */	6  , 20 , 47 , 57 , 61 , 48 , UNK, 34 ,
673 /* 5 */	7  , 21 , UNK, UNK, 62 , 49 , UNK, 35 ,
674 /* 6 */	8  , 22 , UNK, 184, 63 , 50 , UNK, 36 ,
675 /* 7 */	9  , 23 , 52 , 211, 64 , 51 , UNK, 37 ,
676 /* 8 */	10 , 24 , 53 , 203, 65 , 200, 39 , 38 ,
677 /* 9 */	11 , 25 , 40 , 208, 66 , 205, 27 , 26 ,
678 /*10 */	12 , 13 , 28 , UNK, UNK, UNK, 54 , 43 ,
679 /*11 */	SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN, /* ON button */
680 /*12 */	29 , IGN, IGN, IGN, IGN, IGN, IGN, IGN,
681 /*13 */	14 , IGN, IGN, IGN, IGN, IGN, IGN, IGN,
682 /*14 */	UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK,
683 /*15 */	SPL, IGN, IGN, IGN, IGN, IGN, IGN, IGN  /* LED button */
684 };
685 
686 const int hp620lx_special_keymap[] = {
687 	[KEY_SPECIAL_OFF]	= -1,	/* 88 */
688 	[KEY_SPECIAL_LIGHT]	= 120
689 };
690 
691 
692 /*
693  * HITACHI PERSONA HPW50PAD
694  */
695 /* Japanese */
696 const uint8_t persona_hpw50pad_jp_keytrans[] = {
697 /*      0    1    2    3    4    5    6    7 */
698 /* 0 */ 59 , 61 , 63 , 65 , 67 , SPL, UNK, UNK, /* ON button */
699 /* 1 */ 29 , UNK, 47 , 48 , 121, UNK, UNK, UNK,
700 /* 2 */  1 , UNK, 34 , 51 , 112, UNK, UNK, UNK,
701 /* 3 */ 41 , 221, 35 , 37 , 52 , UNK, UNK, UNK,
702 /* 4 */ 45 , 58 , 22 , 38 , 40 , 42 , UNK, UNK,
703 /* 5 */ 30 , 16 , 21 , 24 , 28 , 54 , UNK, UNK,
704 /* 6 */ 17 ,  4 , UNK, 10 , 12 , 205, UNK, UNK,
705 /* 7 */ 31 , 18 ,  7 , 25 , 13 , 83 , UNK, UNK,
706 /* 8 */ 60 , 62 , 64 , 66 , 68 , UNK, UNK, UNK,
707 /* 9 */ UNK, 123, 49 , 53 , 203, UNK, UNK, UNK,
708 /*10 */ 56 , 46 , 50 , 57 , 208, UNK, UNK, UNK,
709 /*11 */ 15 , 33 , 36 , 39 , 43 , UNK, UNK, UNK,
710 /*12 */ 44 , 20 , 23 , 26 , 27 , UNK, UNK, UNK,
711 /*13 */  2 ,  6 ,  9 , 115, 200, UNK, UNK, UNK,
712 /*14 */  3 ,  5 , UNK, UNK, 125, UNK, UNK, UNK,
713 /*15 */ 32 , 19 ,  8 , 11 , 14 , UNK, UNK, UNK,
714 };
715 
716 const int persona_hpw50pad_special_keymap[] = {
717 	[KEY_SPECIAL_OFF]	= 5,
718 	[KEY_SPECIAL_LIGHT]	= -1
719 };
720 
721 static const keysym_t persona_hpw50pad_jp_keydesc[] = {
722 /*	pos	command			normal		shifted		*/
723 	KC(63),	KS_Cmd_ContrastDown,	KS_f5,
724 	KC(64),	KS_Cmd_ContrastUp,	KS_f6,
725 	KC(65),	KS_Cmd_BrightnessDown,	KS_f7,
726 	KC(66),	KS_Cmd_BrightnessUp,	KS_f8,
727 
728 	KC(200),KS_Cmd_ScrollFastUp,	KS_Up,
729 	KC(208),KS_Cmd_ScrollFastDown,	KS_Down,
730 	KC(203),KS_KP_Home,		KS_Left,
731 	KC(205),KS_KP_End,		KS_Right,
732 };
733 
734 /*
735  * HITACHI PERSONA HPW200EC
736 */
737 /* US */
738 const uint8_t persona_hpw200ec_keytrans[] = {
739 /*      0    1    2    3    4    5    6    7 */
740 /* 0 */  3 ,  2 , 71 , 69 , 67 , SPL, UNK, UNK,
741 /* 1 */ 11 , UNK, 79 , 77 , 75 , UNK, UNK, UNK,
742 /* 2 */ 19 , UNK, UNK, 85 , 83 , UNK, UNK, UNK,
743 /* 3 */ 27 , 26 , 95 , 93 , 91 , UNK, UNK, UNK,
744 /* 4 */ 35 , 34 , 103, 101, 99 , 32 , UNK, UNK,
745 /* 5 */ 43 , 42 , 111, 109, 107, 40 , UNK, UNK,
746 /* 6 */ 51 , 50 , 119, 117, 115, 48 , UNK, UNK,
747 /* 7 */ 59 , 58 , UNK, UNK, 123, 56 , UNK, UNK,
748 /* 8 */  5 ,  6 , 70 , 68 , 66 , UNK, UNK, UNK,
749 /* 9 */ UNK, UNK, 78 , 76 , 74 , UNK, UNK, UNK,
750 /*10 */ 21 , UNK, UNK, 84 , 82 , UNK, UNK, UNK,
751 /*11 */ 29 , 30 , 94 , 92 , 90 , UNK, UNK, UNK,
752 /*12 */ UNK, 26 , 102, 100, 98 , UNK, UNK, UNK,
753 /*13 */ UNK, 46 , 110, 108, 106, 104, UNK, UNK,
754 /*14 */ 53 , 54 , 118, 124, 114, UNK, UNK, UNK,
755 /*15 */ 61 , 62 , 126, UNK, 122, UNK, UNK, UNK,
756 };
757 
758 const int persona_hpw200ec_special_keymap[] = {
759 	[KEY_SPECIAL_OFF]	= 5,
760 	[KEY_SPECIAL_LIGHT]	= -1
761 };
762 
763 #endif /* hpcsh */
764 
765 #ifdef hpcarm
766 /*
767  * HP Jornada 710/720/728
768  */
769 
770 /* Japanese */
771 const uint8_t jornada7xx_jp_keytrans[] = {
772 /* 00 */ UNK,  1 , 59 , 60 , 61 , 62 , 63 , 64 ,
773 /* 08 */ 65 , 66 , 67 , 112, 41 , IGN, IGN, IGN,
774 /* 10 */ UNK,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,
775 /* 18 */  9 , 10 , 11 , 12 , 13 , UNK, UNK, UNK,
776 /* 20 */ UNK, 16 , 17 , 18 , 19 , 20 , 21 , 22 ,
777 /* 28 */  23, 24 , 25 , 26 , UNK, UNK, UNK, UNK,
778 /* 30 */ UNK, 30 , 31 , 32 , 33 , 34 , 35 , 36 ,
779 /* 38 */  37, 38 , 39 , 27 , 43 , UNK, UNK, UNK,
780 /* 40 */ UNK, 44 , 45 , 46 , 47 , 48 , 49 , 50 ,
781 /* 48 */  51, 52 , 53 , 40 , 28 , UNK, UNK, UNK,
782 /* 50 */ UNK, 15 , UNK, 42 , UNK, UNK, UNK, UNK,
783 /* 58 */ UNK, UNK, 200, 125, 54 , UNK, UNK, UNK,
784 /* 60 */ UNK, UNK, UNK, UNK, UNK, 56 , 123, UNK,
785 /* 68 */ UNK, 203, 208, 205, UNK, UNK, UNK, UNK,
786 /* 70 */ UNK, 184, 29 , UNK, 57 , UNK, UNK, 121,
787 /* 78 */ 53 , 14 , UNK, UNK, UNK, UNK, UNK, SPL,
788 };
789 
790 /* US/UK - Fn to the left of the space bar and missing few keys */
791 const uint8_t jornada7xx_us_keytrans[] = {
792 /* 00 */ UNK,  1 , 59 , 60 , 61 , 62 , 63 , 64 ,
793 /* 08 */ 65 , 66 , 67 , 68 , 87 , IGN, IGN, IGN,
794 /* 10 */ UNK,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,
795 /* 18 */  9 , 10 , 11 , 12 , 13 , UNK, UNK, UNK,
796 /* 20 */ UNK, 16 , 17 , 18 , 19 , 20 , 21 , 22 ,
797 /* 28 */  23, 24 , 25 , 43 , 14 , UNK, UNK, UNK,
798 /* 30 */ UNK, 30 , 31 , 32 , 33 , 34 , 35 , 36 ,
799 /* 38 */  37, 38 , 39 , 40 , UNK, UNK, UNK, UNK,
800 /* 40 */ UNK, 44 , 45 , 46 , 47 , 48 , 49 , 50 ,
801 /* 48 */  51, 52 , UNK, 40 , 28 , UNK, UNK, UNK,
802 /* 50 */ UNK, 15 , UNK, 42 , UNK, UNK, UNK, UNK,
803 /* 58 */ UNK, UNK, 200, UNK, 54 , UNK, UNK, UNK,
804 /* 60 */ UNK, UNK, UNK, UNK, UNK, 56 , 184, UNK,
805 /* 68 */ UNK, 203, 208, 205, UNK, UNK, UNK, UNK,
806 /* 70 */ UNK, 221, 29 , UNK, 57 , UNK, UNK, UNK,
807 /* 78 */ 53 , 14 , UNK, UNK, UNK, UNK, UNK, SPL,
808 };
809 
810 /* International - AltGr to the right and extra keys in three middle rows */
811 const uint8_t jornada7xx_intl_keytrans[] = {
812 /* 00 */ UNK,  1 , 59 , 60 , 61 , 62 , 63 , 64 ,
813 /* 08 */ 65 , 66 , 67 , 68 , 87 , IGN, IGN, IGN,
814 /* 10 */ UNK,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,
815 /* 18 */  9 , 10 , 11 , 12 , 13 , UNK, UNK, UNK,
816 /* 20 */ UNK, 16 , 17 , 18 , 19 , 20 , 21 , 22 ,
817 /* 28 */  23, 24 , 25 , 26 , 14 , UNK, UNK, UNK,
818 /* 30 */ UNK, 30 , 31 , 32 , 33 , 34 , 35 , 36 ,
819 /* 38 */  37, 38 , 39 , 27 , 43 , UNK, UNK, UNK,
820 /* 40 */ UNK, 44 , 45 , 46 , 47 , 48 , 49 , 50 ,
821 /* 48 */  51, 52 , 53 , 40 , 28 , UNK, UNK, UNK,
822 /* 50 */ UNK, 15 , UNK, 42 , UNK, UNK, UNK, UNK,
823 /* 58 */ UNK, UNK, 200, UNK, 54 , UNK, UNK, UNK,
824 /* 60 */ UNK, UNK, UNK, UNK, UNK, 56 , 41 , UNK,
825 /* 68 */ UNK, 203, 208, 205, UNK, UNK, UNK, UNK,
826 /* 70 */ UNK, 221, 29 , UNK, 57 , UNK, UNK, UNK,
827 /* 78 */ 184, 211, UNK, UNK, UNK, UNK, UNK, SPL,
828 };
829 
830 const int jornada7xx_special_keymap[] = {
831 	[KEY_SPECIAL_OFF]	= 127,
832 	[KEY_SPECIAL_LIGHT]	= -1
833 };
834 
835 /*
836  * Sharp W-ZERO3 series
837  */
838 /*
839  * WS003SH/WS004SH/WS007SH keyscan map
840 	CTRL	(none)	TAB	(none)	CALL	MAIL	IE
841 	1	2	q	w	a	z	MOJI
842 	3	4	e	s	d	x	(none)
843 	5	r	t	f	c	-	OK
844 	6	y	g	v	b	SPACE	ACTION
845 	7	8	u	h	n	/	,
846 	9	i	j	m	.	(none)	LEFT
847 	0	o	k	l	(none)	UP	DOWN
848 	BS	p	(none)	(none)	ENTER	(none)	RIGHT
849 	(none)	(none)	(none)	(none)	(none)	(none)	(none)
850 	ROTATE	VOL-	(none)	SHIFT	WIN	LSOFT	RSOFT
851 	CAMERA	VOL+	(none)	(none)	(none)	FN	(none)
852 */
853 /* Japanese */
854 const uint8_t ws003sh_jp_keytrans[] = {
855 /*	row#0,	row#1,	row#2,	row#3,	row#4,	row#5,	row#6,	*/
856 /*00*/	29,	UNK,	15,	UNK,	IGN,	IGN,	IGN,
857 /*01*/	2,	3,	16,	17,	30,	44,	1,
858 /*02*/	4,	5,	18,	31,	32,	45,	UNK,
859 /*03*/	6,	19,	20,	33,	46,	12,	28,
860 /*04*/	7,	21,	34,	47,	48,	57,	28,
861 /*05*/	8,	9,	22,	35,	49,	53,	51,
862 /*06*/	10,	23,	36,	50,	52,	UNK,	203,
863 /*07*/	11,	24,	37,	38,	UNK,	200,	208,
864 /*08*/	14,	25,	UNK,	UNK,	28,	UNK,	205,
865 /*09*/	UNK,	UNK,	UNK,	UNK,	UNK,	UNK,	UNK,
866 /*10*/	IGN,	174,	UNK,	42,	IGN,	IGN,	IGN,
867 /*11*/	IGN,	176,	UNK,	UNK,	UNK,	184,	SPL,
868 };
869 
870 const int ws003sh_special_keymap[] = {
871 	[KEY_SPECIAL_OFF]	= 83,
872 	[KEY_SPECIAL_LIGHT]	= -1
873 };
874 
875 static const keysym_t ws003sh_jp_keydesc[] = {
876 /*  pos		normal		shifted		altgr	*/
877     KC(4),	KS_3,		KS_numbersign,	KS_Cmd_BrightnessDown,
878     KC(5),	KS_4,		KS_dollar,	KS_Cmd_BrightnessUp,
879     KC(8),	KS_7,		KS_apostrophe,	KS_grave,
880     KC(9),	KS_8,		KS_parenleft,	KS_braceleft,
881     KC(10),	KS_9,		KS_parenright,	KS_braceright,
882     KC(12),	KS_minus,	KS_equal,	KS_backslash,
883     KC(14),	KS_Delete,	KS_Delete,	KS_BackSpace,
884     KC(15),	KS_Tab,		KS_Tab,		KS_Escape,
885     KC(17),	KS_w,		KS_W,		KS_asciicircum,
886     KC(18),	KS_e,		KS_E,		KS_asciitilde,
887     KC(19),	KS_r,		KS_R,		KS_bar,
888     KC(22),	KS_u,		KS_U,		KS_bracketleft,
889     KC(23),	KS_i,		KS_I,		KS_bracketright,
890     KC(24),	KS_o,		KS_O,		KS_underscore,
891     KC(25),	KS_p,		KS_P,		KS_at,
892     KC(37),	KS_k,		KS_K,		KS_plus,
893     KC(38),	KS_l,		KS_L,		KS_asterisk,
894     KC(42),	KS_Shift_L,	KS_Shift_L,	KS_Shift_Lock,
895     KC(51),	KS_comma,	KS_semicolon,	KS_less,
896     KC(52),	KS_period,	KS_colon,	KS_greater,
897     KC(184),	KS_Mode_switch,	KS_Multi_key,
898     KC(200),	KS_Up,		KS_Up,		KS_Prior,
899     KC(203),	KS_Left,	KS_Left,	KS_Home,
900     KC(205),	KS_Right,	KS_Right,	KS_End,
901     KC(208),	KS_Down,	KS_Down,	KS_Next,
902 };
903 
904 /*
905  * WS011SH/WS020SH keyscan map
906 	Ctrl	(none)	Tab	(none)	(none)	(none)	(none)
907 	(none)	(none)	Q	W	A	Z	MOJI
908 	(none)	(none)	E	S	D	X	HAN/ZEN
909 	(none)	R	T	F	C	-	OK
910 	(none)	Y	G	V	B	Space	(none)
911 	(none)	(none)	U	H	N	/	,
912 	(none)	I	J	M	.	(none)	LEFT
913 	(none)	O	K	L	(none)	UP	DOWN
914 	Del	(none)	(none)	(none)	Enter	(none)	RIGHT
915 	(none)	(none)	(none)	(none)	(none)	(none)	(none)
916 	ROTATE	(none)	(none)	SHIFT	(none)	(none)	(none)
917 	(none)	(none)	(none)	(none)	(none)	FN	(none)
918 */
919 /* Japanese */
920 const uint8_t ws011sh_jp_keytrans[] = {
921 /*	row#0,	row#1,	row#2,	row#3,	row#4,	row#5,	row#6,	*/
922 /*00*/	29,	UNK,	15,	UNK,	UNK,	UNK,	UNK,
923 /*01*/	UNK,	UNK,	16,	17,	30,	44,	1,
924 /*02*/	UNK,	UNK,	18,	31,	32,	45,	41,
925 /*03*/	UNK,	19,	20,	33,	46,	12,	3,
926 /*04*/	UNK,	21,	34,	47,	48,	57,	UNK,
927 /*05*/	UNK,	UNK,	22,	35,	49,	53,	51,
928 /*06*/	UNK,	23,	36,	50,	52,	UNK,	203,
929 /*07*/	UNK,	24,	37,	38,	UNK,	200,	208,
930 /*08*/	14,	25,	UNK,	UNK,	28,	UNK,	205,
931 /*09*/	UNK,	UNK,	UNK,	UNK,	UNK,	UNK,	UNK,
932 /*10*/	IGN,	UNK,	UNK,	42,	UNK,	UNK,	UNK,
933 /*11*/	UNK,	UNK,	UNK,	UNK,	UNK,	184,	SPL,
934 };
935 
936 const int ws011sh_special_keymap[] = {
937 	[KEY_SPECIAL_OFF]	= 83,
938 	[KEY_SPECIAL_LIGHT]	= -1
939 };
940 
941 static const keysym_t ws011sh_jp_keydesc[] = {
942 /*  pos		normal		shifted		altgr	*/
943     KC(3),	KS_grave,	KS_braceleft,	KS_braceright,
944     KC(12),	KS_minus,	KS_equal,	KS_backslash,
945     KC(14),	KS_Delete,	KS_Delete,	KS_BackSpace,
946     KC(15),	KS_Tab,		KS_Tab,		KS_Escape,
947     KC(16),	KS_q,		KS_Q,		KS_quotedbl,
948     KC(17),	KS_w,		KS_W,		KS_numbersign,
949     KC(18),	KS_e,		KS_E,		KS_dollar,
950     KC(19),	KS_r,		KS_R,		KS_percent,
951     KC(20),	KS_t,		KS_T,		KS_ampersand,
952     KC(21),	KS_y,		KS_Y,		KS_1,
953     KC(22),	KS_u,		KS_U,		KS_2,
954     KC(23),	KS_i,		KS_I,		KS_3,
955     KC(24),	KS_o,		KS_O,		KS_underscore,
956     KC(25),	KS_p,		KS_P,		KS_at,
957     KC(30),	KS_a,		KS_A,		KS_bracketleft,
958     KC(31),	KS_s,		KS_S,		KS_apostrophe,
959     KC(32),	KS_d,		KS_D,		KS_parenleft,
960     KC(33),	KS_f,		KS_F,		KS_parenright,
961     KC(34),	KS_g,		KS_G,		KS_asterisk,
962     KC(35),	KS_h,		KS_H,		KS_4,
963     KC(36),	KS_j,		KS_J,		KS_5,
964     KC(37),	KS_k,		KS_K,		KS_6,
965     KC(38),	KS_l,		KS_L,		KS_plus,
966     KC(41),	KS_Zenkaku_Hankaku, KS_Zenkaku_Hankaku, KS_exclam,
967     KC(42),	KS_Shift_L,	KS_Shift_L,	KS_Shift_Lock,
968     KC(44),	KS_z,		KS_Z,		KS_bracketright,
969     KC(45),	KS_x,		KS_X,		KS_asciicircum,
970     KC(46),	KS_c,		KS_C,		KS_asciitilde,
971     KC(47),	KS_v,		KS_V,		KS_bar,
972     KC(48),	KS_b,		KS_B,		KS_7,
973     KC(49),	KS_n,		KS_N,		KS_8,
974     KC(50),	KS_m,		KS_M,		KS_9,
975     KC(51),	KS_comma,	KS_less,	KS_semicolon,
976     KC(52),	KS_period,	KS_greater,	KS_colon,
977     KC(53),	KS_slash,	KS_question,	KS_0,
978     KC(57),	KS_space,
979     KC(184),	KS_Mode_switch,	KS_Multi_key,
980     KC(200),	KS_Up,		KS_Up,		KS_Prior,
981     KC(203),	KS_Left,	KS_Left,	KS_Home,
982     KC(205),	KS_Right,	KS_Right,	KS_End,
983     KC(208),	KS_Down,	KS_Down,	KS_Next,
984 };
985 #endif /* hpcarm */
986 
987 #if defined(hpcarm) || defined(hpcsh)
988 /*
989  * Shared keymaps between the Jornada series (6xx, 7xx).
990  */
991 
992 /* US (ABA), UK (ABU) */
993 static const keysym_t jornada_us_keydesc[] = {
994 /*  pos      normal          shifted        altgr       */
995     KC(2),   KS_1,           KS_exclam,     KS_asciitilde,
996     KC(3),   KS_2,           KS_at,         KS_grave,
997     KC(4),   KS_3,           KS_numbersign, KS_sterling,
998 #ifdef KS_euro
999     KC(5),   KS_4,           KS_dollar,     KS_euro,
1000 #endif
1001     KC(25),  KS_p,           KS_P,          KS_braceleft,
1002     KC(39),  KS_semicolon,   KS_colon,      KS_bracketleft,
1003     KC(40),  KS_apostrophe,  KS_quotedbl,   KS_bracketright,
1004     KC(43),  KS_backslash,   KS_bar,        KS_braceright,
1005     KC(184), KS_Mode_switch, KS_Multi_key,
1006 
1007     KC(200), KS_Cmd_BrightnessUp,   KS_Up,
1008     KC(203), KS_Cmd_ContrastDown,   KS_Left,
1009     KC(205), KS_Cmd_ContrastUp,     KS_Right,
1010     KC(208), KS_Cmd_BrightnessDown, KS_Down,
1011 };
1012 
1013 /*
1014  * XXX: Add AltGr layer for #ABB here?  OTOH, all the keys necessary
1015  * for basic actions in DDB or shell are on the primary layer, so it
1016  * makes sense to support AltGr via wsconsctl(8) instead, as the same
1017  * primary layer is used e.g. in Russian models.  But it does make
1018  * sense to define the <AltGr> key itself here, as we base this layout
1019  * on KB_US that defines it as the right <Alt>.
1020  */
1021 /* European English (ABB) */
1022 static const keysym_t jornada_intl_keydesc[] = {
1023 /*  pos      normal          shifted        altgr       */
1024     KC(42),  KS_Shift_L,     KS_Shift_L,    KS_Caps_Lock,
1025     KC(184), KS_Mode_switch, KS_Multi_key,
1026 
1027     KC(200), KS_Cmd_BrightnessUp,   KS_Up,
1028     KC(203), KS_Cmd_ContrastDown,   KS_Left,
1029     KC(205), KS_Cmd_ContrastUp,     KS_Right,
1030     KC(208), KS_Cmd_BrightnessDown, KS_Down,
1031 };
1032 
1033 /* German (ABD) */
1034 static const keysym_t jornada_de_keydesc[] = {
1035 /*  pos      normal          shifted        altgr       */
1036     KC(2),   KS_1,           KS_exclam,     KS_brokenbar,
1037     KC(5),   KS_4,           KS_dollar,     KS_ccedilla,
1038     KC(6),   KS_5,           KS_percent,    KS_sterling,
1039     KC(7),   KS_6,           KS_ampersand,  KS_notsign,
1040 #ifdef KS_euro
1041     KC(18),  KS_e,           KS_E,          KS_euro,
1042 #endif
1043     KC(27),  KS_plus,        KS_asterisk,   KS_asciitilde, /* NB: not dead */
1044     KC(30),  KS_a,           KS_A,          KS_bar,
1045     KC(41),  KS_asciicircum, KS_degree,                    /* NB: not dead */
1046     KC(43),  KS_numbersign,  KS_apostrophe, KS_dead_diaeresis,
1047     KC(44),  KS_y,           KS_Y,          KS_less,
1048     KC(45),  KS_x,           KS_X,          KS_greater,
1049     KC(46),  KS_c,           KS_C,          KS_cent,
1050 
1051     KC(200), KS_Cmd_BrightnessUp,   KS_Up,
1052     KC(203), KS_Cmd_ContrastDown,   KS_Left,
1053     KC(205), KS_Cmd_ContrastUp,     KS_Right,
1054     KC(208), KS_Cmd_BrightnessDown, KS_Down,
1055 };
1056 
1057 /* French (ABF) */
1058 static const keysym_t jornada_fr_keydesc[] = {
1059 /*  pos      normal          shifted        altgr       */
1060     KC(2),   KS_ampersand,   KS_1,          KS_plusminus,
1061 #ifdef KS_euro
1062     KC(18),  KS_e,           KS_E,          KS_euro,
1063 #endif
1064     KC(19),  KS_r,           KS_R,          KS_onequarter,
1065     KC(20),  KS_t,           KS_T,          KS_onehalf,
1066     KC(21),  KS_y,           KS_Y,          KS_threequarters,
1067     KC(25),  KS_p,           KS_P,          KS_paragraph,
1068     KC(30),  KS_q,           KS_Q,          KS_brokenbar,
1069     KC(31),  KS_s,           KS_S,          KS_guillemotleft,
1070     KC(32),  KS_d,           KS_D,          KS_guillemotright,
1071     KC(40),  KS_ugrave,      KS_percent,    KS_dead_acute,
1072     KC(41),  KS_twosuperior, KS_voidSymbol, KS_threesuperior,
1073     KC(43),  KS_asterisk,    KS_mu,         KS_notsign,
1074     KC(44),  KS_w,           KS_W,          KS_less,
1075     KC(45),  KS_x,           KS_X,          KS_greater,
1076     KC(46),  KS_c,           KS_C,          KS_cent,
1077     KC(50),  KS_comma,       KS_question,   KS_mu,
1078     KC(53),  KS_exclam,      KS_section,    KS_Eacute,
1079     KC(184), KS_Mode_switch, KS_Multi_key,
1080 
1081     KC(200), KS_Cmd_BrightnessUp,   KS_Up,
1082     KC(203), KS_Cmd_ContrastDown,   KS_Left,
1083     KC(205), KS_Cmd_ContrastUp,     KS_Right,
1084     KC(208), KS_Cmd_BrightnessDown, KS_Down,
1085 };
1086 
1087 /* Scandinavian */
1088 static const keysym_t jornada_scnv_keydesc[] = {
1089 /*  pos      normal          shifted        altgr       */
1090     KC(2),   KS_1,           KS_exclam,     KS_asciitilde,
1091     KC(3),   KS_2,           KS_quotedbl,   KS_at,
1092     KC(4),   KS_3,           KS_numbersign, KS_sterling,
1093     KC(5),   KS_4,           KS_currency,   KS_dollar,
1094     KC(7),   KS_6,           KS_ampersand,
1095     KC(8),   KS_7,           KS_slash,      KS_braceleft,
1096     KC(9),   KS_8,           KS_parenleft,  KS_bracketleft,
1097     KC(10),  KS_9,           KS_parenright, KS_bracketright,
1098     KC(11),  KS_0,           KS_equal,      KS_braceright,
1099     KC(12),  KS_plus,        KS_question,   KS_backslash,
1100     KC(13),  KS_apostrophe,  KS_grave,
1101     KC(25),  KS_p,           KS_P,          KS_braceleft,
1102     KC(26),  KS_aring,
1103     /*
1104      * XXX: KC(39) and KC(40) has odiaeresis/adiaeresis *and*
1105      * oslash/ae on them.  Apparently localized WinCE uses the former
1106      * for Swedish and Finnish and the latter for Danish and
1107      * Norwegian.  But as the keyboard doesn't seem to have
1108      * semicolon/colon and minus/underscore nowhere on the primary and
1109      * altgr layers, I put them here (semicolon/colon is inherited).
1110      */
1111     KC(40),  KS_minus,       KS_underscore, /* XXX */
1112     KC(41),  KS_paragraph,   KS_onehalf,    KS_bar,
1113     KC(184), KS_Mode_switch, KS_Multi_key,
1114 
1115     KC(200), KS_Cmd_BrightnessUp,   KS_Up,
1116     KC(203), KS_Cmd_ContrastDown,   KS_Left,
1117     KC(205), KS_Cmd_ContrastUp,     KS_Right,
1118     KC(208), KS_Cmd_BrightnessDown, KS_Down,
1119 };
1120 
1121 /* Spanish (ABE) */
1122 static const keysym_t jornada_es_keydesc[] = {
1123 /*  pos      normal          shifted        altgr            */
1124     KC(2),   KS_1,           KS_exclam,     KS_ordfeminine,
1125     KC(3),   KS_2,           KS_quotedbl,   KS_masculine,
1126     KC(4),   KS_3,           KS_numbersign,
1127     KC(12),  KS_apostrophe,  KS_question,   KS_backslash,
1128     KC(13),  KS_questiondown,KS_exclamdown,
1129     KC(16),  KS_q,           KS_Q,          KS_at,
1130 #ifdef KS_euro
1131     KC(18),  KS_e,           KS_E,          KS_euro,
1132 #endif
1133     KC(26),  KS_dead_acute,  KS_dead_diaeresis,
1134     KC(27),  KS_plus,        KS_asterisk,   KS_dead_tilde,
1135     KC(40),  KS_braceleft,   KS_bracketleft,KS_dead_circumflex,
1136     KC(41),  KS_bar,         KS_degree,     KS_notsign,
1137     KC(43),  KS_braceright,  KS_bracketright,KS_dead_grave,
1138     KC(44),  KS_z,           KS_Z,          KS_less,
1139     KC(45),  KS_x,           KS_X,          KS_greater,
1140     KC(46),  KS_c,           KS_C,          KS_Ccedilla,
1141 
1142     KC(200), KS_Cmd_BrightnessUp,   KS_Up,
1143     KC(203), KS_Cmd_ContrastDown,   KS_Left,
1144     KC(205), KS_Cmd_ContrastUp,     KS_Right,
1145     KC(208), KS_Cmd_BrightnessDown, KS_Down,
1146 };
1147 #endif /* hpcarm || hpcsh */
1148 
1149 /*
1150  * REMINDER:
1151  *   When adding new entry to this array, make sure that pckbd_keydesctab[]
1152  *   in sys/dev/pckbport/wskbdmap_mfii.c has a placeholder KB_MACHDEP entry
1153  *   for the base ht_layout that you refer.
1154  */
1155 const struct hpckbd_keymap_table {
1156 	platid_t	*ht_platform;
1157 	const uint8_t	*ht_keymap;
1158 	const int	*ht_special;
1159 	struct {
1160 		const keysym_t	*map;
1161 		int size;
1162 	} ht_cmdmap;
1163 	kbd_t		ht_layout;
1164 } hpckbd_keymap_table[] = {
1165 #ifdef hpcmips
1166 	{	&platid_mask_MACH_COMPAQ_C,
1167 		tc5165_compaq_c_jp_keymap,
1168 		tc5165_compaq_c_jp_special_keymap,
1169 		NULLCMDMAP,
1170 		KB_JP },
1171 	{	&platid_mask_MACH_VICTOR_INTERLINK,
1172 		m38813c_keymap,
1173 		default_special_keymap,
1174 		NULLCMDMAP,
1175 		KB_JP },
1176 	{	&platid_mask_MACH_SHARP_TELIOS,
1177 		tc5165_telios_jp_keymap,
1178 		default_special_keymap,
1179 		CMDMAP(tc5165_telios_jp_cmdmap),
1180 		KB_JP },
1181 	{	&platid_mask_MACH_SHARP_MOBILON,
1182 		tc5165_mobilon_keymap,
1183 		tc5165_mobilon_special_keymap,
1184 		NULLCMDMAP,
1185 		KB_US },
1186 	{	&platid_mask_MACH_NEC_MCR_500A,
1187 		mobilepro750c_keytrans,
1188 		NULL,
1189 		NULLCMDMAP,
1190 		KB_US },
1191 	{	&platid_mask_MACH_NEC_MCR_520A,
1192 		mobilepro_keytrans,
1193 		NULL,
1194 		CMDMAP(mobilepro_cmdmap),
1195 		KB_US },
1196 	{	&platid_mask_MACH_NEC_MCR_530A,
1197 		mobilepro780_keytrans,
1198 		NULL,
1199 		NULLCMDMAP,
1200 		KB_US },
1201 	{	&platid_mask_MACH_NEC_MCR_700A,
1202 		mobilepro8x0_keytrans,
1203 		NULL,
1204 		CMDMAP(mobilepro8x0_cmdmap),
1205 		KB_US },
1206 	{	&platid_mask_MACH_NEC_MCR_730A,
1207 		mobilepro8x0_keytrans,
1208 		NULL,
1209 		CMDMAP(mobilepro8x0_cmdmap),
1210 		KB_US },
1211 	{	&platid_mask_MACH_NEC_MCR_MPRO700,
1212 		mobilepro_keytrans,
1213 		NULL,
1214 		NULLCMDMAP,
1215 		KB_US },
1216 	{	&platid_mask_MACH_NEC_MCR_SIGMARION,
1217 		sigmarion_jp_keytrans,
1218 		NULL,
1219 		CMDMAP(sigmarion_cmdmap),
1220 		KB_JP },
1221 	{	&platid_mask_MACH_NEC_MCR_SIGMARION2,
1222 		sigmarion_jp_keytrans,
1223 		NULL,
1224 		CMDMAP(sigmarion_cmdmap),
1225 		KB_JP },
1226 	{	&platid_mask_MACH_NEC_MCR,
1227 		mcr_jp_keytrans,
1228 		NULL,
1229 		CMDMAP(mcr_jp_cmdmap),
1230 		KB_JP },
1231 	{	&platid_mask_MACH_IBM_WORKPAD_Z50,
1232 		z50_keytrans,
1233 		NULL,
1234 		NULLCMDMAP,
1235 		KB_US },
1236 	{	&platid_mask_MACH_SHARP_TRIPAD,
1237 		tripad_keytrans,
1238 		NULL,
1239 		CMDMAP(tripad_cmdmap),
1240 		KB_US },
1241 	{	&platid_mask_MACH_VADEM_CLIO_C,
1242 		tripad_keytrans,
1243 		NULL,
1244 		CMDMAP(tripad_cmdmap),
1245 		KB_US },
1246 	{	&platid_mask_MACH_NEC_MCCS,
1247 		mccs_keytrans,
1248 		NULL,
1249 		CMDMAP(mccs_cmdmap),
1250 		KB_JP },
1251 	{	&platid_mask_MACH_FUJITSU_INTERTOP,
1252 		intertop_keytrans,
1253 		NULL,
1254 		NULLCMDMAP,
1255 		KB_JP },
1256 	{	&platid_mask_MACH_CASIO_POCKETPOSTPET,
1257 		pocketpostpet_keytrans,
1258 		NULL,
1259 		NULLCMDMAP,
1260 		KB_JP },
1261 #endif /* hpcmips */
1262 #ifdef hpcsh
1263 	/*
1264 	 * HP Jornada 680/690
1265 	 */
1266 	/* Japanese */
1267 	{	&platid_mask_MACH_HP_JORNADA_680JP,
1268 		jornada6x0_jp_keytrans,
1269 		jornada6x0_special_keymap,
1270 		NULLCMDMAP,
1271 		KB_JP },
1272 	{	&platid_mask_MACH_HP_JORNADA_690JP,
1273 		jornada6x0_jp_keytrans,
1274 		jornada6x0_special_keymap,
1275 		NULLCMDMAP,
1276 		KB_JP },
1277 	/* US (ABA), UK (ABU) */
1278 	{	&platid_mask_MACH_HP_JORNADA_680,
1279 		jornada6x0_us_keytrans,
1280 		jornada6x0_special_keymap,
1281 		CMDMAP(jornada_us_keydesc),
1282 		KB_US },
1283 	{	&platid_mask_MACH_HP_JORNADA_690,
1284 		jornada6x0_us_keytrans,
1285 		jornada6x0_special_keymap,
1286 		CMDMAP(jornada_us_keydesc),
1287 		KB_US },
1288 	/* European English (ABB) */
1289 	{	&platid_mask_MACH_HP_JORNADA_680EU,
1290 		jornada6x0_intl_keytrans,
1291 		jornada6x0_special_keymap,
1292 		CMDMAP(jornada_intl_keydesc),
1293 		KB_US },
1294 	{	&platid_mask_MACH_HP_JORNADA_690EU,
1295 		jornada6x0_intl_keytrans,
1296 		jornada6x0_special_keymap,
1297 		CMDMAP(jornada_intl_keydesc),
1298 		KB_US },
1299 	/* German (ABD) */
1300 	{	&platid_mask_MACH_HP_JORNADA_680DE,
1301 		jornada6x0_intl_keytrans,
1302 		jornada6x0_special_keymap,
1303 		CMDMAP(jornada_de_keydesc),
1304 		KB_DE },
1305 	{	&platid_mask_MACH_HP_JORNADA_690DE,
1306 		jornada6x0_intl_keytrans,
1307 		jornada6x0_special_keymap,
1308  		CMDMAP(jornada_de_keydesc),
1309 		KB_DE },
1310 	/* French (ABF) */
1311 	{	&platid_mask_MACH_HP_JORNADA_680FR,
1312 		jornada6x0_intl_keytrans,
1313 		jornada6x0_special_keymap,
1314 		CMDMAP(jornada_fr_keydesc),
1315 		KB_FR },
1316 	{	&platid_mask_MACH_HP_JORNADA_690FR,
1317 		jornada6x0_intl_keytrans,
1318 		jornada6x0_special_keymap,
1319  		CMDMAP(jornada_fr_keydesc),
1320 		KB_FR },
1321 	/* Scandinavian */
1322 	{	&platid_mask_MACH_HP_JORNADA_680SV,
1323 		jornada6x0_intl_keytrans,
1324 		jornada6x0_special_keymap,
1325 		CMDMAP(jornada_scnv_keydesc),
1326 		KB_US },
1327 	{	&platid_mask_MACH_HP_JORNADA_690SV,
1328 		jornada6x0_intl_keytrans,
1329 		jornada6x0_special_keymap,
1330  		CMDMAP(jornada_scnv_keydesc),
1331 		KB_US },
1332 	/* Spanish (ABE) */
1333 	{	&platid_mask_MACH_HP_JORNADA_680ES,
1334 		jornada6x0_intl_keytrans,
1335 		jornada6x0_special_keymap,
1336 		CMDMAP(jornada_es_keydesc),
1337 		KB_ES },
1338 	{	&platid_mask_MACH_HP_JORNADA_690ES,
1339 		jornada6x0_intl_keytrans,
1340 		jornada6x0_special_keymap,
1341  		CMDMAP(jornada_es_keydesc),
1342 		KB_ES },
1343 	/*
1344 	 * HP 620LX
1345 	 */
1346 	/* Japanese */
1347 	{	&platid_mask_MACH_HP_LX_620JP,
1348 		hp620lx_jp_keytrans,
1349 		hp620lx_special_keymap,
1350 		NULLCMDMAP,
1351 		KB_JP },
1352 	/* Other models */
1353 	{	&platid_mask_MACH_HP_LX_620,
1354 		hp620lx_intl_keytrans,
1355 		hp620lx_special_keymap,
1356 		NULLCMDMAP,
1357 		KB_US },
1358 
1359 	/*
1360 	 * PERSONA HPW50PAD
1361 	 */
1362 	/* Japanese */
1363 	{ 	&platid_mask_MACH_HITACHI_PERSONA_HPW50PAD,
1364 		persona_hpw50pad_jp_keytrans,
1365 		persona_hpw50pad_special_keymap,
1366  		CMDMAP(persona_hpw50pad_jp_keydesc),
1367 		KB_JP },
1368 
1369 	/*
1370 	 * PERSONA HPW200EC
1371 	 */
1372 	/* US */
1373 	{ 	&platid_mask_MACH_HITACHI_PERSONA_HPW200EC,
1374 		persona_hpw200ec_keytrans,
1375 		persona_hpw200ec_special_keymap,
1376 		NULLCMDMAP,
1377 		KB_US },
1378 
1379 #endif /* hpcsh */
1380 #ifdef hpcarm
1381 	/*
1382 	 * HP Jornada 710/720/728
1383 	 */
1384 	/* US (ABA), UK (ABU) */
1385 	{	&platid_mask_MACH_HP_JORNADA_720,
1386 		jornada7xx_us_keytrans,
1387 		jornada7xx_special_keymap,
1388 		CMDMAP(jornada_us_keydesc),
1389 		KB_US },
1390 	/* Japanese */
1391 	{	&platid_mask_MACH_HP_JORNADA_720JP,
1392 		jornada7xx_jp_keytrans,
1393 		jornada7xx_special_keymap,
1394 		NULLCMDMAP,
1395 		KB_JP },
1396 	/* European English (ABB) */
1397 	{	&platid_mask_MACH_HP_JORNADA_720EU,
1398 		jornada7xx_intl_keytrans,
1399 		jornada7xx_special_keymap,
1400 		CMDMAP(jornada_intl_keydesc),
1401 		KB_US },
1402 	/* German (ABD) */
1403 	{	&platid_mask_MACH_HP_JORNADA_720DE,
1404 		jornada7xx_intl_keytrans,
1405 		jornada7xx_special_keymap,
1406 		CMDMAP(jornada_de_keydesc),
1407 		KB_DE },
1408 	/* French (ABF) */
1409 	{	&platid_mask_MACH_HP_JORNADA_720FR,
1410 		jornada7xx_intl_keytrans,
1411 		jornada7xx_special_keymap,
1412 		CMDMAP(jornada_fr_keydesc),
1413 		KB_FR },
1414 	/* Scandinavian */
1415 	{	&platid_mask_MACH_HP_JORNADA_720SV,
1416 		jornada7xx_intl_keytrans,
1417 		jornada7xx_special_keymap,
1418 		CMDMAP(jornada_scnv_keydesc),
1419 		KB_US },
1420 	/* Spanish (ABE) */
1421 	{	&platid_mask_MACH_HP_JORNADA_720ES,
1422 		jornada7xx_intl_keytrans,
1423 		jornada7xx_special_keymap,
1424 		CMDMAP(jornada_es_keydesc),
1425 		KB_ES },
1426 	/*
1427 	 * Sharp W-ZERO3
1428 	 */
1429 	/* WS003SH */
1430 	{	&platid_mask_MACH_SHARP_WZERO3_WS003SH,
1431 		ws003sh_jp_keytrans,
1432 		ws003sh_special_keymap,
1433 		CMDMAP(ws003sh_jp_keydesc),
1434 		KB_JP },
1435 	/* WS004SH */
1436 	{	&platid_mask_MACH_SHARP_WZERO3_WS004SH,
1437 		ws003sh_jp_keytrans,
1438 		ws003sh_special_keymap,
1439 		CMDMAP(ws003sh_jp_keydesc),
1440 		KB_JP },
1441 	/* WS007SH */
1442 	{	&platid_mask_MACH_SHARP_WZERO3_WS007SH,
1443 		ws003sh_jp_keytrans,
1444 		ws003sh_special_keymap,
1445 		CMDMAP(ws003sh_jp_keydesc),
1446 		KB_JP },
1447 	/* WS011SH */
1448 	{	&platid_mask_MACH_SHARP_WZERO3_WS011SH,
1449 		ws011sh_jp_keytrans,
1450 		ws011sh_special_keymap,
1451 		CMDMAP(ws011sh_jp_keydesc),
1452 		KB_JP },
1453 	/* WS020SH */
1454 	{	&platid_mask_MACH_SHARP_WZERO3_WS020SH,
1455 		ws011sh_jp_keytrans,
1456 		ws011sh_special_keymap,
1457 		CMDMAP(ws011sh_jp_keydesc),
1458 		KB_JP },
1459 #endif /* hpcarm */
1460 
1461 	{ .ht_platform = NULL } /* end mark */
1462 };
1463