Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
553a05b8 MN |
2 | #ifndef _LINUX_I8042_H |
3 | #define _LINUX_I8042_H | |
4 | ||
553a05b8 | 5 | |
7b9c13dd | 6 | #include <linux/errno.h> |
181d683d | 7 | #include <linux/types.h> |
553a05b8 MN |
8 | |
9 | /* | |
10 | * Standard commands. | |
11 | */ | |
12 | ||
13 | #define I8042_CMD_CTL_RCTR 0x0120 | |
14 | #define I8042_CMD_CTL_WCTR 0x1060 | |
15 | #define I8042_CMD_CTL_TEST 0x01aa | |
16 | ||
17 | #define I8042_CMD_KBD_DISABLE 0x00ad | |
18 | #define I8042_CMD_KBD_ENABLE 0x00ae | |
19 | #define I8042_CMD_KBD_TEST 0x01ab | |
20 | #define I8042_CMD_KBD_LOOP 0x11d2 | |
21 | ||
22 | #define I8042_CMD_AUX_DISABLE 0x00a7 | |
23 | #define I8042_CMD_AUX_ENABLE 0x00a8 | |
24 | #define I8042_CMD_AUX_TEST 0x01a9 | |
25 | #define I8042_CMD_AUX_SEND 0x10d4 | |
26 | #define I8042_CMD_AUX_LOOP 0x11d3 | |
27 | ||
28 | #define I8042_CMD_MUX_PFX 0x0090 | |
29 | #define I8042_CMD_MUX_SEND 0x1090 | |
30 | ||
1ea4c161 AM |
31 | /* |
32 | * Status register bits. | |
33 | */ | |
34 | ||
35 | #define I8042_STR_PARITY 0x80 | |
36 | #define I8042_STR_TIMEOUT 0x40 | |
37 | #define I8042_STR_AUXDATA 0x20 | |
38 | #define I8042_STR_KEYLOCK 0x10 | |
39 | #define I8042_STR_CMDDAT 0x08 | |
40 | #define I8042_STR_MUXERR 0x04 | |
41 | #define I8042_STR_IBF 0x02 | |
42 | #define I8042_STR_OBF 0x01 | |
43 | ||
44 | /* | |
45 | * Control register bits. | |
46 | */ | |
47 | ||
48 | #define I8042_CTR_KBDINT 0x01 | |
49 | #define I8042_CTR_AUXINT 0x02 | |
50 | #define I8042_CTR_IGNKEYLOCK 0x08 | |
51 | #define I8042_CTR_KBDDIS 0x10 | |
52 | #define I8042_CTR_AUXDIS 0x20 | |
53 | #define I8042_CTR_XLATE 0x40 | |
54 | ||
181d683d DT |
55 | struct serio; |
56 | ||
57 | #if defined(CONFIG_SERIO_I8042) || defined(CONFIG_SERIO_I8042_MODULE) | |
58 | ||
59 | void i8042_lock_chip(void); | |
60 | void i8042_unlock_chip(void); | |
553a05b8 | 61 | int i8042_command(unsigned char *param, int command); |
967c9ef9 MG |
62 | int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str, |
63 | struct serio *serio)); | |
64 | int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str, | |
65 | struct serio *serio)); | |
181d683d DT |
66 | |
67 | #else | |
68 | ||
c59690fa | 69 | static inline void i8042_lock_chip(void) |
181d683d DT |
70 | { |
71 | } | |
72 | ||
c59690fa | 73 | static inline void i8042_unlock_chip(void) |
181d683d DT |
74 | { |
75 | } | |
76 | ||
c59690fa | 77 | static inline int i8042_command(unsigned char *param, int command) |
181d683d | 78 | { |
967c9ef9 | 79 | return -ENODEV; |
181d683d DT |
80 | } |
81 | ||
c59690fa | 82 | static inline int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str, |
967c9ef9 MG |
83 | struct serio *serio)) |
84 | { | |
85 | return -ENODEV; | |
86 | } | |
87 | ||
c59690fa | 88 | static inline int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str, |
967c9ef9 MG |
89 | struct serio *serio)) |
90 | { | |
91 | return -ENODEV; | |
92 | } | |
93 | ||
181d683d | 94 | #endif |
553a05b8 MN |
95 | |
96 | #endif |