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