|
@@ -1394,6 +1394,7 @@ static int psmouse_reconnect(struct serio *serio)
|
|
|
struct psmouse *psmouse = serio_get_drvdata(serio);
|
|
|
struct psmouse *parent = NULL;
|
|
|
struct serio_driver *drv = serio->drv;
|
|
|
+ unsigned char type;
|
|
|
int rc = -1;
|
|
|
|
|
|
if (!drv || !psmouse) {
|
|
@@ -1413,10 +1414,15 @@ static int psmouse_reconnect(struct serio *serio)
|
|
|
if (psmouse->reconnect) {
|
|
|
if (psmouse->reconnect(psmouse))
|
|
|
goto out;
|
|
|
- } else if (psmouse_probe(psmouse) < 0 ||
|
|
|
- psmouse->type != psmouse_extensions(psmouse,
|
|
|
- psmouse_max_proto, false)) {
|
|
|
- goto out;
|
|
|
+ } else {
|
|
|
+ psmouse_reset(psmouse);
|
|
|
+
|
|
|
+ if (psmouse_probe(psmouse) < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ type = psmouse_extensions(psmouse, psmouse_max_proto, false);
|
|
|
+ if (psmouse->type != type)
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
/* ok, the device type (and capabilities) match the old one,
|