Home | History | Annotate | Line # | Download | only in hpc
hpckbdkeymap.h revision 1.49
      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 (at) 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