xref: /openbmc/u-boot/include/i8042.h (revision fea7f3aa)
1 /*
2  * (C) Copyright 2002 ELTEC Elektronik AG
3  * Frank Gottschling <fgottschling@eltec.de>
4  *
5  * SPDX-License-Identifier:	GPL-2.0+
6  */
7 
8 /* i8042.h - Intel 8042 keyboard driver header */
9 
10 #ifndef _I8042_H_
11 #define _I8042_H_
12 
13 /* defines */
14 
15 #define I8042_DATA_REG	0x60	/* keyboard i/o buffer */
16 #define I8042_STS_REG	0x64	/* keyboard status read */
17 #define I8042_CMD_REG	0x64	/* keyboard ctrl write */
18 
19 /* Status register bit defines */
20 #define STATUS_OBF	(1 << 0)
21 #define STATUS_IBF	(1 << 1)
22 
23 /* Configuration byte bit defines */
24 #define CONFIG_KIRQ_EN	(1 << 0)
25 #define CONFIG_MIRQ_EN	(1 << 1)
26 #define CONFIG_SET_BIST	(1 << 2)
27 #define CONFIG_KCLK_DIS	(1 << 4)
28 #define CONFIG_MCLK_DIS	(1 << 5)
29 #define CONFIG_AT_TRANS	(1 << 6)
30 
31 /* i8042 commands */
32 #define CMD_RD_CONFIG	0x20	/* read configuration byte */
33 #define CMD_WR_CONFIG	0x60	/* write configuration byte */
34 #define CMD_SELF_TEST	0xaa	/* controller self-test */
35 #define CMD_KBD_DIS	0xad	/* keyboard disable */
36 #define CMD_KBD_EN	0xae	/* keyboard enable */
37 #define CMD_SET_KBD_LED	0xed	/* set keyboard led */
38 #define CMD_RESET_KBD	0xff	/* reset keyboard */
39 
40 /* i8042 command result */
41 #define KBC_TEST_OK	0x55
42 #define KBD_ACK		0xfa
43 #define KBD_POR		0xaa
44 
45 /* keyboard scan codes */
46 
47 #define KBD_US		0	/* default US layout */
48 #define KBD_GER		1	/* german layout */
49 
50 #define KBD_TIMEOUT	1000	/* 1 sec */
51 #define KBD_RESET_TRIES	3
52 
53 #define AS		0	/* normal character index */
54 #define SH		1	/* shift index */
55 #define CN		2	/* control index */
56 #define NM		3	/* numeric lock index */
57 #define AK		4	/* right alt key */
58 #define CP		5	/* capslock index */
59 #define ST		6	/* stop output index */
60 #define EX		7	/* extended code index */
61 #define ES		8	/* escape and extended code index */
62 
63 #define NORMAL		0x0000	/* normal key */
64 #define STP		0x0001	/* scroll lock stop output*/
65 #define NUM		0x0002	/* numeric lock */
66 #define CAPS		0x0004	/* capslock */
67 #define SHIFT		0x0008	/* shift */
68 #define CTRL		0x0010	/* control*/
69 #define EXT		0x0020	/* extended scan code 0xe0 */
70 #define ESC		0x0040	/* escape key press */
71 #define E1		0x0080	/* extended scan code 0xe1 */
72 #define BRK		0x0100	/* make break flag for keyboard */
73 #define ALT		0x0200	/* right alt */
74 
75 /* exports */
76 
77 /**
78  * Flush all buffer from keyboard controller to host.
79  */
80 void i8042_flush(void);
81 
82 /**
83  * Disables the keyboard so that key strokes no longer generate scancodes to
84  * the host.
85  *
86  * @return 0 if ok, -1 if keyboard input was found while disabling
87  */
88 int i8042_disable(void);
89 
90 struct stdio_dev;
91 
92 int i8042_kbd_init(void);
93 int i8042_tstc(struct stdio_dev *dev);
94 int i8042_getc(struct stdio_dev *dev);
95 
96 #endif /* _I8042_H_ */
97