Input: ALPS - rework detection of Pinnacle AGx touchpads
authorKevin Cernekee <cernekee@gmail.com>
Thu, 14 Feb 2013 06:23:34 +0000 (22:23 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 14 Feb 2013 17:18:11 +0000 (09:18 -0800)
The official ALPS driver uses the EC report, not the E7 report, to detect
these devices.  Also, they check for a range of values; the original
table-based code only checked for two specific ones.

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Tested-by: Dave Turvene <dturvene@dahetral.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/mouse/alps.c

index 2221a00b25d33df18fc0eabc7acf434714a6c5d2..eafeae2793561bceada5b20fb38aa3b872054229 100644 (file)
@@ -109,8 +109,6 @@ static const struct alps_model_info alps_model_data[] = {
        { { 0x73, 0x02, 0x50 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_FOUR_BUTTONS },           /* Dell Vostro 1400 */
        { { 0x52, 0x01, 0x14 }, 0x00, ALPS_PROTO_V2, 0xff, 0xff,
                ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED },                            /* Toshiba Tecra A11-11L */
-       { { 0x73, 0x02, 0x64 }, 0x9b, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT },
-       { { 0x73, 0x02, 0x64 }, 0x9d, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT },
        { { 0x73, 0x02, 0x64 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 },
 };
 
@@ -1412,6 +1410,10 @@ error:
 
 static void alps_set_defaults(struct alps_data *priv)
 {
+       priv->byte0 = 0x8f;
+       priv->mask0 = 0x8f;
+       priv->flags = ALPS_DUALPOINT;
+
        switch (priv->proto_version) {
        case ALPS_PROTO_V1:
        case ALPS_PROTO_V2:
@@ -1491,8 +1493,15 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
            alps_exit_command_mode(psmouse))
                return -EIO;
 
-       if (alps_match_table(psmouse, priv, e7, ec) == 0)
+       if (alps_match_table(psmouse, priv, e7, ec) == 0) {
+               return 0;
+       } else if (ec[0] == 0x88 && ec[1] == 0x07 &&
+                  ec[2] >= 0x90 && ec[2] <= 0x9d) {
+               priv->proto_version = ALPS_PROTO_V3;
+               alps_set_defaults(priv);
+
                return 0;
+       }
 
        psmouse_info(psmouse,
                "Unknown ALPS touchpad: E7=%2.2x %2.2x %2.2x, EC=%2.2x %2.2x %2.2x\n",