xref: /openbsd/sys/dev/pckbc/pmsreg.h (revision cecf84d4)
1 /* $OpenBSD: pmsreg.h,v 1.11 2015/03/26 01:30:22 jsg Exp $ */
2 /* $NetBSD: psmreg.h,v 1.1 1998/03/22 15:41:28 drochner Exp $ */
3 
4 #ifndef SYS_DEV_PCKBC_PMSREG_H
5 #define SYS_DEV_PCKBC_PMSREG_H
6 
7 /* mouse commands */
8 #define PMS_SET_SCALE11		0xe6	/* set scaling 1:1 */
9 #define PMS_SET_SCALE21		0xe7	/* set scaling 2:1 */
10 #define PMS_SET_RES		0xe8	/* set resolution (0..3) */
11 #define PMS_SEND_DEV_STATUS	0xe9	/* status request */
12 #define PMS_SET_STREAM_MODE	0xea
13 #define PMS_SEND_DEV_DATA	0xeb	/* read data */
14 #define PMS_RESET_WRAP_MODE	0xec
15 #define PMS_SET_WRAP_MODE	0xed
16 #define PMS_SET_REMOTE_MODE	0xf0
17 #define PMS_SEND_DEV_ID		0xf2	/* read device type */
18 #define PMS_SET_SAMPLE		0xf3	/* set sampling rate */
19 #define PMS_DEV_ENABLE		0xf4	/* mouse on */
20 #define PMS_DEV_DISABLE		0xf5	/* mouse off */
21 #define PMS_SET_DEFAULTS	0xf6
22 #define PMS_RESEND		0xfe
23 #define PMS_RESET		0xff	/* reset */
24 
25 #define PMS_RSTDONE		0xaa
26 
27 /* PS/2 mouse data packet */
28 #define PMS_PS2_BUTTONSMASK	0x07
29 #define PMS_PS2_BUTTON1		0x01	/* left */
30 #define PMS_PS2_BUTTON2		0x04	/* middle */
31 #define PMS_PS2_BUTTON3		0x02	/* right */
32 #define PMS_PS2_XNEG		0x10
33 #define PMS_PS2_YNEG		0x20
34 
35 #define PMS_INTELLI_MAGIC1	200
36 #define PMS_INTELLI_MAGIC2	100
37 #define PMS_INTELLI_MAGIC3	80
38 #define PMS_INTELLI_ID		0x03
39 
40 #define PMS_ALPS_MAGIC1		0
41 #define PMS_ALPS_MAGIC2		0
42 #define PMS_ALPS_MAGIC3_1	10
43 #define PMS_ALPS_MAGIC3_2	80
44 #define PMS_ALPS_MAGIC3_3	100
45 
46 #define PMS_ELANTECH_MAGIC1	0x3c
47 #define PMS_ELANTECH_MAGIC2	0x03
48 #define PMS_ELANTECH_MAGIC3_1	0xc8
49 #define PMS_ELANTECH_MAGIC3_2	0x00
50 
51 /*
52  * Checking for almost-standard PS/2 packet
53  * Note: ALPS devices never signal overflow condition
54  */
55 #define PMS_ALPS_PS2_MASK			0xc8
56 #define PMS_ALPS_PS2_VALID			0x08
57 
58 /* Checking for interleaved packet */
59 #define PMS_ALPS_INTERLEAVED_MASK		0xcf
60 #define PMS_ALPS_INTERLEAVED_VALID		0x0f
61 
62 /* Checking for non first byte */
63 #define PMS_ALPS_MASK				0x80
64 #define PMS_ALPS_VALID				0x00
65 
66 /* Synaptics queries */
67 #define SYNAPTICS_QUE_IDENTIFY			0x00
68 #define SYNAPTICS_QUE_MODES			0x01
69 #define SYNAPTICS_QUE_CAPABILITIES		0x02
70 #define SYNAPTICS_QUE_MODEL			0x03
71 #define SYNAPTICS_QUE_SERIAL_NUMBER_PREFIX	0x06
72 #define SYNAPTICS_QUE_SERIAL_NUMBER_SUFFIX	0x07
73 #define SYNAPTICS_QUE_RESOLUTION		0x08
74 #define SYNAPTICS_QUE_EXT_MODEL			0x09
75 #define SYNAPTICS_QUE_EXT_CAPABILITIES		0x0c
76 #define SYNAPTICS_QUE_EXT_DIMENSIONS		0x0d
77 #define SYNAPTICS_QUE_EXT2_CAPABILITIES		0x10
78 
79 #define SYNAPTICS_CMD_SET_MODE			0x14
80 #define SYNAPTICS_CMD_SEND_CLIENT		0x28
81 #define SYNAPTICS_CMD_SET_ADV_GESTURE_MODE	0xc8
82 
83 /* Identify */
84 #define SYNAPTICS_ID_MODEL(id)			(((id) >>  4) & 0x0f)
85 #define SYNAPTICS_ID_MINOR(id)			(((id) >> 16) & 0xff)
86 #define SYNAPTICS_ID_MAJOR(id)			((id) & 0x0f)
87 #define SYNAPTICS_ID_FULL(id) \
88 	(SYNAPTICS_ID_MAJOR(id) << 8 | SYNAPTICS_ID_MINOR(id))
89 #define SYNAPTICS_ID_MAGIC			0x47
90 
91 /* Modes bits */
92 #define SYNAPTICS_EXT2_CAP			(1 << 17)
93 #define SYNAPTICS_ABSOLUTE_MODE			(1 << 7)
94 #define SYNAPTICS_HIGH_RATE			(1 << 6)
95 #define SYNAPTICS_SLEEP_MODE			(1 << 3)
96 #define SYNAPTICS_DISABLE_GESTURE		(1 << 2)
97 #define SYNAPTICS_FOUR_BYTE_CLIENT		(1 << 1)
98 #define SYNAPTICS_W_MODE			(1 << 0)
99 
100 /* Capability bits */
101 #define SYNAPTICS_CAP_EXTENDED			(1 << 23)
102 #define SYNAPTICS_CAP_EXTENDED_QUERIES(c)	(((c) >> 20) & 0x07)
103 #define SYNAPTICS_CAP_MIDDLE_BUTTON		(1 << 18)
104 #define SYNAPTICS_CAP_PASSTHROUGH		(1 << 7)
105 #define SYNAPTICS_CAP_SLEEP			(1 << 4)
106 #define SYNAPTICS_CAP_FOUR_BUTTON		(1 << 3)
107 #define SYNAPTICS_CAP_BALLISTICS		(1 << 2)
108 #define SYNAPTICS_CAP_MULTIFINGER		(1 << 1)
109 #define SYNAPTICS_CAP_PALMDETECT		(1 << 0)
110 
111 /* Model ID bits */
112 #define SYNAPTICS_MODEL_ROT180			(1 << 23)
113 #define SYNAPTICS_MODEL_PORTRAIT		(1 << 22)
114 #define SYNAPTICS_MODEL_SENSOR(m)		(((m) >> 16) & 0x3f)
115 #define SYNAPTICS_MODEL_HARDWARE(m)		(((m) >> 9) & 0x7f)
116 #define SYNAPTICS_MODEL_NEWABS			(1 << 7)
117 #define SYNAPTICS_MODEL_PEN			(1 << 6)
118 #define SYNAPTICS_MODEL_SIMPLC			(1 << 5)
119 #define SYNAPTICS_MODEL_GEOMETRY(m)		((m) & 0x0f)
120 
121 /* Resolutions */
122 #define SYNAPTICS_RESOLUTION_X(r)		(((r) >> 16) & 0xff)
123 #define SYNAPTICS_RESOLUTION_Y(r)		((r) & 0xff)
124 
125 /* Extended Model ID bits */
126 #define SYNAPTICS_EXT_MODEL_LIGHTCONTROL	(1 << 22)
127 #define SYNAPTICS_EXT_MODEL_PEAKDETECT		(1 << 21)
128 #define SYNAPTICS_EXT_MODEL_VWHEEL		(1 << 19)
129 #define SYNAPTICS_EXT_MODEL_EW_MODE		(1 << 18)
130 #define SYNAPTICS_EXT_MODEL_HSCROLL		(1 << 17)
131 #define SYNAPTICS_EXT_MODEL_VSCROLL		(1 << 16)
132 #define SYNAPTICS_EXT_MODEL_BUTTONS(em)		((em >> 12) & 0x0f)
133 #define SYNAPTICS_EXT_MODEL_SENSOR(em)		((em >> 10) & 0x03)
134 #define SYNAPTICS_EXT_MODEL_PRODUCT(em)		((em) & 0xff)
135 
136 /* Extended Capability bits */
137 #define SYNAPTICS_EXT_CAP_CLICKPAD		(1 << 20)
138 #define SYNAPTICS_EXT_CAP_ADV_GESTURE		(1 << 19)
139 #define SYNAPTICS_EXT_CAP_MAX_DIMENSIONS	(1 << 17)
140 #define SYNAPTICS_EXT_CAP_CLICKPAD_2BTN		(1 << 8)
141 
142 /* Extended Dimensions */
143 #define SYNAPTICS_DIM_X(d)			((((d) & 0xff0000) >> 11) | \
144 						 (((d) & 0xf00) >> 7))
145 #define SYNAPTICS_DIM_Y(d)			((((d) & 0xff) << 5) | \
146 						 (((d) & 0xf000) >> 11))
147 
148 /* Extended Capability 2 */
149 #define SYNAPTICS_EXT2_CAP_BUTTONS_STICK	(1 << 16)
150 
151 /* Typical bezel limit */
152 #define SYNAPTICS_XMIN_BEZEL			1472
153 #define SYNAPTICS_XMAX_BEZEL			5472
154 #define SYNAPTICS_YMIN_BEZEL			1408
155 #define SYNAPTICS_YMAX_BEZEL			4448
156 
157 #define ALPS_XMIN_BEZEL				130
158 #define ALPS_XMAX_BEZEL				840
159 #define ALPS_YMIN_BEZEL				130
160 #define ALPS_YMAX_BEZEL				640
161 
162 #define ALPS_XSEC_BEZEL				768
163 #define ALPS_YSEC_BEZEL				512
164 
165 #define ALPS_Z_MAGIC				127
166 
167 /* Elantech queries */
168 #define ELANTECH_QUE_FW_ID			0
169 #define ELANTECH_QUE_FW_VER			1
170 #define ELANTECH_QUE_CAPABILITIES		2
171 #define ELANTECH_QUE_SAMPLE			3
172 #define ELANTECH_QUE_RESOLUTION			4
173 
174 /* Elantech capabilities */
175 #define ELANTECH_CAP_HAS_ROCKER			4
176 
177 #define ELANTECH_PS2_CUSTOM_COMMAND		0xf8
178 
179 #define ELANTECH_CMD_READ_REG			0x10
180 #define ELANTECH_CMD_WRITE_REG			0x11
181 #define ELANTECH_CMD_READ_WRITE_REG		0x00
182 
183 #define ELANTECH_ABSOLUTE_MODE			0x04
184 
185 /* Hardware version 1 has hard-coded axis range values.
186  * X axis range is 0 to 576, Y axis range is 0 to 384.
187  * Edge offset accounts for bezel around the touchpad. */
188 #define ELANTECH_V1_EDGE_OFFSET	32
189 #define ELANTECH_V1_X_MIN	(0 + ELANTECH_V1_EDGE_OFFSET)
190 #define ELANTECH_V1_X_MAX	(576 - ELANTECH_V1_EDGE_OFFSET)
191 #define ELANTECH_V1_Y_MIN	(0 + ELANTECH_V1_EDGE_OFFSET)
192 #define ELANTECH_V1_Y_MAX	(384 - ELANTECH_V1_EDGE_OFFSET)
193 
194 /* Older hardware version 2 variants lack ID query capability. */
195 #define ELANTECH_V2_X_MAX	1152
196 #define ELANTECH_V2_Y_MAX	768
197 
198 /* V4 */
199 #define ELANTECH_MAX_FINGERS			5
200 #define ELANTECH_V4_WEIGHT_VALUE		5
201 
202 #define ELANTECH_V4_PKT_STATUS			0x10
203 #define ELANTECH_V4_PKT_HEAD			0x11
204 #define ELANTECH_V4_PKT_MOTION			0x12
205 
206 #endif /* SYS_DEV_PCKBC_PMSREG_H */
207