xref: /openbsd/sys/dev/pckbc/pmsreg.h (revision db8ad24e)
1*db8ad24eSbru /* $OpenBSD: pmsreg.h,v 1.18 2020/03/18 22:38:10 bru Exp $ */
24026eccfSkettenis /* $NetBSD: psmreg.h,v 1.1 1998/03/22 15:41:28 drochner Exp $ */
34026eccfSkettenis 
4aaab154dSshadchin #ifndef SYS_DEV_PCKBC_PMSREG_H
5aaab154dSshadchin #define SYS_DEV_PCKBC_PMSREG_H
6aaab154dSshadchin 
74026eccfSkettenis /* mouse commands */
84026eccfSkettenis #define PMS_SET_SCALE11		0xe6	/* set scaling 1:1 */
94026eccfSkettenis #define PMS_SET_SCALE21		0xe7	/* set scaling 2:1 */
104026eccfSkettenis #define PMS_SET_RES		0xe8	/* set resolution (0..3) */
11aaab154dSshadchin #define PMS_SEND_DEV_STATUS	0xe9	/* status request */
12aaab154dSshadchin #define PMS_SET_STREAM_MODE	0xea
13aaab154dSshadchin #define PMS_SEND_DEV_DATA	0xeb	/* read data */
14aaab154dSshadchin #define PMS_RESET_WRAP_MODE	0xec
15aaab154dSshadchin #define PMS_SET_WRAP_MODE	0xed
164026eccfSkettenis #define PMS_SET_REMOTE_MODE	0xf0
17aaab154dSshadchin #define PMS_SEND_DEV_ID		0xf2	/* read device type */
184026eccfSkettenis #define PMS_SET_SAMPLE		0xf3	/* set sampling rate */
194026eccfSkettenis #define PMS_DEV_ENABLE		0xf4	/* mouse on */
204026eccfSkettenis #define PMS_DEV_DISABLE		0xf5	/* mouse off */
214026eccfSkettenis #define PMS_SET_DEFAULTS	0xf6
22aaab154dSshadchin #define PMS_RESEND		0xfe
234026eccfSkettenis #define PMS_RESET		0xff	/* reset */
244026eccfSkettenis 
254026eccfSkettenis #define PMS_RSTDONE		0xaa
26aaab154dSshadchin 
27aaab154dSshadchin /* PS/2 mouse data packet */
28aaab154dSshadchin #define PMS_PS2_BUTTONSMASK	0x07
29aaab154dSshadchin #define PMS_PS2_BUTTON1		0x01	/* left */
30aaab154dSshadchin #define PMS_PS2_BUTTON2		0x04	/* middle */
31aaab154dSshadchin #define PMS_PS2_BUTTON3		0x02	/* right */
32aaab154dSshadchin #define PMS_PS2_XNEG		0x10
33aaab154dSshadchin #define PMS_PS2_YNEG		0x20
34aaab154dSshadchin 
35aaab154dSshadchin #define PMS_INTELLI_MAGIC1	200
36aaab154dSshadchin #define PMS_INTELLI_MAGIC2	100
37aaab154dSshadchin #define PMS_INTELLI_MAGIC3	80
38aaab154dSshadchin #define PMS_INTELLI_ID		0x03
39aaab154dSshadchin 
407327fb1eSmpi #define PMS_ALPS_MAGIC1		0
417327fb1eSmpi #define PMS_ALPS_MAGIC2		0
427327fb1eSmpi #define PMS_ALPS_MAGIC3_1	10
43fa7039d6Stobias #define PMS_ALPS_MAGIC3_2	80
44fa7039d6Stobias #define PMS_ALPS_MAGIC3_3	100
457327fb1eSmpi 
4672ec3668Sstsp #define PMS_ELANTECH_MAGIC1	0x3c
4772ec3668Sstsp #define PMS_ELANTECH_MAGIC2	0x03
4872ec3668Sstsp #define PMS_ELANTECH_MAGIC3_1	0xc8
4972ec3668Sstsp #define PMS_ELANTECH_MAGIC3_2	0x00
5072ec3668Sstsp 
51b2dcd1e6Sshadchin /*
52b2dcd1e6Sshadchin  * Checking for almost-standard PS/2 packet
53b2dcd1e6Sshadchin  * Note: ALPS devices never signal overflow condition
54b2dcd1e6Sshadchin  */
55b2dcd1e6Sshadchin #define PMS_ALPS_PS2_MASK			0xc8
56b2dcd1e6Sshadchin #define PMS_ALPS_PS2_VALID			0x08
57b2dcd1e6Sshadchin 
58b2dcd1e6Sshadchin /* Checking for interleaved packet */
59b2dcd1e6Sshadchin #define PMS_ALPS_INTERLEAVED_MASK		0xcf
60b2dcd1e6Sshadchin #define PMS_ALPS_INTERLEAVED_VALID		0x0f
61b2dcd1e6Sshadchin 
62b2dcd1e6Sshadchin /* Checking for non first byte */
63b2dcd1e6Sshadchin #define PMS_ALPS_MASK				0x80
64b2dcd1e6Sshadchin #define PMS_ALPS_VALID				0x00
65b2dcd1e6Sshadchin 
66aaab154dSshadchin /* Synaptics queries */
67aaab154dSshadchin #define SYNAPTICS_QUE_IDENTIFY			0x00
68aaab154dSshadchin #define SYNAPTICS_QUE_MODES			0x01
69aaab154dSshadchin #define SYNAPTICS_QUE_CAPABILITIES		0x02
70aaab154dSshadchin #define SYNAPTICS_QUE_MODEL			0x03
71aaab154dSshadchin #define SYNAPTICS_QUE_SERIAL_NUMBER_PREFIX	0x06
72aaab154dSshadchin #define SYNAPTICS_QUE_SERIAL_NUMBER_SUFFIX	0x07
73aaab154dSshadchin #define SYNAPTICS_QUE_RESOLUTION		0x08
74aaab154dSshadchin #define SYNAPTICS_QUE_EXT_MODEL			0x09
75aaab154dSshadchin #define SYNAPTICS_QUE_EXT_CAPABILITIES		0x0c
7632aca7fdSbru #define SYNAPTICS_QUE_EXT_MAX_COORDS		0x0d
7732aca7fdSbru #define SYNAPTICS_QUE_EXT_MIN_COORDS		0x0f
78dc9b7ba2Sjsg #define SYNAPTICS_QUE_EXT2_CAPABILITIES		0x10
79aaab154dSshadchin 
80aaab154dSshadchin #define SYNAPTICS_CMD_SET_MODE			0x14
81aaab154dSshadchin #define SYNAPTICS_CMD_SEND_CLIENT		0x28
82aaab154dSshadchin #define SYNAPTICS_CMD_SET_ADV_GESTURE_MODE	0xc8
83aaab154dSshadchin 
84aaab154dSshadchin /* Identify */
85aaab154dSshadchin #define SYNAPTICS_ID_MODEL(id)			(((id) >>  4) & 0x0f)
86aaab154dSshadchin #define SYNAPTICS_ID_MINOR(id)			(((id) >> 16) & 0xff)
87aaab154dSshadchin #define SYNAPTICS_ID_MAJOR(id)			((id) & 0x0f)
88dc9b7ba2Sjsg #define SYNAPTICS_ID_FULL(id) \
89dc9b7ba2Sjsg 	(SYNAPTICS_ID_MAJOR(id) << 8 | SYNAPTICS_ID_MINOR(id))
90aaab154dSshadchin #define SYNAPTICS_ID_MAGIC			0x47
91aaab154dSshadchin 
92aaab154dSshadchin /* Modes bits */
93dc9b7ba2Sjsg #define SYNAPTICS_EXT2_CAP			(1 << 17)
94aaab154dSshadchin #define SYNAPTICS_ABSOLUTE_MODE			(1 << 7)
95aaab154dSshadchin #define SYNAPTICS_HIGH_RATE			(1 << 6)
96aaab154dSshadchin #define SYNAPTICS_SLEEP_MODE			(1 << 3)
97aaab154dSshadchin #define SYNAPTICS_DISABLE_GESTURE		(1 << 2)
98aaab154dSshadchin #define SYNAPTICS_FOUR_BYTE_CLIENT		(1 << 1)
99aaab154dSshadchin #define SYNAPTICS_W_MODE			(1 << 0)
100aaab154dSshadchin 
101aaab154dSshadchin /* Capability bits */
102aaab154dSshadchin #define SYNAPTICS_CAP_EXTENDED			(1 << 23)
103aaab154dSshadchin #define SYNAPTICS_CAP_EXTENDED_QUERIES(c)	(((c) >> 20) & 0x07)
104aaab154dSshadchin #define SYNAPTICS_CAP_MIDDLE_BUTTON		(1 << 18)
105aaab154dSshadchin #define SYNAPTICS_CAP_PASSTHROUGH		(1 << 7)
106aaab154dSshadchin #define SYNAPTICS_CAP_SLEEP			(1 << 4)
107aaab154dSshadchin #define SYNAPTICS_CAP_FOUR_BUTTON		(1 << 3)
108aaab154dSshadchin #define SYNAPTICS_CAP_BALLISTICS		(1 << 2)
109aaab154dSshadchin #define SYNAPTICS_CAP_MULTIFINGER		(1 << 1)
110aaab154dSshadchin #define SYNAPTICS_CAP_PALMDETECT		(1 << 0)
111aaab154dSshadchin 
112aaab154dSshadchin /* Model ID bits */
113aaab154dSshadchin #define SYNAPTICS_MODEL_ROT180			(1 << 23)
114aaab154dSshadchin #define SYNAPTICS_MODEL_PORTRAIT		(1 << 22)
115aaab154dSshadchin #define SYNAPTICS_MODEL_SENSOR(m)		(((m) >> 16) & 0x3f)
116aaab154dSshadchin #define SYNAPTICS_MODEL_HARDWARE(m)		(((m) >> 9) & 0x7f)
117aaab154dSshadchin #define SYNAPTICS_MODEL_NEWABS			(1 << 7)
118aaab154dSshadchin #define SYNAPTICS_MODEL_PEN			(1 << 6)
119aaab154dSshadchin #define SYNAPTICS_MODEL_SIMPLC			(1 << 5)
120aaab154dSshadchin #define SYNAPTICS_MODEL_GEOMETRY(m)		((m) & 0x0f)
121aaab154dSshadchin 
122aaab154dSshadchin /* Resolutions */
123a7511290Sbru #define SYNAPTICS_RESOLUTION_VALID		(1 << 15)
124aaab154dSshadchin #define SYNAPTICS_RESOLUTION_X(r)		(((r) >> 16) & 0xff)
125aaab154dSshadchin #define SYNAPTICS_RESOLUTION_Y(r)		((r) & 0xff)
126aaab154dSshadchin 
127aaab154dSshadchin /* Extended Model ID bits */
128aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_LIGHTCONTROL	(1 << 22)
129aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_PEAKDETECT		(1 << 21)
130aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_VWHEEL		(1 << 19)
131aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_EW_MODE		(1 << 18)
132aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_HSCROLL		(1 << 17)
133aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_VSCROLL		(1 << 16)
134aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_BUTTONS(em)		((em >> 12) & 0x0f)
135aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_SENSOR(em)		((em >> 10) & 0x03)
136aaab154dSshadchin #define SYNAPTICS_EXT_MODEL_PRODUCT(em)		((em) & 0xff)
137aaab154dSshadchin 
138aaab154dSshadchin /* Extended Capability bits */
139aaab154dSshadchin #define SYNAPTICS_EXT_CAP_CLICKPAD		(1 << 20)
140aaab154dSshadchin #define SYNAPTICS_EXT_CAP_ADV_GESTURE		(1 << 19)
14132aca7fdSbru #define SYNAPTICS_EXT_CAP_MAX_COORDS		(1 << 17)
14232aca7fdSbru #define SYNAPTICS_EXT_CAP_MIN_COORDS		(1 << 13)
143*db8ad24eSbru #define SYNAPTICS_EXT_CAP_REPORTS_V		(1 << 11)
144aaab154dSshadchin #define SYNAPTICS_EXT_CAP_CLICKPAD_2BTN		(1 << 8)
145aaab154dSshadchin 
146*db8ad24eSbru #define SYNAPTICS_SUPPORTS_AGM(extcaps) ((extcaps) & \
147*db8ad24eSbru     (SYNAPTICS_EXT_CAP_ADV_GESTURE | SYNAPTICS_EXT_CAP_REPORTS_V))
148*db8ad24eSbru 
14932aca7fdSbru /* Coordinate Limits */
15032aca7fdSbru #define SYNAPTICS_X_LIMIT(d)			((((d) & 0xff0000) >> 11) | \
151aaab154dSshadchin 						 (((d) & 0xf00) >> 7))
15232aca7fdSbru #define SYNAPTICS_Y_LIMIT(d)			((((d) & 0xff) << 5) | \
153aaab154dSshadchin 						 (((d) & 0xf000) >> 11))
154aaab154dSshadchin 
155dc9b7ba2Sjsg /* Extended Capability 2 */
156dc9b7ba2Sjsg #define SYNAPTICS_EXT2_CAP_BUTTONS_STICK	(1 << 16)
157dc9b7ba2Sjsg 
158aaab154dSshadchin /* Typical bezel limit */
159aaab154dSshadchin #define SYNAPTICS_XMIN_BEZEL			1472
160aaab154dSshadchin #define SYNAPTICS_XMAX_BEZEL			5472
161aaab154dSshadchin #define SYNAPTICS_YMIN_BEZEL			1408
162aaab154dSshadchin #define SYNAPTICS_YMAX_BEZEL			4448
163aaab154dSshadchin 
164529d4085Sbru #define ALPS_XMIN_BEZEL				0
165529d4085Sbru #define ALPS_XMAX_BEZEL				1023
166529d4085Sbru #define ALPS_YMIN_BEZEL				0
167529d4085Sbru #define ALPS_YMAX_BEZEL				767
1687327fb1eSmpi 
169419d60bbSmpi #define ALPS_XSEC_BEZEL				768
170419d60bbSmpi #define ALPS_YSEC_BEZEL				512
171419d60bbSmpi 
172419d60bbSmpi #define ALPS_Z_MAGIC				127
173419d60bbSmpi 
1742445272cSbru /* ALPS "gesture" and "finger" bits */
1752445272cSbru #define ALPS_TAP				0x01
1762445272cSbru #define ALPS_DRAG				0x03
1772445272cSbru 
17872ec3668Sstsp /* Elantech queries */
17972ec3668Sstsp #define ELANTECH_QUE_FW_ID			0
18072ec3668Sstsp #define ELANTECH_QUE_FW_VER			1
18172ec3668Sstsp #define ELANTECH_QUE_CAPABILITIES		2
18272ec3668Sstsp #define ELANTECH_QUE_SAMPLE			3
18372ec3668Sstsp #define ELANTECH_QUE_RESOLUTION			4
18472ec3668Sstsp 
18572ec3668Sstsp /* Elantech capabilities */
18672ec3668Sstsp #define ELANTECH_CAP_HAS_ROCKER			4
1878e9e9c10Sbru #define ELANTECH_CAP_TRACKPOINT			0x80
18872ec3668Sstsp 
18972ec3668Sstsp #define ELANTECH_PS2_CUSTOM_COMMAND		0xf8
19072ec3668Sstsp 
19172ec3668Sstsp #define ELANTECH_CMD_READ_REG			0x10
19272ec3668Sstsp #define ELANTECH_CMD_WRITE_REG			0x11
19372ec3668Sstsp #define ELANTECH_CMD_READ_WRITE_REG		0x00
19472ec3668Sstsp 
19572ec3668Sstsp #define ELANTECH_ABSOLUTE_MODE			0x04
19672ec3668Sstsp 
19772ec3668Sstsp /* Hardware version 1 has hard-coded axis range values.
19872ec3668Sstsp  * X axis range is 0 to 576, Y axis range is 0 to 384.
19972ec3668Sstsp  * Edge offset accounts for bezel around the touchpad. */
20072ec3668Sstsp #define ELANTECH_V1_EDGE_OFFSET	32
20172ec3668Sstsp #define ELANTECH_V1_X_MIN	(0 + ELANTECH_V1_EDGE_OFFSET)
20272ec3668Sstsp #define ELANTECH_V1_X_MAX	(576 - ELANTECH_V1_EDGE_OFFSET)
20372ec3668Sstsp #define ELANTECH_V1_Y_MIN	(0 + ELANTECH_V1_EDGE_OFFSET)
20472ec3668Sstsp #define ELANTECH_V1_Y_MAX	(384 - ELANTECH_V1_EDGE_OFFSET)
20572ec3668Sstsp 
20672ec3668Sstsp /* Older hardware version 2 variants lack ID query capability. */
20772ec3668Sstsp #define ELANTECH_V2_X_MAX	1152
20872ec3668Sstsp #define ELANTECH_V2_Y_MAX	768
20972ec3668Sstsp 
2107f1c67caSjcs /* V4 */
2117f1c67caSjcs #define ELANTECH_MAX_FINGERS			5
2127f1c67caSjcs #define ELANTECH_V4_WEIGHT_VALUE		5
2137f1c67caSjcs 
2144f06b9beSbru #define ELANTECH_V4_PKT_STATUS			0
2154f06b9beSbru #define ELANTECH_V4_PKT_HEAD			0x01
2164f06b9beSbru #define ELANTECH_V4_PKT_MOTION			0x02
21772ec3668Sstsp 
2188e9e9c10Sbru /* V3 and V4 may be coupled with trackpoints, pms supports them for V4. */
2198e9e9c10Sbru #define ELANTECH_PKT_TRACKPOINT			0x06
2208e9e9c10Sbru 
221aaab154dSshadchin #endif /* SYS_DEV_PCKBC_PMSREG_H */
222