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
 
 /*
        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);
        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 */
 
 #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
 
         */
        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;
        }
 
        /*