/* SPDX-License-Identifier: GPL-2.0 */
/*
 * This header provides the constants of the standard Chrome OS key matrix
 * for cros-ec keyboard-controller bindings.
 *
 * Copyright (c) 2021 Google, Inc
 */

#ifndef _CROS_EC_KEYBOARD_H
#define _CROS_EC_KEYBOARD_H

#define CROS_STD_TOP_ROW_KEYMAP	\
	MATRIX_KEY(0x00, 0x02, KEY_F1)	\
	MATRIX_KEY(0x03, 0x02, KEY_F2)	\
	MATRIX_KEY(0x02, 0x02, KEY_F3)	\
	MATRIX_KEY(0x01, 0x02, KEY_F4)	\
	MATRIX_KEY(0x03, 0x04, KEY_F5)	\
	MATRIX_KEY(0x02, 0x04, KEY_F6)	\
	MATRIX_KEY(0x01, 0x04, KEY_F7)	\
	MATRIX_KEY(0x02, 0x09, KEY_F8)	\
	MATRIX_KEY(0x01, 0x09, KEY_F9)	\
	MATRIX_KEY(0x00, 0x04, KEY_F10)

#define CROS_STD_MAIN_KEYMAP	\
	MATRIX_KEY(0x00, 0x01, KEY_LEFTMETA)	\
	MATRIX_KEY(0x00, 0x03, KEY_B)		\
	MATRIX_KEY(0x00, 0x05, KEY_RO)		\
	MATRIX_KEY(0x00, 0x06, KEY_N)		\
	MATRIX_KEY(0x00, 0x08, KEY_EQUAL)	\
	MATRIX_KEY(0x00, 0x0a, KEY_RIGHTALT)	\
	MATRIX_KEY(0x01, 0x01, KEY_ESC)		\
	MATRIX_KEY(0x01, 0x03, KEY_G)		\
	MATRIX_KEY(0x01, 0x06, KEY_H)		\
	MATRIX_KEY(0x01, 0x08, KEY_APOSTROPHE)	\
	MATRIX_KEY(0x01, 0x0b, KEY_BACKSPACE)	\
	MATRIX_KEY(0x01, 0x0c, KEY_HENKAN)	\
						\
	MATRIX_KEY(0x02, 0x00, KEY_LEFTCTRL)	\
	MATRIX_KEY(0x02, 0x01, KEY_TAB)		\
	MATRIX_KEY(0x02, 0x03, KEY_T)		\
	MATRIX_KEY(0x02, 0x05, KEY_RIGHTBRACE)	\
	MATRIX_KEY(0x02, 0x06, KEY_Y)		\
	MATRIX_KEY(0x02, 0x07, KEY_102ND)	\
	MATRIX_KEY(0x02, 0x08, KEY_LEFTBRACE)	\
	MATRIX_KEY(0x02, 0x0a, KEY_YEN)		\
						\
	MATRIX_KEY(0x03, 0x00, KEY_LEFTMETA)	\
	MATRIX_KEY(0x03, 0x01, KEY_GRAVE)	\
	MATRIX_KEY(0x03, 0x03, KEY_5)		\
	MATRIX_KEY(0x03, 0x06, KEY_6)		\
	MATRIX_KEY(0x03, 0x08, KEY_MINUS)	\
	MATRIX_KEY(0x03, 0x09, KEY_SLEEP)	\
	MATRIX_KEY(0x03, 0x0b, KEY_BACKSLASH)	\
	MATRIX_KEY(0x03, 0x0c, KEY_MUHENKAN)	\
						\
	MATRIX_KEY(0x04, 0x00, KEY_RIGHTCTRL)	\
	MATRIX_KEY(0x04, 0x01, KEY_A)		\
	MATRIX_KEY(0x04, 0x02, KEY_D)		\
	MATRIX_KEY(0x04, 0x03, KEY_F)		\
	MATRIX_KEY(0x04, 0x04, KEY_S)		\
	MATRIX_KEY(0x04, 0x05, KEY_K)		\
	MATRIX_KEY(0x04, 0x06, KEY_J)		\
	MATRIX_KEY(0x04, 0x08, KEY_SEMICOLON)	\
	MATRIX_KEY(0x04, 0x09, KEY_L)		\
	MATRIX_KEY(0x04, 0x0a, KEY_BACKSLASH)	\
	MATRIX_KEY(0x04, 0x0b, KEY_ENTER)	\
						\
	MATRIX_KEY(0x05, 0x01, KEY_Z)		\
	MATRIX_KEY(0x05, 0x02, KEY_C)		\
	MATRIX_KEY(0x05, 0x03, KEY_V)		\
	MATRIX_KEY(0x05, 0x04, KEY_X)		\
	MATRIX_KEY(0x05, 0x05, KEY_COMMA)	\
	MATRIX_KEY(0x05, 0x06, KEY_M)		\
	MATRIX_KEY(0x05, 0x07, KEY_LEFTSHIFT)	\
	MATRIX_KEY(0x05, 0x08, KEY_SLASH)	\
	MATRIX_KEY(0x05, 0x09, KEY_DOT)		\
	MATRIX_KEY(0x05, 0x0b, KEY_SPACE)	\
						\
	MATRIX_KEY(0x06, 0x01, KEY_1)		\
	MATRIX_KEY(0x06, 0x02, KEY_3)		\
	MATRIX_KEY(0x06, 0x03, KEY_4)		\
	MATRIX_KEY(0x06, 0x04, KEY_2)		\
	MATRIX_KEY(0x06, 0x05, KEY_8)		\
	MATRIX_KEY(0x06, 0x06, KEY_7)		\
	MATRIX_KEY(0x06, 0x08, KEY_0)		\
	MATRIX_KEY(0x06, 0x09, KEY_9)		\
	MATRIX_KEY(0x06, 0x0a, KEY_LEFTALT)	\
	MATRIX_KEY(0x06, 0x0b, KEY_DOWN)	\
	MATRIX_KEY(0x06, 0x0c, KEY_RIGHT)	\
						\
	MATRIX_KEY(0x07, 0x01, KEY_Q)		\
	MATRIX_KEY(0x07, 0x02, KEY_E)		\
	MATRIX_KEY(0x07, 0x03, KEY_R)		\
	MATRIX_KEY(0x07, 0x04, KEY_W)		\
	MATRIX_KEY(0x07, 0x05, KEY_I)		\
	MATRIX_KEY(0x07, 0x06, KEY_U)		\
	MATRIX_KEY(0x07, 0x07, KEY_RIGHTSHIFT)	\
	MATRIX_KEY(0x07, 0x08, KEY_P)		\
	MATRIX_KEY(0x07, 0x09, KEY_O)		\
	MATRIX_KEY(0x07, 0x0b, KEY_UP)		\
	MATRIX_KEY(0x07, 0x0c, KEY_LEFT)

/* No numpad */
#define CROS_TOP_ROW_KEYMAP_V30 \
	MATRIX_KEY(0x00, 0x01, KEY_F11)		/* T11 */	\
	MATRIX_KEY(0x00, 0x02, KEY_F1)		/* T1 */	\
	MATRIX_KEY(0x00, 0x04, KEY_F10)		/* T10 */	\
	MATRIX_KEY(0x00, 0x0b, KEY_F14)		/* T14 */	\
	MATRIX_KEY(0x00, 0x0c, KEY_F15)		/* T15 */	\
	MATRIX_KEY(0x01, 0x02, KEY_F4)		/* T4 */	\
	MATRIX_KEY(0x01, 0x04, KEY_F7)		/* T7 */	\
	MATRIX_KEY(0x01, 0x05, KEY_F12)		/* T12 */	\
	MATRIX_KEY(0x01, 0x09, KEY_F9)		/* T9 */	\
	MATRIX_KEY(0x02, 0x02, KEY_F3)		/* T3 */	\
	MATRIX_KEY(0x02, 0x04, KEY_F6)		/* T6 */	\
	MATRIX_KEY(0x02, 0x0b, KEY_F8)		/* T8 */	\
	MATRIX_KEY(0x03, 0x02, KEY_F2)		/* T2 */	\
	MATRIX_KEY(0x03, 0x05, KEY_F13)		/* T13 */	\
	MATRIX_KEY(0x04, 0x04, KEY_F5)		/* T5 */

#define CROS_MAIN_KEYMAP_V30			/* Keycode */	\
	MATRIX_KEY(0x00, 0x03, KEY_B)		/* 50 */	\
	MATRIX_KEY(0x00, 0x05, KEY_N)		/* 51 */	\
	MATRIX_KEY(0x00, 0x06, KEY_RO)		/* 56 (JIS) */	\
	MATRIX_KEY(0x00, 0x08, KEY_EQUAL)	/* 13 */	\
	MATRIX_KEY(0x00, 0x09, KEY_HOME)	/* 80 (Numpad) */	\
	MATRIX_KEY(0x00, 0x0a, KEY_RIGHTALT)	/* 62 */	\
	MATRIX_KEY(0x00, 0x10, KEY_FN)		/* 127 */	\
								\
	MATRIX_KEY(0x01, 0x01, KEY_ESC)		/* 110 */	\
	MATRIX_KEY(0x01, 0x03, KEY_G)		/* 35 */	\
	MATRIX_KEY(0x01, 0x06, KEY_H)		/* 36 */	\
	MATRIX_KEY(0x01, 0x08, KEY_APOSTROPHE)	/* 41 */	\
	MATRIX_KEY(0x01, 0x0b, KEY_BACKSPACE)	/* 15 */	\
	MATRIX_KEY(0x01, 0x0c, KEY_HENKAN)	/* 65 (JIS) */	\
	MATRIX_KEY(0x01, 0x0e, KEY_LEFTCTRL)	/* 58 */	\
								\
	MATRIX_KEY(0x02, 0x01, KEY_TAB)		/* 16 */	\
	MATRIX_KEY(0x02, 0x03, KEY_T)		/* 21 */	\
	MATRIX_KEY(0x02, 0x05, KEY_RIGHTBRACE)	/* 28 */	\
	MATRIX_KEY(0x02, 0x06, KEY_Y)		/* 22 */	\
	MATRIX_KEY(0x02, 0x08, KEY_LEFTBRACE)	/* 27 */	\
	MATRIX_KEY(0x02, 0x09, KEY_DELETE)	/* 76 (Numpad) */	\
	MATRIX_KEY(0x02, 0x0c, KEY_PAGEUP)	/* 85 (Numpad) */	\
	MATRIX_KEY(0x02, 0x011, KEY_YEN)	/* 14 (JIS) */	\
								\
	MATRIX_KEY(0x03, 0x00, KEY_LEFTMETA)	/* Launcher */	\
	MATRIX_KEY(0x03, 0x01, KEY_GRAVE)	/* 1 */	\
	MATRIX_KEY(0x03, 0x03, KEY_5)		/* 6 */	\
	MATRIX_KEY(0x03, 0x04, KEY_S)		/* 32 */	\
	MATRIX_KEY(0x03, 0x06, KEY_MINUS)	/* 12 */	\
	MATRIX_KEY(0x03, 0x08, KEY_6)		/* 7 */		\
	MATRIX_KEY(0x03, 0x09, KEY_SLEEP)	/* Lock */	\
	MATRIX_KEY(0x03, 0x0b, KEY_BACKSLASH)	/* 29 */	\
	MATRIX_KEY(0x03, 0x0c, KEY_MUHENKAN)	/* 63 (JIS) */	\
	MATRIX_KEY(0x03, 0x0e, KEY_RIGHTCTRL)	/* 64 */	\
								\
	MATRIX_KEY(0x04, 0x01, KEY_A)		/* 31 */	\
	MATRIX_KEY(0x04, 0x02, KEY_D)		/* 33 */	\
	MATRIX_KEY(0x04, 0x03, KEY_F)		/* 34 */	\
	MATRIX_KEY(0x04, 0x05, KEY_K)		/* 38 */	\
	MATRIX_KEY(0x04, 0x06, KEY_J)		/* 37 */	\
	MATRIX_KEY(0x04, 0x08, KEY_SEMICOLON)	/* 40 */	\
	MATRIX_KEY(0x04, 0x09, KEY_L)		/* 39 */	\
	MATRIX_KEY(0x04, 0x0b, KEY_ENTER)	/* 43 */	\
	MATRIX_KEY(0x04, 0x0c, KEY_END)		/* 81 (Numpad) */	\
								\
	MATRIX_KEY(0x05, 0x01, KEY_1)		/* 2 */	\
	MATRIX_KEY(0x05, 0x02, KEY_COMMA)	/* 53 */	\
	MATRIX_KEY(0x05, 0x03, KEY_DOT)		/* 54 */	\
	MATRIX_KEY(0x05, 0x04, KEY_SLASH)	/* 55 */	\
	MATRIX_KEY(0x05, 0x05, KEY_C)		/* 48 */	\
	MATRIX_KEY(0x05, 0x06, KEY_SPACE)	/* 61 */	\
	MATRIX_KEY(0x05, 0x07, KEY_LEFTSHIFT)	/* 44 */	\
	MATRIX_KEY(0x05, 0x08, KEY_X)		/* 47 */	\
	MATRIX_KEY(0x05, 0x09, KEY_V)		/* 49 */	\
	MATRIX_KEY(0x05, 0x0b, KEY_M)		/* 52 */	\
	MATRIX_KEY(0x05, 0x0c, KEY_PAGEDOWN)	/* 86 (Numpad) */	\
								\
	MATRIX_KEY(0x06, 0x01, KEY_Z)		/* 46 */	\
	MATRIX_KEY(0x06, 0x02, KEY_3)		/* 4 */		\
	MATRIX_KEY(0x06, 0x03, KEY_4)		/* 5 */		\
	MATRIX_KEY(0x06, 0x04, KEY_2)		/* 3 */		\
	MATRIX_KEY(0x06, 0x05, KEY_8)		/* 9 */		\
	MATRIX_KEY(0x06, 0x06, KEY_0)		/* 11 */	\
	MATRIX_KEY(0x06, 0x08, KEY_7)		/* 8 */		\
	MATRIX_KEY(0x06, 0x09, KEY_9)		/* 10 */	\
	MATRIX_KEY(0x06, 0x0b, KEY_DOWN)	/* 84 */	\
	MATRIX_KEY(0x06, 0x0c, KEY_RIGHT)	/* 89 */	\
	MATRIX_KEY(0x06, 0x0d, KEY_LEFTALT)	/* 60 */	\
	MATRIX_KEY(0x06, 0x0f, KEY_ASSISTANT)	/* 128 */	\
	MATRIX_KEY(0x06, 0x11, KEY_BACKSLASH)	/* 42 (JIS, ISO) */	\
								\
	MATRIX_KEY(0x07, 0x01, KEY_U)		/* 23 */	\
	MATRIX_KEY(0x07, 0x02, KEY_I)		/* 24 */	\
	MATRIX_KEY(0x07, 0x03, KEY_O)		/* 25 */	\
	MATRIX_KEY(0x07, 0x04, KEY_P)		/* 26 */	\
	MATRIX_KEY(0x07, 0x05, KEY_Q)		/* 17 */	\
	MATRIX_KEY(0x07, 0x06, KEY_W)		/* 18 */	\
	MATRIX_KEY(0x07, 0x07, KEY_RIGHTSHIFT)	/* 57 */	\
	MATRIX_KEY(0x07, 0x08, KEY_E)		/* 19 */	\
	MATRIX_KEY(0x07, 0x09, KEY_R)		/* 20 */	\
	MATRIX_KEY(0x07, 0x0b, KEY_UP)		/* 83 */	\
	MATRIX_KEY(0x07, 0x0c, KEY_LEFT)	/* 79 */	\
	MATRIX_KEY(0x07, 0x11, KEY_102ND)	/* 45 (ISO) */

#endif /* _CROS_EC_KEYBOARD_H */
