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