<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"> 25-akpm/drivers/input/mouse/psmouse-base.c |   32 +++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+)

diff -puN drivers/input/mouse/psmouse-base.c~p00006_psmouse-suspend-resume drivers/input/mouse/psmouse-base.c
--- 25/drivers/input/mouse/psmouse-base.c~p00006_psmouse-suspend-resume	Tue Jul 29 14:57:05 2003
+++ 25-akpm/drivers/input/mouse/psmouse-base.c	Tue Jul 29 14:57:05 2003
@@ -17,6 +17,7 @@
 #include &lt;linux/input.h&gt;
 #include &lt;linux/serio.h&gt;
 #include &lt;linux/init.h&gt;
+#include &lt;linux/pm.h&gt;
 #include "psmouse.h"
 #include "synaptics.h"
 #include "logips2pp.h"
@@ -512,6 +513,30 @@ static void psmouse_disconnect(struct se
 }
 
 /*
+ * Reinitialize mouse hardware after software suspend.
+ */
+
+static int psmouse_pm_callback(struct pm_dev *dev, pm_request_t request, void *data)
+{
+	struct psmouse *psmouse = dev-&gt;data;
+	struct serio_dev *ser_dev = psmouse-&gt;serio-&gt;dev;
+
+	synaptics_disconnect(psmouse);
+
+	/* We need to reopen the serio port to reinitialize the i8042 controller */
+	serio_close(psmouse-&gt;serio);
+	serio_open(psmouse-&gt;serio, ser_dev);
+
+	/* Probe and re-initialize the mouse */
+	psmouse_probe(psmouse);
+	psmouse_initialize(psmouse);
+	synaptics_pt_init(psmouse);
+	psmouse_activate(psmouse);
+
+	return 0;
+}
+
+/*
  * psmouse_connect() is a callback from the serio module when
  * an unhandled serio port is found.
  */
@@ -519,6 +544,7 @@ static void psmouse_disconnect(struct se
 static void psmouse_connect(struct serio *serio, struct serio_dev *dev)
 {
 	struct psmouse *psmouse;
+	struct pm_dev *pmdev;
 	
 	if ((serio-&gt;type &amp; SERIO_TYPE) != SERIO_8042 &amp;&amp;
 	    (serio-&gt;type &amp; SERIO_TYPE) != SERIO_PS_PSTHRU)
@@ -551,6 +577,12 @@ static void psmouse_connect(struct serio
 		return;
 	}
 	
+	pmdev = pm_register(PM_SYS_DEV, PM_SYS_UNKNOWN, psmouse_pm_callback);
+	if (pmdev) {
+		psmouse-&gt;dev.pm_dev = pmdev;
+		pmdev-&gt;data = psmouse;
+	}
+
 	sprintf(psmouse-&gt;devname, "%s %s %s",
 		psmouse_protocols[psmouse-&gt;type], psmouse-&gt;vendor, psmouse-&gt;name);
 	sprintf(psmouse-&gt;phys, "%s/input0",

_
</pre></body></html>