60 lines
2.3 KiB
Diff
60 lines
2.3 KiB
Diff
Based on:
|
|
|
|
commit 71bb21b677e89a2b438b804231f92b779beda5d7
|
|
Author: Maxim Levitsky <maximlevitsky@gmail.com>
|
|
Date: Mon Nov 16 22:12:22 2009 -0800
|
|
|
|
Input: ALPS - add support for touchpads with 4-directional button
|
|
|
|
The touchpad on Acer Aspire 5720, 5520 and some other Aspire models
|
|
(signature 0x73, 0x02, 0x50) has a button that can be rocked in 4
|
|
different directions. Make the driver to generate BTN_0..BTN_3 events
|
|
in response. The Synaptics driver by default maps BTN_0 and BTN_1 to
|
|
up and down, so there should be no visible changes with the old setup
|
|
that generated BTN_FORWARD and BTN_BACK (also mapped to up and down).
|
|
|
|
Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
|
|
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
|
|
|
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
|
|
index f361106..a3f492a 100644
|
|
--- a/drivers/input/mouse/alps.c
|
|
+++ b/drivers/input/mouse/alps.c
|
|
@@ -61,7 +61,7 @@ static const struct alps_model_info alps_model_data[] = {
|
|
/* Dell Latitude E5500, E6400, E6500, Precision M4400 */
|
|
{ { 0x62, 0x02, 0x14 }, 0xcf, 0xcf,
|
|
ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED },
|
|
- { { 0x73, 0x02, 0x50 }, 0xcf, 0xcf, ALPS_FW_BK_1 }, /* Dell Vostro 1400 */
|
|
+ { { 0x73, 0x02, 0x50 }, 0xcf, 0xcf, ALPS_4BTN }, /* Dell Vostro 1400 */
|
|
};
|
|
|
|
/*
|
|
@@ -241,6 +241,13 @@ static void alps_process_packet(struct psmouse *psmouse)
|
|
input_report_key(dev, BTN_BACK, back);
|
|
}
|
|
|
|
+ if (priv->i->flags & ALPS_4BTN) {
|
|
+ input_report_key(dev, BTN_0, packet[2] & 4);
|
|
+ input_report_key(dev, BTN_1, packet[0] & 0x10);
|
|
+ input_report_key(dev, BTN_2, packet[3] & 4);
|
|
+ input_report_key(dev, BTN_3, packet[0] & 0x20);
|
|
+ }
|
|
+
|
|
input_sync(dev);
|
|
}
|
|
|
|
@@ -689,6 +696,13 @@ int alps_init(struct psmouse *psmouse)
|
|
dev1->keybit[BIT_WORD(BTN_BACK)] |= BIT_MASK(BTN_BACK);
|
|
}
|
|
|
|
+ if (priv->i->flags & ALPS_4BTN) {
|
|
+ dev1->keybit[BIT_WORD(BTN_0)] |= BIT_MASK(BTN_0);
|
|
+ dev1->keybit[BIT_WORD(BTN_1)] |= BIT_MASK(BTN_1);
|
|
+ dev1->keybit[BIT_WORD(BTN_2)] |= BIT_MASK(BTN_2);
|
|
+ dev1->keybit[BIT_WORD(BTN_3)] |= BIT_MASK(BTN_3);
|
|
+ }
|
|
+
|
|
snprintf(priv->phys, sizeof(priv->phys), "%s/input1", psmouse->ps2dev.serio->phys);
|
|
dev2->phys = priv->phys;
|
|
dev2->name = (priv->i->flags & ALPS_DUALPOINT) ? "DualPoint Stick" : "PS/2 Mouse";
|