xref: /freebsd/sys/dev/gpio/gpiokeys_codes.c (revision fdafd315ad0d0f28a11b9fb4476a9ab059c62b92)
15a333f6fSOleksandr Tymoshenko /*-
25a333f6fSOleksandr Tymoshenko  * Copyright (c) 2015 Oleksandr Tymoshenko <gonzo@freebsd.org>
35a333f6fSOleksandr Tymoshenko  * All rights reserved.
45a333f6fSOleksandr Tymoshenko  *
55a333f6fSOleksandr Tymoshenko  * Redistribution and use in source and binary forms, with or without
65a333f6fSOleksandr Tymoshenko  * modification, are permitted provided that the following conditions
75a333f6fSOleksandr Tymoshenko  * are met:
85a333f6fSOleksandr Tymoshenko  * 1. Redistributions of source code must retain the above copyright
95a333f6fSOleksandr Tymoshenko  *    notice, this list of conditions and the following disclaimer.
105a333f6fSOleksandr Tymoshenko  * 2. Redistributions in binary form must reproduce the above copyright
115a333f6fSOleksandr Tymoshenko  *    notice, this list of conditions and the following disclaimer in the
125a333f6fSOleksandr Tymoshenko  *    documentation and/or other materials provided with the distribution.
135a333f6fSOleksandr Tymoshenko  *
145a333f6fSOleksandr Tymoshenko  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
155a333f6fSOleksandr Tymoshenko  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
165a333f6fSOleksandr Tymoshenko  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
175a333f6fSOleksandr Tymoshenko  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
185a333f6fSOleksandr Tymoshenko  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
195a333f6fSOleksandr Tymoshenko  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
205a333f6fSOleksandr Tymoshenko  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
215a333f6fSOleksandr Tymoshenko  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
225a333f6fSOleksandr Tymoshenko  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
235a333f6fSOleksandr Tymoshenko  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
245a333f6fSOleksandr Tymoshenko  * SUCH DAMAGE.
255a333f6fSOleksandr Tymoshenko  */
265a333f6fSOleksandr Tymoshenko 
275a333f6fSOleksandr Tymoshenko #include <sys/param.h>
285a333f6fSOleksandr Tymoshenko #include <sys/systm.h>
295a333f6fSOleksandr Tymoshenko 
305a333f6fSOleksandr Tymoshenko #include <dev/gpio/gpiokeys.h>
31*955b980bSEmmanuel Vadot #include <contrib/device-tree/include/dt-bindings/input/linux-event-codes.h>
325a333f6fSOleksandr Tymoshenko 
335a333f6fSOleksandr Tymoshenko struct gpiokeys_codemap_entry {
345a333f6fSOleksandr Tymoshenko 	uint32_t	linux_code;
355a333f6fSOleksandr Tymoshenko 	uint32_t	bsd_code;
365a333f6fSOleksandr Tymoshenko };
375a333f6fSOleksandr Tymoshenko 
385a333f6fSOleksandr Tymoshenko static struct gpiokeys_codemap_entry gpiokeys_codes_map[] = {
395a333f6fSOleksandr Tymoshenko 	{ KEY_ESC,		1},
405a333f6fSOleksandr Tymoshenko 	{ KEY_1,		2},
415a333f6fSOleksandr Tymoshenko 	{ KEY_2,		3},
425a333f6fSOleksandr Tymoshenko 	{ KEY_3,		4},
435a333f6fSOleksandr Tymoshenko 	{ KEY_4,		5},
445a333f6fSOleksandr Tymoshenko 	{ KEY_5,		6},
455a333f6fSOleksandr Tymoshenko 	{ KEY_6,		7},
465a333f6fSOleksandr Tymoshenko 	{ KEY_7,		8},
475a333f6fSOleksandr Tymoshenko 	{ KEY_8,		9},
485a333f6fSOleksandr Tymoshenko 	{ KEY_9,		10},
495a333f6fSOleksandr Tymoshenko 	{ KEY_0,		11},
505a333f6fSOleksandr Tymoshenko 	{ KEY_MINUS,		12},
515a333f6fSOleksandr Tymoshenko 	{ KEY_EQUAL,		13},
525a333f6fSOleksandr Tymoshenko 	{ KEY_BACKSPACE,	14},
535a333f6fSOleksandr Tymoshenko 
545a333f6fSOleksandr Tymoshenko 	{ KEY_TAB,		15},
555a333f6fSOleksandr Tymoshenko 	{ KEY_Q,		16},
565a333f6fSOleksandr Tymoshenko 	{ KEY_W,		17},
575a333f6fSOleksandr Tymoshenko 	{ KEY_E,		18},
585a333f6fSOleksandr Tymoshenko 	{ KEY_R,		19},
595a333f6fSOleksandr Tymoshenko 	{ KEY_T,		20},
605a333f6fSOleksandr Tymoshenko 	{ KEY_Y,		21},
615a333f6fSOleksandr Tymoshenko 	{ KEY_U,		22},
625a333f6fSOleksandr Tymoshenko 	{ KEY_I,		23},
635a333f6fSOleksandr Tymoshenko 	{ KEY_O,		24},
645a333f6fSOleksandr Tymoshenko 	{ KEY_P,		25},
655a333f6fSOleksandr Tymoshenko 	{ KEY_LEFTBRACE,	26},
665a333f6fSOleksandr Tymoshenko 	{ KEY_RIGHTBRACE,	27},
675a333f6fSOleksandr Tymoshenko 
685a333f6fSOleksandr Tymoshenko 	{ KEY_ENTER,		28},
695a333f6fSOleksandr Tymoshenko 	{ KEY_LEFTCTRL,		29},
705a333f6fSOleksandr Tymoshenko 	{ KEY_A,		30},
715a333f6fSOleksandr Tymoshenko 	{ KEY_S,		31},
725a333f6fSOleksandr Tymoshenko 	{ KEY_D,		32},
735a333f6fSOleksandr Tymoshenko 	{ KEY_F,		33},
745a333f6fSOleksandr Tymoshenko 	{ KEY_G,		34},
755a333f6fSOleksandr Tymoshenko 	{ KEY_H,		35},
765a333f6fSOleksandr Tymoshenko 	{ KEY_J,		36},
775a333f6fSOleksandr Tymoshenko 	{ KEY_K,		37},
785a333f6fSOleksandr Tymoshenko 	{ KEY_L,		38},
795a333f6fSOleksandr Tymoshenko 	{ KEY_SEMICOLON,	39},
805a333f6fSOleksandr Tymoshenko 	{ KEY_APOSTROPHE,	40},
815a333f6fSOleksandr Tymoshenko 	{ KEY_GRAVE,		41},
825a333f6fSOleksandr Tymoshenko 
835a333f6fSOleksandr Tymoshenko 	{ KEY_LEFTSHIFT,	42},
845a333f6fSOleksandr Tymoshenko 	{ KEY_BACKSLASH,	43},
855a333f6fSOleksandr Tymoshenko 	{ KEY_Z,		44},
865a333f6fSOleksandr Tymoshenko 	{ KEY_X,		45},
875a333f6fSOleksandr Tymoshenko 	{ KEY_C,		46},
885a333f6fSOleksandr Tymoshenko 	{ KEY_V,		47},
895a333f6fSOleksandr Tymoshenko 	{ KEY_B,		48},
905a333f6fSOleksandr Tymoshenko 	{ KEY_N,		49},
915a333f6fSOleksandr Tymoshenko 	{ KEY_M,		50},
925a333f6fSOleksandr Tymoshenko 	{ KEY_COMMA,		51},
935a333f6fSOleksandr Tymoshenko 	{ KEY_DOT,		52},
945a333f6fSOleksandr Tymoshenko 	{ KEY_SLASH,		53},
955a333f6fSOleksandr Tymoshenko 	{ KEY_RIGHTSHIFT,	54},
965a333f6fSOleksandr Tymoshenko 
975a333f6fSOleksandr Tymoshenko 	{ KEY_LEFTALT,		56},
985a333f6fSOleksandr Tymoshenko 	{ KEY_SPACE,		57},
995a333f6fSOleksandr Tymoshenko 	{ KEY_CAPSLOCK,		58},
1005a333f6fSOleksandr Tymoshenko 
1015a333f6fSOleksandr Tymoshenko 	{ KEY_F1,		59},
1025a333f6fSOleksandr Tymoshenko 	{ KEY_F2,		60},
1035a333f6fSOleksandr Tymoshenko 	{ KEY_F3,		61},
1045a333f6fSOleksandr Tymoshenko 	{ KEY_F4,		62},
1055a333f6fSOleksandr Tymoshenko 	{ KEY_F5,		63},
1065a333f6fSOleksandr Tymoshenko 	{ KEY_F6,		64},
1075a333f6fSOleksandr Tymoshenko 	{ KEY_F7,		65},
1085a333f6fSOleksandr Tymoshenko 	{ KEY_F8,		66},
1095a333f6fSOleksandr Tymoshenko 	{ KEY_F9,		67},
1105a333f6fSOleksandr Tymoshenko 	{ KEY_F10,		68},
1115a333f6fSOleksandr Tymoshenko 	{ KEY_F11,		87},
1125a333f6fSOleksandr Tymoshenko 	{ KEY_F12,		88},
1135a333f6fSOleksandr Tymoshenko 
1145a333f6fSOleksandr Tymoshenko 	{ KEY_RIGHTCTRL,	90},
1155a333f6fSOleksandr Tymoshenko 	{ KEY_SYSRQ,		92},
1165a333f6fSOleksandr Tymoshenko 	{ KEY_RIGHTALT,		93},
1175a333f6fSOleksandr Tymoshenko 
1185a333f6fSOleksandr Tymoshenko 	{ KEY_HOME,		GPIOKEY_E0(71)},
1195a333f6fSOleksandr Tymoshenko 	{ KEY_UP,		GPIOKEY_E0(72)},
1205a333f6fSOleksandr Tymoshenko 	{ KEY_PAGEUP,		GPIOKEY_E0(73)},
1215a333f6fSOleksandr Tymoshenko 	{ KEY_LEFT,		GPIOKEY_E0(75)},
1225a333f6fSOleksandr Tymoshenko 	{ KEY_RIGHT,		GPIOKEY_E0(77)},
1235a333f6fSOleksandr Tymoshenko 	{ KEY_END,		GPIOKEY_E0(79)},
1245a333f6fSOleksandr Tymoshenko 	{ KEY_DOWN,		GPIOKEY_E0(80)},
1255a333f6fSOleksandr Tymoshenko 	{ KEY_PAGEDOWN,		GPIOKEY_E0(81)},
1265a333f6fSOleksandr Tymoshenko 	{ KEY_INSERT,		GPIOKEY_E0(82)},
1275a333f6fSOleksandr Tymoshenko 	{ KEY_DELETE,		GPIOKEY_E0(83)},
1285a333f6fSOleksandr Tymoshenko 
1295a333f6fSOleksandr Tymoshenko 	{ GPIOKEY_NONE,	GPIOKEY_NONE}
1305a333f6fSOleksandr Tymoshenko };
1315a333f6fSOleksandr Tymoshenko 
1325a333f6fSOleksandr Tymoshenko uint32_t
gpiokey_map_linux_code(uint32_t linux_code)1335a333f6fSOleksandr Tymoshenko gpiokey_map_linux_code(uint32_t linux_code)
1345a333f6fSOleksandr Tymoshenko {
1355a333f6fSOleksandr Tymoshenko 	int i;
1365a333f6fSOleksandr Tymoshenko 
1375a333f6fSOleksandr Tymoshenko 	for (i = 0; gpiokeys_codes_map[i].linux_code != GPIOKEY_NONE; i++) {
1385a333f6fSOleksandr Tymoshenko 		if (gpiokeys_codes_map[i].linux_code == linux_code)
1395a333f6fSOleksandr Tymoshenko 			return (gpiokeys_codes_map[i].bsd_code);
1405a333f6fSOleksandr Tymoshenko 	}
1415a333f6fSOleksandr Tymoshenko 
1425a333f6fSOleksandr Tymoshenko 	return (GPIOKEY_NONE);
1435a333f6fSOleksandr Tymoshenko }
144