Now when alps_identify() does not need do trackstick detection it is safe to
move code init hw_init functions.

This patch also fix trackstick detection in function alps_hw_init_v3() which
remove ALPS_DUALPOINT flag when trackstick is not detected.

Signed-off-by: Pali Rohár <pali.ro...@gmail.com>
---
 drivers/input/mouse/alps.c |   30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 9ffa98d..cbfdcfc 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -1732,6 +1732,7 @@ error:
 
 static int alps_hw_init_v3(struct psmouse *psmouse)
 {
+       struct alps_data *priv = psmouse->private;
        struct ps2dev *ps2dev = &psmouse->ps2dev;
        int reg_val;
        unsigned char param[4];
@@ -1740,9 +1741,15 @@ static int alps_hw_init_v3(struct psmouse *psmouse)
        if (reg_val == -EIO)
                goto error;
 
-       if (reg_val == 0 &&
-           alps_setup_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE) == -EIO)
-               goto error;
+       if (reg_val == 0) {
+               reg_val = alps_setup_trackstick_v3(psmouse,
+                                                  ALPS_REG_BASE_PINNACLE);
+               if (reg_val == -EIO)
+                       goto error;
+       }
+
+       if (reg_val == -ENODEV)
+               priv->flags &= ~ALPS_DUALPOINT;
 
        if (alps_enter_command_mode(psmouse) ||
            alps_absolute_mode_v3(psmouse)) {
@@ -1849,15 +1856,20 @@ static int alps_hw_init_rushmore_v3(struct psmouse 
*psmouse)
        struct ps2dev *ps2dev = &psmouse->ps2dev;
        int reg_val, ret = -1;
 
-       if (priv->flags & ALPS_DUALPOINT) {
+       reg_val = alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_RUSHMORE);
+       if (reg_val == -EIO)
+               goto error;
+
+       if (reg_val == 0) {
                reg_val = alps_setup_trackstick_v3(psmouse,
                                                   ALPS_REG_BASE_RUSHMORE);
                if (reg_val == -EIO)
                        goto error;
-               if (reg_val == -ENODEV)
-                       priv->flags &= ~ALPS_DUALPOINT;
        }
 
+       if (reg_val == -ENODEV)
+               priv->flags &= ~ALPS_DUALPOINT;
+
        if (alps_enter_command_mode(psmouse) ||
            alps_command_mode_read_reg(psmouse, 0xc2d9) == -1 ||
            alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00))
@@ -2231,12 +2243,6 @@ static int alps_identify(struct psmouse *psmouse, struct 
alps_data *priv)
                priv->y_bits = 12;
                priv->flags |= ALPS_IS_RUSHMORE;
 
-               /* hack to make addr_command, nibble_command available */
-               psmouse->private = priv;
-
-               if (alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_RUSHMORE))
-                       priv->flags &= ~ALPS_DUALPOINT;
-
                return 0;
        } else if (ec[0] == 0x88 && ec[1] == 0x07 &&
                   ec[2] >= 0x90 && ec[2] <= 0x9d) {
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to