--- /dev/null
+commit b6ff79c07806789a12ca3c5260c5d0b12e212eef
+Author: Lars-Peter Clausen <lars@metafoo.de>
+Date: Sat Apr 25 18:00:09 2009 +0200
+
+ Close tslib device when the module is unloaded. Closes a memory leak and allows
+ the device to be reopended when the xserver is restarted.
+
+diff --git a/src/tslib.c b/src/tslib.c
+index 50596b7..e7a2766 100644
+--- a/src/tslib.c
++++ b/src/tslib.c
+@@ -286,10 +286,12 @@ xf86TslibControlProc(DeviceIntPtr device, int what)
+ static void
+ xf86TslibUninit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
+ {
++ struct ts_priv *priv = (struct ts_priv *)(pInfo->private);
+ #ifdef DEBUG
+ ErrorF("%s\n", __FUNCTION__);
+ #endif
+ xf86TslibControlProc(pInfo->dev, DEVICE_OFF);
++ ts_close(priv->ts);
+ xfree(pInfo->private);
+ xf86DeleteInput(pInfo, 0);
+ }