Commit 2b6f39e9 authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: psmouse - rearrange Focaltech init code

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: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarPali Rohár <pali.rohar@gmail.com>
Tested-by: default avatarMarcin Sochacki <msochacki+kernel@gmail.com>
Tested-by: default avatarTill <till2.schaefer@uni-dortmund.de>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent ad530771
...@@ -49,12 +49,6 @@ int focaltech_detect(struct psmouse *psmouse, bool set_properties) ...@@ -49,12 +49,6 @@ int focaltech_detect(struct psmouse *psmouse, bool set_properties)
return 0; 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 #ifdef CONFIG_MOUSE_PS2_FOCALTECH
/* /*
...@@ -300,6 +294,12 @@ static int focaltech_switch_protocol(struct psmouse *psmouse) ...@@ -300,6 +294,12 @@ static int focaltech_switch_protocol(struct psmouse *psmouse)
return 0; 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) static void focaltech_disconnect(struct psmouse *psmouse)
{ {
focaltech_reset(psmouse); focaltech_reset(psmouse);
...@@ -456,14 +456,4 @@ int focaltech_init(struct psmouse *psmouse) ...@@ -456,14 +456,4 @@ int focaltech_init(struct psmouse *psmouse)
kfree(priv); kfree(priv);
return error; return error;
} }
#else /* CONFIG_MOUSE_PS2_FOCALTECH */
int focaltech_init(struct psmouse *psmouse)
{
focaltech_reset(psmouse);
return 0;
}
#endif /* CONFIG_MOUSE_PS2_FOCALTECH */ #endif /* CONFIG_MOUSE_PS2_FOCALTECH */
...@@ -18,6 +18,14 @@ ...@@ -18,6 +18,14 @@
#define _FOCALTECH_H #define _FOCALTECH_H
int focaltech_detect(struct psmouse *psmouse, bool set_properties); int focaltech_detect(struct psmouse *psmouse, bool set_properties);
#ifdef CONFIG_MOUSE_PS2_FOCALTECH
int focaltech_init(struct psmouse *psmouse); int focaltech_init(struct psmouse *psmouse);
#else
static inline int focaltech_init(struct psmouse *psmouse)
{
return -ENOSYS;
}
#endif
#endif #endif
...@@ -750,19 +750,20 @@ static int psmouse_extensions(struct psmouse *psmouse, ...@@ -750,19 +750,20 @@ static int psmouse_extensions(struct psmouse *psmouse,
*/ */
if (psmouse_do_detect(focaltech_detect, psmouse, set_properties) == 0) { if (psmouse_do_detect(focaltech_detect, psmouse, set_properties) == 0) {
if (max_proto > PSMOUSE_IMEX) { if (max_proto > PSMOUSE_IMEX) {
if (!set_properties || focaltech_init(psmouse) == 0) { if (IS_ENABLED(CONFIG_MOUSE_PS2_FOCALTECH) &&
if (IS_ENABLED(CONFIG_MOUSE_PS2_FOCALTECH)) (!set_properties || focaltech_init(psmouse) == 0)) {
return PSMOUSE_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;
} }
} }
/*
* 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;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment