Input: psmouse - properly reset mouse on shutdown/suspend
Some people report that they need psmouse module unloaded for suspend to ram/disk to work properly. Let's make port cleanup behave the same way as driver unload. This fixes "bad state" roblem on various HP laptops, such as nx7400. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
@@ -987,8 +987,36 @@ static void psmouse_resync(struct work_struct *work)
|
||||
static void psmouse_cleanup(struct serio *serio)
|
||||
{
|
||||
struct psmouse *psmouse = serio_get_drvdata(serio);
|
||||
struct psmouse *parent = NULL;
|
||||
|
||||
mutex_lock(&psmouse_mutex);
|
||||
|
||||
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
|
||||
parent = serio_get_drvdata(serio->parent);
|
||||
psmouse_deactivate(parent);
|
||||
}
|
||||
|
||||
psmouse_deactivate(psmouse);
|
||||
|
||||
if (psmouse->cleanup)
|
||||
psmouse->cleanup(psmouse);
|
||||
|
||||
psmouse_reset(psmouse);
|
||||
|
||||
/*
|
||||
* Some boxes, such as HP nx7400, get terribly confused if mouse
|
||||
* is not fully enabled before suspending/shutting down.
|
||||
*/
|
||||
ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
|
||||
|
||||
if (parent) {
|
||||
if (parent->pt_deactivate)
|
||||
parent->pt_deactivate(parent);
|
||||
|
||||
psmouse_activate(parent);
|
||||
}
|
||||
|
||||
mutex_unlock(&psmouse_mutex);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user