25-akpm/drivers/input/mouse/psmouse-base.c |    3 ++-
 25-akpm/drivers/input/mouse/synaptics.c    |    7 +++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff -puN drivers/input/mouse/psmouse-base.c~p00001_synaptics-restore-on-close drivers/input/mouse/psmouse-base.c
--- 25/drivers/input/mouse/psmouse-base.c~p00001_synaptics-restore-on-close	Tue Jul 29 14:56:55 2003
+++ 25-akpm/drivers/input/mouse/psmouse-base.c	Tue Jul 29 14:56:55 2003
@@ -478,9 +478,10 @@ static void psmouse_cleanup(struct serio
 static void psmouse_disconnect(struct serio *serio)
 {
 	struct psmouse *psmouse = serio->private;
+	if (psmouse->type == PSMOUSE_SYNAPTICS)
+		synaptics_disconnect(psmouse);
 	input_unregister_device(&psmouse->dev);
 	serio_close(serio);
-	synaptics_disconnect(psmouse);
 	kfree(psmouse);
 }
 
diff -puN drivers/input/mouse/synaptics.c~p00001_synaptics-restore-on-close drivers/input/mouse/synaptics.c
--- 25/drivers/input/mouse/synaptics.c~p00001_synaptics-restore-on-close	Tue Jul 29 14:56:55 2003
+++ 25-akpm/drivers/input/mouse/synaptics.c	Tue Jul 29 14:56:55 2003
@@ -144,7 +144,7 @@ static int synaptics_enable_device(struc
 static void print_ident(struct synaptics_data *priv)
 {
 	printk(KERN_INFO "Synaptics Touchpad, model: %ld\n", SYN_ID_MODEL(priv->identity));
-	printk(KERN_INFO " Firware: %ld.%ld\n", SYN_ID_MAJOR(priv->identity),
+	printk(KERN_INFO " Firmware: %ld.%ld\n", SYN_ID_MAJOR(priv->identity),
 	       SYN_ID_MINOR(priv->identity));
 
 	if (SYN_MODEL_ROT180(priv->model_id))
@@ -228,7 +228,7 @@ int synaptics_init(struct psmouse *psmou
 	/*
 	 * The x/y limits are taken from the Synaptics TouchPad interfacing Guide,
 	 * which says that they should be valid regardless of the actual size of
-	 * the senser.
+	 * the sensor.
 	 */
 	set_bit(EV_ABS, psmouse->dev.evbit);
 	set_abs_params(&psmouse->dev, ABS_X, 1472, 5472, 0, 0);
@@ -259,6 +259,9 @@ void synaptics_disconnect(struct psmouse
 {
 	struct synaptics_data *priv = psmouse->private;
 
+	/* Restore touchpad to power on default state */
+	synaptics_set_mode(psmouse, 0);
+
 	kfree(priv);
 }
 

_