]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Input: psmouse - rearrange Focaltech init code
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 28 Nov 2015 04:52:36 +0000 (20:52 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 17 Dec 2015 23:23:54 +0000 (15:23 -0800)
The fact that we were calling focaltech_init() even when Focaltech support
is disabled was confusing. Rearrange the code so that if support is
disabled we continue to fall through the rest of protocol probing code
until we get to full reset that Focaltech devices need to work properly.

Also, replace focaltech_init() with a stub now that it is only called when
protocol is enabled.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Pali Rohár <pali.rohar@gmail.com>
Tested-by: Marcin Sochacki <msochacki+kernel@gmail.com>
Tested-by: Till <till2.schaefer@uni-dortmund.de>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/mouse/focaltech.c
drivers/input/mouse/focaltech.h
drivers/input/mouse/psmouse-base.c

index 4d5576de81be68efa489d8ca7df302a84790e48a..c8c6a8cc329d711cafe11a532011c6c7b20bc3d3 100644 (file)
@@ -49,12 +49,6 @@ int focaltech_detect(struct psmouse *psmouse, bool set_properties)
        return 0;
 }
 
-static void focaltech_reset(struct psmouse *psmouse)
-{
-       ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
-       psmouse_reset(psmouse);
-}
-
 #ifdef CONFIG_MOUSE_PS2_FOCALTECH
 
 /*
@@ -300,6 +294,12 @@ static int focaltech_switch_protocol(struct psmouse *psmouse)
        return 0;
 }
 
+static void focaltech_reset(struct psmouse *psmouse)
+{
+       ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
+       psmouse_reset(psmouse);
+}
+
 static void focaltech_disconnect(struct psmouse *psmouse)
 {
        focaltech_reset(psmouse);
@@ -456,14 +456,4 @@ int focaltech_init(struct psmouse *psmouse)
        kfree(priv);
        return error;
 }
-
-#else /* CONFIG_MOUSE_PS2_FOCALTECH */
-
-int focaltech_init(struct psmouse *psmouse)
-{
-       focaltech_reset(psmouse);
-
-       return 0;
-}
-
 #endif /* CONFIG_MOUSE_PS2_FOCALTECH */
index ca61ebff373e99a194011c1d8554d8ffb0766981..783b28e8e10bec5b7013ae4f964afe6583e09ce2 100644 (file)
 #define _FOCALTECH_H
 
 int focaltech_detect(struct psmouse *psmouse, bool set_properties);
+
+#ifdef CONFIG_MOUSE_PS2_FOCALTECH
 int focaltech_init(struct psmouse *psmouse);
+#else
+static inline int focaltech_init(struct psmouse *psmouse)
+{
+       return -ENOSYS;
+}
+#endif
 
 #endif
index 525de2e7c08b1205c6e4b4de204c1cc78189e61c..c2bd8665e9f220519a91662488634a02cc69858b 100644 (file)
@@ -750,19 +750,20 @@ static int psmouse_extensions(struct psmouse *psmouse,
         */
        if (psmouse_do_detect(focaltech_detect, psmouse, set_properties) == 0) {
                if (max_proto > PSMOUSE_IMEX) {
-                       if (!set_properties || focaltech_init(psmouse) == 0) {
-                               if (IS_ENABLED(CONFIG_MOUSE_PS2_FOCALTECH))
-                                       return PSMOUSE_FOCALTECH;
-                               /*
-                                * Note that we need to also restrict
-                                * psmouse_max_proto so that psmouse_initialize()
-                                * does not try to reset rate and resolution,
-                                * because even that upsets the device.
-                                */
-                               psmouse_max_proto = PSMOUSE_PS2;
-                               return PSMOUSE_PS2;
+                       if (IS_ENABLED(CONFIG_MOUSE_PS2_FOCALTECH) &&
+                           (!set_properties || focaltech_init(psmouse) == 0)) {
+                               return PSMOUSE_FOCALTECH;
                        }
                }
+               /*
+                * Restrict psmouse_max_proto so that psmouse_initialize()
+                * does not try to reset rate and resolution, because even
+                * that upsets the device.
+                * This also causes us to basically fall through to basic
+                * protocol detection, where we fully reset the mouse,
+                * and set it up as bare PS/2 protocol device.
+                */
+               psmouse_max_proto = max_proto = PSMOUSE_PS2;
        }
 
        /*