mirror of https://gitee.com/openkylin/linux.git
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:
parent
8a03d9a498
commit
a1cec06177
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -68,6 +68,7 @@ struct psmouse {
|
|||
|
||||
int (*reconnect)(struct psmouse *psmouse);
|
||||
void (*disconnect)(struct psmouse *psmouse);
|
||||
void (*cleanup)(struct psmouse *psmouse);
|
||||
int (*poll)(struct psmouse *psmouse);
|
||||
|
||||
void (*pt_activate)(struct psmouse *psmouse);
|
||||
|
|
|
@ -652,6 +652,7 @@ int synaptics_init(struct psmouse *psmouse)
|
|||
psmouse->set_rate = synaptics_set_rate;
|
||||
psmouse->disconnect = synaptics_disconnect;
|
||||
psmouse->reconnect = synaptics_reconnect;
|
||||
psmouse->cleanup = synaptics_reset;
|
||||
psmouse->pktsize = 6;
|
||||
/* Synaptics can usually stay in sync without extra help */
|
||||
psmouse->resync_time = 0;
|
||||
|
|
Loading…
Reference in New Issue