diff options
author | Christoph Brill <egore911@egore911.de> | 2008-06-06 19:53:55 +0200 |
---|---|---|
committer | Christoph Brill <egore911@egore911.de> | 2008-06-06 19:53:55 +0200 |
commit | cbfe9412455f855df76aa3a883224791f16a5d1c (patch) | |
tree | 0161c52a9486543cdaeae68daa50213d603605a7 | |
parent | c2d1eb93b75912463f31f574d8701d8cfd9d7a18 (diff) |
Drop the alps support patch for the linux kernel.
This patch was merged upstream, no need to provide it.
-rw-r--r-- | alps.patch | 561 |
1 files changed, 0 insertions, 561 deletions
diff --git a/alps.patch b/alps.patch deleted file mode 100644 index ed1bf05..0000000 --- a/alps.patch +++ /dev/null @@ -1,561 +0,0 @@ - -This patch implements an ALPS touchpad driver with the following -features: - -* Dmitry Torokhov: The driver will try to auto-detect presence of an - ALPS touchpad by issuing E6/E7 requests and matching responses with - known ALPS signatures. - -* Dmitry Torokhov: It will also try disabling hardware tapping so taps - could be controlled by either userspace drivers (X/GPM) or future - version of mousedev (2.6.8 I hope will have it). - -* Alastair M. Robinson: Code to set absolute mode for DualPoint - touchpads found on Dell CPx machines. (Ported to the 2.6 kernel - driver by Peter Osterlund) - ---- - - linux-petero/drivers/input/mouse/Makefile | 2 - linux-petero/drivers/input/mouse/alps.c | 423 ++++++++++++++++++++++++ - linux-petero/drivers/input/mouse/alps.h | 17 - linux-petero/drivers/input/mouse/psmouse-base.c | 24 + - linux-petero/drivers/input/mouse/psmouse.h | 3 - 5 files changed, 467 insertions(+), 2 deletions(-) - -diff -puN drivers/input/mouse/Makefile~alps drivers/input/mouse/Makefile ---- linux/drivers/input/mouse/Makefile~alps 2004-10-20 20:04:38.188738232 +0200 -+++ linux-petero/drivers/input/mouse/Makefile 2004-10-20 20:04:38.194737320 +0200 -@@ -14,4 +14,4 @@ obj-$(CONFIG_MOUSE_PS2) += psmouse.o - obj-$(CONFIG_MOUSE_SERIAL) += sermouse.o - obj-$(CONFIG_MOUSE_VSXXXAA) += vsxxxaa.o - --psmouse-objs := psmouse-base.o logips2pp.o synaptics.o -+psmouse-objs := psmouse-base.o alps.o logips2pp.o synaptics.o -diff -puN /dev/null drivers/input/mouse/alps.c ---- /dev/null 2004-02-23 22:02:56.000000000 +0100 -+++ linux-petero/drivers/input/mouse/alps.c 2004-10-20 20:04:38.195737168 +0200 -@@ -0,0 +1,423 @@ -+/* -+ * ALPS touchpad PS/2 mouse driver -+ * -+ * Copyright (c) 2003 Neil Brown <neilb@cse.unsw.edu.au> -+ * Copyright (c) 2003 Peter Osterlund <petero2@telia.com> -+ * Copyright (c) 2004 Dmitry Torokhov <dtor@mail.ru> -+ * -+ * ALPS detection, tap switching and status querying info is taken from -+ * tpconfig utility (by C. Scott Ananian and Bruce Kall). -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published by -+ * the Free Software Foundation. -+ */ -+ -+#include <linux/input.h> -+#include <linux/serio.h> -+ -+#include "psmouse.h" -+#include "alps.h" -+ -+#define DEBUG -+#ifdef DEBUG -+#define dbg(format, arg...) printk(KERN_INFO "alps.c: " format "\n", ## arg) -+#else -+#define dbg(format, arg...) do {} while (0) -+#endif -+ -+#define ALPS_MODEL_GLIDEPOINT 1 -+#define ALPS_MODEL_DUALPOINT 2 -+ -+struct alps_model_info { -+ unsigned char signature[3]; -+ unsigned char model; -+} alps_model_data[] = { -+ { { 0x33, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x53, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x53, 0x02, 0x14 }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x02, 0x14 }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x73, 0x02, 0x0a }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x73, 0x02, 0x14 }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x02, 0x28 }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x02, 0x3c }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x02, 0x50 }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x02, 0x64 }, ALPS_MODEL_GLIDEPOINT }, -+ { { 0x63, 0x03, 0xc8 }, ALPS_MODEL_DUALPOINT }, -+ { { 0x20, 0x02, 0x0e }, ALPS_MODEL_DUALPOINT }, -+ { { 0x22, 0x02, 0x0a }, ALPS_MODEL_DUALPOINT }, -+ { { 0x22, 0x02, 0x14 }, ALPS_MODEL_DUALPOINT }, -+}; -+ -+/* -+ * ALPS abolute Mode -+ * byte 0: 1 1 1 1 1 mid0 rig0 lef0 -+ * byte 1: 0 x6 x5 x4 x3 x2 x1 x0 -+ * byte 2: 0 x10 x9 x8 x7 up1 fin ges -+ * byte 3: 0 y9 y8 y7 1 mid1 rig1 lef1 -+ * byte 4: 0 y6 y5 y4 y3 y2 y1 y0 -+ * byte 5: 0 z6 z5 z4 z3 z2 z1 z0 -+ * -+ * On a dualpoint, {mid,rig,lef}0 are the stick, 1 are the pad. -+ * We just 'or' them together for now. -+ * -+ * We used to send 'ges'tures as BTN_TOUCH but this made it impossible -+ * to disable tap events in the synaptics driver since the driver -+ * was unable to distinguish a gesture tap from an actual button click. -+ * A tap gesture now creates an emulated touch that the synaptics -+ * driver can interpret as a tap event, if MaxTapTime=0 and -+ * MaxTapMove=0 then the driver will ignore taps. -+ * -+ * The touchpad on an 'Acer Aspire' has 4 buttons: -+ * left,right,up,down. -+ * This device always sets {mid,rig,lef}0 to 1 and -+ * reflects left,right,down,up in lef1,rig1,mid1,up1. -+ */ -+ -+static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs) -+{ -+ unsigned char *packet = psmouse->packet; -+ struct input_dev *dev = &psmouse->dev; -+ int x, y, z; -+ int left = 0, right = 0, middle = 0; -+ -+ input_regs(dev, regs); -+ -+ if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */ -+ x = packet[1]; -+ if (packet[0] & 0x10) -+ x = x - 256; -+ y = packet[2]; -+ if (packet[0] & 0x20) -+ y = y - 256; -+ left = (packet[0] ) & 1; -+ right = (packet[0] >> 1) & 1; -+ -+ input_report_rel(dev, REL_X, x); -+ input_report_rel(dev, REL_Y, -y); -+ input_report_key(dev, BTN_A, left); -+ input_report_key(dev, BTN_B, right); -+ input_sync(dev); -+ return; -+ } -+ -+ x = (packet[1] & 0x7f) | ((packet[2] & 0x78)<<(7-3)); -+ y = (packet[4] & 0x7f) | ((packet[3] & 0x70)<<(7-4)); -+ z = packet[5]; -+ -+ if (z == 127) { /* DualPoint stick is relative, not absolute */ -+ if (x > 383) -+ x = x - 768; -+ if (y > 255) -+ y = y - 512; -+ left = packet[3] & 1; -+ right = (packet[3] >> 1) & 1; -+ -+ input_report_rel(dev, REL_X, x); -+ input_report_rel(dev, REL_Y, -y); -+ input_report_key(dev, BTN_LEFT, left); -+ input_report_key(dev, BTN_RIGHT, right); -+ input_sync(dev); -+ return; -+ } -+ -+ if (z > 30) input_report_key(dev, BTN_TOUCH, 1); -+ if (z < 25) input_report_key(dev, BTN_TOUCH, 0); -+ -+ if (z > 0) { -+ input_report_abs(dev, ABS_X, x); -+ input_report_abs(dev, ABS_Y, y); -+ } -+ input_report_abs(dev, ABS_PRESSURE, z); -+ input_report_key(dev, BTN_TOOL_FINGER, z > 0); -+ -+ left |= (packet[2] ) & 1; -+ left |= (packet[3] ) & 1; -+ right |= (packet[3] >> 1) & 1; -+ if (packet[0] == 0xff) { -+ int back = (packet[3] >> 2) & 1; -+ int forward = (packet[2] >> 2) & 1; -+ if (back && forward) { -+ middle = 1; -+ back = 0; -+ forward = 0; -+ } -+ input_report_key(dev, BTN_BACK, back); -+ input_report_key(dev, BTN_FORWARD, forward); -+ } else { -+ left |= (packet[0] ) & 1; -+ right |= (packet[0] >> 1) & 1; -+ middle |= (packet[0] >> 2) & 1; -+ middle |= (packet[3] >> 2) & 1; -+ } -+ -+ input_report_key(dev, BTN_LEFT, left); -+ input_report_key(dev, BTN_RIGHT, right); -+ input_report_key(dev, BTN_MIDDLE, middle); -+ -+ input_sync(dev); -+} -+ -+static psmouse_ret_t alps_process_byte(struct psmouse *psmouse, struct pt_regs *regs) -+{ -+ if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ -+ if (psmouse->pktcnt == 3) { -+ alps_process_packet(psmouse, regs); -+ return PSMOUSE_FULL_PACKET; -+ } -+ return PSMOUSE_GOOD_DATA; -+ } -+ -+ /* ALPS absolute mode packets start with 0b11111mrl */ -+ if ((psmouse->packet[0] & 0xf8) != 0xf8) -+ return PSMOUSE_BAD_DATA; -+ -+ /* Bytes 2 - 6 should have 0 in the highest bit */ -+ if (psmouse->pktcnt >= 2 && psmouse->pktcnt <= 6 && -+ (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) -+ return PSMOUSE_BAD_DATA; -+ -+ if (psmouse->pktcnt == 6) { -+ alps_process_packet(psmouse, regs); -+ return PSMOUSE_FULL_PACKET; -+ } -+ -+ return PSMOUSE_GOOD_DATA; -+} -+ -+int alps_get_model(struct psmouse *psmouse) -+{ -+ unsigned char param[4]; -+ int i; -+ -+ /* -+ * First try "E6 report". -+ * ALPS should return 0x00,0x00,0x0a or 0x00,0x00,0x64 -+ */ -+ param[0] = 0; -+ if (psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11)) -+ return -1; -+ -+ param[0] = param[1] = param[2] = 0xff; -+ if (psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO)) -+ return -1; -+ -+ dbg("E6 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); -+ -+ if (param[0] != 0x00 || param[1] != 0x00 || (param[2] != 0x0a && param[2] != 0x64)) -+ return -1; -+ -+ /* Now try "E7 report". ALPS should return 0x33 in byte 1 */ -+ param[0] = 0; -+ if (psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE21) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE21) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE21)) -+ return -1; -+ -+ param[0] = param[1] = param[2] = 0xff; -+ if (psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO)) -+ return -1; -+ -+ dbg("E7 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); -+ -+ for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) -+ if (!memcmp(param, alps_model_data[i].signature, sizeof(alps_model_data[i].signature))) -+ return alps_model_data[i].model; -+ -+ return -1; -+} -+ -+/* -+ * For DualPoint devices select the device that should respond to -+ * subsequent commands. It looks like glidepad is behind stickpointer, -+ * I'd thought it would be other way around... -+ */ -+static int alps_passthrough_mode(struct psmouse *psmouse, int enable) -+{ -+ unsigned char param[3]; -+ int cmd = enable ? PSMOUSE_CMD_SETSCALE21 : PSMOUSE_CMD_SETSCALE11; -+ -+ if (psmouse_command(psmouse, NULL, cmd) || -+ psmouse_command(psmouse, NULL, cmd) || -+ psmouse_command(psmouse, NULL, cmd) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE)) -+ return -1; -+ -+ /* we may get 3 more bytes, just ignore them */ -+ psmouse_command(psmouse, param, 0x0300); -+ -+ return 0; -+} -+ -+static int alps_magic_knock(struct psmouse *psmouse) -+{ -+ /* Try ALPS magic knock - 4 disable before enable */ -+ if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_ENABLE)) -+ return -1; -+ return 0; -+} -+ -+static int alps_absolute_mode(struct psmouse *psmouse) -+{ -+ if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_RESET_DIS)) -+ return -1; -+ -+ if (alps_passthrough_mode(psmouse, 1)) -+ return -1; -+ -+ if (alps_magic_knock(psmouse)) -+ return -1; -+ -+ if (alps_passthrough_mode(psmouse, 0)) -+ return -1; -+ -+ if (alps_magic_knock(psmouse)) -+ return -1; -+ -+ /* -+ * Switch mouse to poll (remote) mode so motion data will not -+ * get in our way -+ */ -+ return psmouse_command(psmouse, NULL, PSMOUSE_CMD_SETPOLL); -+} -+ -+static int alps_get_status(struct psmouse *psmouse, char *param) -+{ -+ /* Get status: 0xF5 0xF5 0xF5 0xE9 */ -+ if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO)) -+ return -1; -+ -+ dbg("Status: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); -+ -+ return 0; -+} -+ -+/* -+ * Turn touchpad tapping on or off. The sequences are: -+ * 0xE9 0xF5 0xF5 0xF3 0x0A to enable, -+ * 0xE9 0xF5 0xF5 0xE8 0x00 to disable. -+ * My guess that 0xE9 (GetInfo) is here as a sync point. -+ * For models that also have stickpointer (DualPoints) its tapping -+ * is controlled separately (0xE6 0xE6 0xE6 0xF3 0x14|0x0A) but -+ * we don't fiddle with it. -+ */ -+static int alps_tap_mode(struct psmouse *psmouse, int model, int enable) -+{ -+ int rc = 0; -+ int cmd = enable ? PSMOUSE_CMD_SETRATE : PSMOUSE_CMD_SETRES; -+ unsigned char tap_arg = enable ? 0x0A : 0x00; -+ unsigned char param[4]; -+ -+ if (model == ALPS_MODEL_DUALPOINT && alps_passthrough_mode(psmouse, 1)) -+ return -1; -+ -+ if (psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, NULL, PSMOUSE_CMD_DISABLE) || -+ psmouse_command(psmouse, &tap_arg, cmd)) -+ rc = -1; -+ -+ if (model == ALPS_MODEL_DUALPOINT && alps_passthrough_mode(psmouse, 0)) -+ return -1; -+ -+ if (alps_get_status(psmouse, param)) -+ return -1; -+ -+ -+ return rc; -+} -+ -+static int alps_reconnect(struct psmouse *psmouse) -+{ -+ int model; -+ unsigned char param[4]; -+ -+ if ((model = alps_get_model(psmouse)) < 0) -+ return -1; -+ -+ if (alps_get_status(psmouse, param)) -+ return -1; -+ -+ if ((model == ALPS_MODEL_DUALPOINT ? param[2] : param[0]) & 0x04) -+ alps_tap_mode(psmouse, model, 0); -+ -+ if (alps_absolute_mode(psmouse)) { -+ printk(KERN_ERR "alps.c: Failed to enable absolute mode\n"); -+ return -1; -+ } -+ -+ return 0; -+} -+ -+static void alps_disconnect(struct psmouse *psmouse) -+{ -+ psmouse_reset(psmouse); -+} -+ -+int alps_init(struct psmouse *psmouse) -+{ -+ unsigned char param[4]; -+ int model; -+ -+ if ((model = alps_get_model(psmouse)) < 0) -+ return -1; -+ -+ if (alps_get_status(psmouse, param)) { -+ printk(KERN_ERR "alps.c: touchpad status report request failed\n"); -+ return -1; -+ } -+ -+ printk(KERN_INFO "ALPS Touchpad (%s) detected\n", -+ model == ALPS_MODEL_GLIDEPOINT ? "Glidepoint" : "Dualpoint"); -+ -+ if ((model == ALPS_MODEL_DUALPOINT ? param[2] : param[0]) & 0x04) { -+ printk(KERN_INFO " Disabling hardware tapping\n"); -+ if (alps_tap_mode(psmouse, model, 0)) -+ printk(KERN_WARNING "alps.c: Failed to disable hardware tapping\n"); -+ } -+ -+ if (alps_absolute_mode(psmouse)) { -+ printk(KERN_ERR "alps.c: Failed to enable absolute mode\n"); -+ return -1; -+ } -+ -+ psmouse->dev.evbit[LONG(EV_REL)] |= BIT(EV_REL); -+ psmouse->dev.relbit[LONG(REL_X)] |= BIT(REL_X); -+ psmouse->dev.relbit[LONG(REL_Y)] |= BIT(REL_Y); -+ psmouse->dev.keybit[LONG(BTN_A)] |= BIT(BTN_A); -+ psmouse->dev.keybit[LONG(BTN_B)] |= BIT(BTN_B); -+ -+ psmouse->dev.evbit[LONG(EV_ABS)] |= BIT(EV_ABS); -+ input_set_abs_params(&psmouse->dev, ABS_X, 0, 0, 0, 0); -+ input_set_abs_params(&psmouse->dev, ABS_Y, 0, 0, 0, 0); -+ input_set_abs_params(&psmouse->dev, ABS_PRESSURE, 0, 127, 0, 0); -+ -+ psmouse->dev.keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH); -+ psmouse->dev.keybit[LONG(BTN_TOOL_FINGER)] |= BIT(BTN_TOOL_FINGER); -+ psmouse->dev.keybit[LONG(BTN_FORWARD)] |= BIT(BTN_FORWARD); -+ psmouse->dev.keybit[LONG(BTN_BACK)] |= BIT(BTN_BACK); -+ -+ psmouse->protocol_handler = alps_process_byte; -+ psmouse->disconnect = alps_disconnect; -+ psmouse->reconnect = alps_reconnect; -+ -+ return 0; -+} -+ -+int alps_detect(struct psmouse *psmouse) -+{ -+ return alps_get_model(psmouse) < 0 ? 0 : 1; -+} -+ -diff -puN /dev/null drivers/input/mouse/alps.h ---- /dev/null 2004-02-23 22:02:56.000000000 +0100 -+++ linux-petero/drivers/input/mouse/alps.h 2004-10-20 20:04:38.195737168 +0200 -@@ -0,0 +1,17 @@ -+/* -+ * ALPS touchpad PS/2 mouse driver -+ * -+ * Copyright (c) 2003 Peter Osterlund <petero2@telia.com> -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published by -+ * the Free Software Foundation. -+ */ -+ -+#ifndef _ALPS_H -+#define _ALPS_H -+ -+int alps_detect(struct psmouse *psmouse); -+int alps_init(struct psmouse *psmouse); -+ -+#endif -diff -puN drivers/input/mouse/psmouse-base.c~alps drivers/input/mouse/psmouse-base.c ---- linux/drivers/input/mouse/psmouse-base.c~alps 2004-10-20 20:04:38.190737928 +0200 -+++ linux-petero/drivers/input/mouse/psmouse-base.c 2004-10-20 20:04:38.196737016 +0200 -@@ -2,6 +2,7 @@ - * PS/2 mouse driver - * - * Copyright (c) 1999-2002 Vojtech Pavlik -+ * Copyright (c) 2003-2004 Dmitry Torokhov - */ - - /* -@@ -21,6 +22,7 @@ - #include "psmouse.h" - #include "synaptics.h" - #include "logips2pp.h" -+#include "alps.h" - - #define DRIVER_DESC "PS/2 mouse driver" - -@@ -55,7 +57,7 @@ __obsolete_setup("psmouse_smartscroll=") - __obsolete_setup("psmouse_resetafter="); - __obsolete_setup("psmouse_rate="); - --static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2"}; -+static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2", "AlpsPS/2" }; - - /* - * psmouse_process_byte() analyzes the PS/2 data stream and reports -@@ -494,6 +496,26 @@ static int psmouse_extensions(struct psm - synaptics_reset(psmouse); - } - -+/* -+ * Try ALPS TouchPad -+ */ -+ if (max_proto > PSMOUSE_PS2 && alps_detect(psmouse)) { -+ -+ if (set_properties) { -+ psmouse->vendor = "ALPS"; -+ psmouse->name = "TouchPad"; -+ } -+ -+ if (max_proto > PSMOUSE_IMEX) -+ if (!set_properties || alps_init(psmouse) == 0) -+ return PSMOUSE_ALPS; -+ -+/* -+ * Don't try anything fancy, just basic Intellimouse/Explorer protocols -+ */ -+ max_proto = PSMOUSE_IMEX; -+ } -+ - if (max_proto > PSMOUSE_IMEX && genius_detect(psmouse)) { - - if (set_properties) { -diff -puN drivers/input/mouse/psmouse.h~alps drivers/input/mouse/psmouse.h ---- linux/drivers/input/mouse/psmouse.h~alps 2004-10-20 20:04:38.191737776 +0200 -+++ linux-petero/drivers/input/mouse/psmouse.h 2004-10-20 20:04:38.196737016 +0200 -@@ -2,9 +2,11 @@ - #define _PSMOUSE_H - - #define PSMOUSE_CMD_SETSCALE11 0x00e6 -+#define PSMOUSE_CMD_SETSCALE21 0x00e7 - #define PSMOUSE_CMD_SETRES 0x10e8 - #define PSMOUSE_CMD_GETINFO 0x03e9 - #define PSMOUSE_CMD_SETSTREAM 0x00ea -+#define PSMOUSE_CMD_SETPOLL 0x00f0 - #define PSMOUSE_CMD_POLL 0x03eb - #define PSMOUSE_CMD_GETID 0x02f2 - #define PSMOUSE_CMD_SETRATE 0x10f3 -@@ -76,6 +78,7 @@ struct psmouse { - #define PSMOUSE_IMPS 5 - #define PSMOUSE_IMEX 6 - #define PSMOUSE_SYNAPTICS 7 -+#define PSMOUSE_ALPS 8 - - int psmouse_command(struct psmouse *psmouse, unsigned char *param, int command); - int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command); -_ |