summaryrefslogtreecommitdiff
path: root/packages/xorg-xserver/xserver-kdrive
diff options
context:
space:
mode:
Diffstat (limited to 'packages/xorg-xserver/xserver-kdrive')
-rw-r--r--packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch18
-rw-r--r--packages/xorg-xserver/xserver-kdrive/devfs.patch47
-rw-r--r--packages/xorg-xserver/xserver-kdrive/enable-epson.patch16
-rw-r--r--packages/xorg-xserver/xserver-kdrive/enable-tslib.patch23
-rw-r--r--packages/xorg-xserver/xserver-kdrive/faster-rotated.patch241
-rw-r--r--packages/xorg-xserver/xserver-kdrive/fbdev-evdev.patch19
-rw-r--r--packages/xorg-xserver/xserver-kdrive/fix_default_mode.patch26
-rw-r--r--packages/xorg-xserver/xserver-kdrive/optional-xkb.patch32
-rw-r--r--packages/xorg-xserver/xserver-kdrive/tslib-default-device.patch15
-rw-r--r--packages/xorg-xserver/xserver-kdrive/w100-autofoo.patch54
-rw-r--r--packages/xorg-xserver/xserver-kdrive/w100-new-input-world-order.patch28
-rw-r--r--packages/xorg-xserver/xserver-kdrive/w100.patch55
-rw-r--r--packages/xorg-xserver/xserver-kdrive/xcalibrate-new-input-world-order.patch159
-rw-r--r--packages/xorg-xserver/xserver-kdrive/xcalibrate_coords.patch122
14 files changed, 453 insertions, 402 deletions
diff --git a/packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch b/packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch
deleted file mode 100644
index f919b48f0e..0000000000
--- a/packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Index: git/composite/compext.c
-===================================================================
---- git.orig/composite/compext.c 2007-03-28 16:25:12.000000000 +0200
-+++ git/composite/compext.c 2007-03-28 16:25:15.000000000 +0200
-@@ -696,11 +696,13 @@
- if (GetPictureScreenIfSet(pScreen) == NULL)
- return;
- }
-+#ifdef PANORAMIX
- /* Xinerama's rewriting of window drawing before Composite gets to it
- * breaks Composite.
- */
- if (!noPanoramiXExtension)
- return;
-+#endif
-
- CompositeClientWindowType = CreateNewResourceType (FreeCompositeClientWindow);
- if (!CompositeClientWindowType)
diff --git a/packages/xorg-xserver/xserver-kdrive/devfs.patch b/packages/xorg-xserver/xserver-kdrive/devfs.patch
deleted file mode 100644
index a6238126c0..0000000000
--- a/packages/xorg-xserver/xserver-kdrive/devfs.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- xserver/hw/kdrive/linux/linux.c~devfs
-+++ xserver/hw/kdrive/linux/linux.c
-@@ -82,10 +82,10 @@
- vtno = kdVirtualTerminal;
- else
- {
-- if ((fd = open("/dev/tty0",O_WRONLY,0)) < 0)
-+ if ((fd = open("/dev/vc/0",O_WRONLY,0)) < 0)
- {
- FatalError(
-- "LinuxInit: Cannot open /dev/tty0 (%s)\n",
-+ "LinuxInit: Cannot open /dev/tty/0 (%s)\n",
- strerror(errno));
- }
- if ((ioctl(fd, VT_OPENQRY, &vtno) < 0) ||
-@@ -96,7 +96,7 @@
- }
- close(fd);
-
-- sprintf(vtname,"/dev/tty%d",vtno); /* /dev/tty1-64 */
-+ sprintf(vtname,"/dev/vc/%d",vtno); /* /dev/tty1-64 */
-
- if ((LinuxConsoleFd = open(vtname, O_RDWR|O_NDELAY, 0)) < 0)
- {
-@@ -113,7 +113,7 @@
- *
- * Why is this needed?
- */
-- LinuxCheckChown ("/dev/tty0");
-+ LinuxCheckChown ("/dev/vc/0");
- /*
- * Linux doesn't switch to an active vt after the last close of a vt,
- * so we do this ourselves by remembering which is active now.
-@@ -453,7 +453,7 @@
- activeVT = -1;
- }
- close(LinuxConsoleFd); /* make the vt-manager happy */
-- fd = open ("/dev/tty0", O_RDWR|O_NDELAY, 0);
-+ fd = open ("/dev/vc/0", O_RDWR|O_NDELAY, 0);
- if (fd >= 0)
- {
- memset (&vts, '\0', sizeof (vts)); /* valgrind */
diff --git a/packages/xorg-xserver/xserver-kdrive/enable-epson.patch b/packages/xorg-xserver/xserver-kdrive/enable-epson.patch
index 63b13a4511..0fffd71dce 100644
--- a/packages/xorg-xserver/xserver-kdrive/enable-epson.patch
+++ b/packages/xorg-xserver/xserver-kdrive/enable-epson.patch
@@ -1,11 +1,17 @@
---- /tmp/Makefile.am 2006-08-30 09:51:21.000000000 +0200
-+++ git/hw/kdrive/Makefile.am 2006-08-30 09:51:44.425780000 +0200
-@@ -4,7 +4,7 @@
+Index: xorg-server-1.4/hw/kdrive/Makefile.am
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/Makefile.am 2007-08-30 01:48:57.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/Makefile.am 2007-09-06 23:24:29.000000000 +0200
+@@ -1,10 +1,10 @@
+ if KDRIVEVESA
+-VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga nvidia pm2 r128 \
++VESA_SUBDIRS = vesa ati chips i810 mach64 mga nvidia pm2 r128 \
+ smi via
endif
- if KDRIVEFBDEV
+ if BUILD_KDRIVEFBDEVLIB
-FBDEV_SUBDIRS = fbdev
+FBDEV_SUBDIRS = fbdev epson
endif
- if XSDLSERVER
+ if XFAKESERVER
diff --git a/packages/xorg-xserver/xserver-kdrive/enable-tslib.patch b/packages/xorg-xserver/xserver-kdrive/enable-tslib.patch
deleted file mode 100644
index e488657b74..0000000000
--- a/packages/xorg-xserver/xserver-kdrive/enable-tslib.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- git/configure.ac.orig 2006-05-22 22:40:00.000000000 +0200
-+++ git/configure.ac 2006-06-10 15:10:14.000000000 +0200
-@@ -1438,6 +1446,10 @@
- fi
-
-- # tslib...
-+ AC_CHECK_HEADERS([tslib.h])
-+ if test "$ac_cv_header_tslib_h" = yes; then
-+ AC_DEFINE(TSLIB, 1, [Build kdrive with tslib support])
-+ AC_DEFINE(TOUCHSCREEN, 1, [Build kdrive with touchscreen support])
-+ fi
-
- # damage shadow extension glx (NOTYET) fb mi
- KDRIVE_INC='-I$(top_srcdir)/hw/kdrive/src'
-@@ -1467,7 +1479,7 @@
- AC_SUBST(KDRIVE_CFLAGS)
- AC_SUBST(KDRIVE_PURE_LIBS)
- AC_SUBST(KDRIVE_LIBS)
--AM_CONDITIONAL(TSLIB, false)
-+AM_CONDITIONAL(TSLIB, [test x"$ac_cv_header_tslib_h" = xyes])
- AM_CONDITIONAL(H3600_TS, false)
- AM_CONDITIONAL(KDRIVEVESA, [test x"$ac_cv_header_sys_vm86_h" = xyes])
- AM_CONDITIONAL(KDRIVEFBDEV, [test x"$ac_cv_header_linux_fb_h" = xyes])
diff --git a/packages/xorg-xserver/xserver-kdrive/faster-rotated.patch b/packages/xorg-xserver/xserver-kdrive/faster-rotated.patch
deleted file mode 100644
index eaf7ddec36..0000000000
--- a/packages/xorg-xserver/xserver-kdrive/faster-rotated.patch
+++ /dev/null
@@ -1,241 +0,0 @@
-Index: xserver/miext/shadow/shrotate.c
-===================================================================
-RCS file: /scratch/openbsd/cvs/XF4/xc/programs/Xserver/miext/shadow/shrotate.c,v
-retrieving revision 1.2
-diff -u -r1.2 shrotate.c
---- xserver/miext/shadow/shrotate.c 3 Nov 2004 00:09:54 -0000 1.2
-+++ xserver/miext/shadow/shrotate.c 20 Sep 2005 23:07:58 -0000
-@@ -45,6 +45,106 @@
- #define TOP_TO_BOTTOM 2
- #define BOTTOM_TO_TOP -2
-
-+
-+static void
-+shadowUpdateRotatePackedSubRectangle(shadowBufPtr pBuf,
-+ FbBits *shaLine, int shaFirstShift,
-+ int shaStepOverX, int shaStepOverY,
-+ int shaStepDownX, int shaStepDownY,
-+ int shaBpp, FbBits shaMask,
-+ ScreenPtr pScreen,
-+ int scr_x1, int scr_y,
-+ int scr_h, int scr_w,
-+ int pixelsPerBits)
-+{
-+ FbBits *sha;
-+ int shaShift;
-+ int scr_x;
-+ int w;
-+
-+ /*
-+ * Copy the bits, always write across the physical frame buffer
-+ * to take advantage of write combining.
-+ */
-+ while (scr_h--)
-+ {
-+ int p;
-+ FbBits bits;
-+ FbBits *win;
-+ int i;
-+ CARD32 winSize;
-+
-+ sha = shaLine;
-+ shaShift = shaFirstShift;
-+ w = scr_w;
-+ scr_x = scr_x1 * shaBpp >> FB_SHIFT;
-+
-+ while (w)
-+ {
-+ /*
-+ * Map some of this line
-+ */
-+ win = (FbBits *) (*pBuf->window) (pScreen,
-+ scr_y,
-+ scr_x << 2,
-+ SHADOW_WINDOW_WRITE,
-+ &winSize,
-+ pBuf->closure);
-+ i = (winSize >> 2);
-+ if (i > w)
-+ i = w;
-+ w -= i;
-+ scr_x += i;
-+ /*
-+ * Copy the portion of the line mapped
-+ */
-+ while (i--)
-+ {
-+ bits = 0;
-+ p = pixelsPerBits;
-+ /*
-+ * Build one word of output from multiple inputs
-+ */
-+ while (p--)
-+ {
-+ bits = FbScrLeft(bits, shaBpp);
-+ bits |= FbScrRight (*sha, shaShift) & shaMask;
-+
-+ shaShift -= shaStepOverX;
-+ if (shaShift >= FB_UNIT)
-+ {
-+ shaShift -= FB_UNIT;
-+ sha--;
-+ }
-+ else if (shaShift < 0)
-+ {
-+ shaShift += FB_UNIT;
-+ sha++;
-+ }
-+ sha += shaStepOverY;
-+ }
-+ *win++ = bits;
-+ }
-+ }
-+ scr_y++;
-+ shaFirstShift -= shaStepDownX;
-+ if (shaFirstShift >= FB_UNIT)
-+ {
-+ shaFirstShift -= FB_UNIT;
-+ shaLine--;
-+ }
-+ else if (shaFirstShift < 0)
-+ {
-+ shaFirstShift += FB_UNIT;
-+ shaLine++;
-+ }
-+ shaLine += shaStepDownY;
-+ }
-+}
-+
-+#define BLOCKSIZE_HEIGHT 32
-+#define BLOCKSIZE_WIDTH 32
-+
- void
- shadowUpdateRotatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf)
-@@ -61,7 +161,6 @@
- int sha_x1 = 0, sha_y1 = 0;
- int scr_x1 = 0, scr_x2 = 0, scr_y1 = 0, scr_y2 = 0, scr_w, scr_h;
- int scr_x, scr_y;
-- int w;
- int pixelsPerBits;
- int pixelsMask;
- FbStride shaStepOverY = 0, shaStepDownY = 0;
-@@ -221,86 +320,46 @@
- ((sha_x1 * shaBpp) >> FB_SHIFT));
-
- /*
-- * Copy the bits, always write across the physical frame buffer
-- * to take advantage of write combining.
-+ * Copy in blocks of size BLOCKSIZE_WIDTH x BLOCKSIZE_HEIGHT
-+ * to reduce the number of cache misses when rotating 90 or
-+ * 270 degrees.
- */
-- while (scr_h--)
-+ for (scr_y = scr_y1; scr_y < scr_y2; scr_y += BLOCKSIZE_HEIGHT)
- {
-- int p;
-- FbBits bits;
-- FbBits *win;
-- int i;
-- CARD32 winSize;
--
- sha = shaLine;
- shaShift = shaFirstShift;
-- w = scr_w;
-- scr_x = scr_x1 * shaBpp >> FB_SHIFT;
-
-- while (w)
-+ for (scr_x = scr_x1; scr_x < scr_x2; scr_x += BLOCKSIZE_WIDTH)
- {
-- /*
-- * Map some of this line
-- */
-- win = (FbBits *) (*pBuf->window) (pScreen,
-- scr_y,
-- scr_x << 2,
-- SHADOW_WINDOW_WRITE,
-- &winSize,
-- pBuf->closure);
-- i = (winSize >> 2);
-- if (i > w)
-- i = w;
-- w -= i;
-- scr_x += i;
-- /*
-- * Copy the portion of the line mapped
-- */
-- while (i--)
-- {
-- bits = 0;
-- p = pixelsPerBits;
-- /*
-- * Build one word of output from multiple inputs
-- *
-- * Note that for 90/270 rotations, this will walk
-- * down the shadow hitting each scanline once.
-- * This is probably not very efficient.
-- */
-- while (p--)
-- {
-- bits = FbScrLeft(bits, shaBpp);
-- bits |= FbScrRight (*sha, shaShift) & shaMask;
-+ int h = BLOCKSIZE_HEIGHT;
-+ int w = BLOCKSIZE_WIDTH;
-
-- shaShift -= shaStepOverX;
-- if (shaShift >= FB_UNIT)
-- {
-- shaShift -= FB_UNIT;
-- sha--;
-- }
-- else if (shaShift < 0)
-- {
-- shaShift += FB_UNIT;
-- sha++;
-- }
-- sha += shaStepOverY;
-- }
-- *win++ = bits;
-- }
-- }
-- scr_y++;
-- shaFirstShift -= shaStepDownX;
-- if (shaFirstShift >= FB_UNIT)
-- {
-- shaFirstShift -= FB_UNIT;
-- shaLine--;
-- }
-- else if (shaFirstShift < 0)
-- {
-- shaFirstShift += FB_UNIT;
-- shaLine++;
-+ if (scr_y + h > scr_y2)
-+ h = scr_y2 - scr_y;
-+ if (scr_x + w > scr_x2)
-+ w = scr_x2 - scr_x;
-+ w = (w * shaBpp) >> FB_SHIFT;
-+
-+ shadowUpdateRotatePackedSubRectangle
-+ (pBuf,
-+ sha, shaShift,
-+ shaStepOverX, shaStepOverY,
-+ shaStepDownX, shaStepDownY,
-+ shaBpp, shaMask,
-+ pScreen,
-+ scr_x, scr_y,
-+ h, w,
-+ pixelsPerBits);
-+
-+ shaShift -= BLOCKSIZE_WIDTH * shaStepOverX;
-+ sha += BLOCKSIZE_WIDTH * shaStepOverY;
-+ sha -= (shaShift >> FB_SHIFT);
-+ shaShift &= FB_MASK;
- }
-- shaLine += shaStepDownY;
-+ shaFirstShift -= BLOCKSIZE_HEIGHT * shaStepDownX;
-+ shaLine += BLOCKSIZE_HEIGHT * shaStepDownY;
-+ shaLine -= (shaFirstShift >> FB_SHIFT);
-+ shaFirstShift &= FB_MASK;
- }
- }
- }
diff --git a/packages/xorg-xserver/xserver-kdrive/fbdev-evdev.patch b/packages/xorg-xserver/xserver-kdrive/fbdev-evdev.patch
new file mode 100644
index 0000000000..5f9b21b627
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/fbdev-evdev.patch
@@ -0,0 +1,19 @@
+Index: xorg-server-1.4/hw/kdrive/fbdev/fbinit.c
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/fbdev/fbinit.c 2007-09-08 21:27:44.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/fbdev/fbinit.c 2007-09-08 21:28:55.000000000 +0200
+@@ -46,11 +46,13 @@
+
+ KdAddKeyboardDriver (&LinuxKeyboardDriver);
+ KdAddPointerDriver (&LinuxMouseDriver);
++ KdAddKeyboardDriver (&LinuxEvdevKeyboardDriver);
++ KdAddPointerDriver (&LinuxEvdevMouseDriver);
+ #ifdef TSLIB
+ KdAddPointerDriver (&TsDriver);
+ #endif
+
+- ki = KdParseKeyboard ("keybd");
++ ki = KdParseKeyboard ("keyboard");
+ KdAddKeyboard(ki);
+
+ KdInitInput ();
diff --git a/packages/xorg-xserver/xserver-kdrive/fix_default_mode.patch b/packages/xorg-xserver/xserver-kdrive/fix_default_mode.patch
new file mode 100644
index 0000000000..edc5146302
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/fix_default_mode.patch
@@ -0,0 +1,26 @@
+---
+ hw/kdrive/src/kmode.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: xorg-server-1.3.0.0/hw/kdrive/src/kmode.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kmode.c 2007-05-16 10:30:29.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-05-16 10:31:08.000000000 +0100
+@@ -106,6 +106,8 @@ const KdMonitorTiming kdMonitorTimings[
+ 16, 120, 176, KdSyncNegative, /* 37.861 */
+ 1, 20, 24, KdSyncNegative, /* 72.809 */
+ },
++ /* DEFAULT */
++#define MONITOR_TIMING_DEFAULT 13
+ { 640, 480, 60, 25175, /* VESA */
+ 16, 48, 160, KdSyncNegative, /* 31.469 */
+ 10, 33, 45, KdSyncNegative, /* 59.940 */
+@@ -127,8 +129,6 @@ const KdMonitorTiming kdMonitorTimings[
+ 16, 160, 256, KdSyncPositive, /* 46.875 */
+ 1, 21, 25, KdSyncPositive, /* 75.000 */
+ },
+- /* DEFAULT */
+-#define MONITOR_TIMING_DEFAULT 9
+ { 800, 600, 72, 50000, /* VESA */
+ 56, 64, 240, KdSyncPositive, /* 48.077 */
+ 37, 23, 66, KdSyncPositive, /* 72.188 */
diff --git a/packages/xorg-xserver/xserver-kdrive/optional-xkb.patch b/packages/xorg-xserver/xserver-kdrive/optional-xkb.patch
index d9ef51c5ba..22d8c94c78 100644
--- a/packages/xorg-xserver/xserver-kdrive/optional-xkb.patch
+++ b/packages/xorg-xserver/xserver-kdrive/optional-xkb.patch
@@ -1,7 +1,9 @@
---- git/Makefile.am.orig 2006-06-09 16:01:51.000000000 +0200
-+++ git/Makefile.am 2006-06-09 16:02:59.000000000 +0200
-@@ -35,6 +35,10 @@
- XINPUT_DIR=Xi
+Index: xorg-server-1.4/Makefile.am
+===================================================================
+--- xorg-server-1.4.orig/Makefile.am 2007-08-23 21:04:52.000000000 +0200
++++ xorg-server-1.4/Makefile.am 2007-09-06 23:19:59.000000000 +0200
+@@ -26,6 +26,10 @@
+ GLX_DIR=GL
endif
+if XKB
@@ -11,26 +13,28 @@
if DBE
DBE_DIR=dbe
endif
-@@ -51,7 +55,7 @@
+@@ -42,7 +46,7 @@
randr \
render \
- $(XINPUT_DIR) \
+ Xi \
- xkb \
+ $(XKB_DIR) \
$(DBE_DIR) \
$(MFB_DIR) \
$(AFB_DIR) \
---- git/configure.ac.orig 2006-05-22 22:40:00.000000000 +0200
-+++ git/configure.ac 2006-06-10 15:10:14.000000000 +0200
-@@ -418,6 +418,7 @@
- AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--disable-xf86bigfont], [Build XF86 Big Font extension (default: enabled)]), [XF86BIGFONT=$enableval], [XF86BIGFONT=yes])
- AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMS=$enableval], [DPMSExtension=yes])
- AC_ARG_ENABLE(xinput, AS_HELP_STRING([--disable-xinput], [Build XInput Extension (default: enabled)]), [XINPUT=$enableval], [XINPUT=yes])
+Index: xorg-server-1.4/configure.ac
+===================================================================
+--- xorg-server-1.4.orig/configure.ac 2007-09-06 07:59:00.000000000 +0200
++++ xorg-server-1.4/configure.ac 2007-09-06 23:19:19.000000000 +0200
+@@ -514,6 +514,7 @@
+ AC_ARG_ENABLE(config-dbus, AS_HELP_STRING([--enable-config-dbus], [Build D-BUS API support (default: no)]), [CONFIG_DBUS_API=$enableval], [CONFIG_DBUS_API=no])
+ AC_ARG_ENABLE(config-hal, AS_HELP_STRING([--disable-config-hal], [Build HAL support (default: auto)]), [CONFIG_HAL=$enableval], [CONFIG_HAL=auto])
+ AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes])
+AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Build XKB (default: enabled)]), [XKB=$enableval], [XKB=yes])
dnl DDXes.
AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
-@@ -739,12 +740,15 @@
+@@ -889,12 +890,15 @@
AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
@@ -51,4 +55,4 @@
+fi
AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
- [Do not have `strcasecmp'.]))
+ [Do not have 'strcasecmp'.]))
diff --git a/packages/xorg-xserver/xserver-kdrive/tslib-default-device.patch b/packages/xorg-xserver/xserver-kdrive/tslib-default-device.patch
new file mode 100644
index 0000000000..c1bc49f58e
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/tslib-default-device.patch
@@ -0,0 +1,15 @@
+Index: xorg-server-1.4/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/linux/tslib.c 2007-09-08 19:58:08.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/linux/tslib.c 2007-09-08 19:58:09.000000000 +0200
+@@ -121,6 +121,10 @@
+
+ private->raw_event_hook = NULL;
+ private->raw_event_closure = NULL;
++ if (!pi->path) {
++ pi->path = "/dev/input/touchscreen0";
++ ErrorF("[tslib/TslibEnable] no device path given, trying %s\n", pi->path);
++ }
+ private->tsDev = ts_open(pi->path, 0);
+ private->fd = ts_fd(private->tsDev);
+ if (!private->tsDev || ts_config(private->tsDev) || private->fd < 0) {
diff --git a/packages/xorg-xserver/xserver-kdrive/w100-autofoo.patch b/packages/xorg-xserver/xserver-kdrive/w100-autofoo.patch
new file mode 100644
index 0000000000..b53e327dae
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/w100-autofoo.patch
@@ -0,0 +1,54 @@
+Index: git/hw/kdrive/Makefile.am
+===================================================================
+--- git.orig/hw/kdrive/Makefile.am 2006-09-02 12:12:13.000000000 +0200
++++ git/hw/kdrive/Makefile.am 2006-09-02 12:12:14.000000000 +0200
+@@ -7,6 +7,10 @@
+ FBDEV_SUBDIRS = fbdev epson
+ endif
+
++if KDRIVEW100
++W100_SUBDIRS = w100
++endif
++
+ if XSDLSERVER
+ XSDL_SUBDIRS = sdl
+ endif
+@@ -20,6 +24,7 @@
+ linux \
+ $(XSDL_SUBDIRS) \
+ $(FBDEV_SUBDIRS) \
++ $(W100_SUBDIRS) \
+ $(VESA_SUBDIRS) \
+ $(XEPHYR_SUBDIRS) \
+ fake
+Index: git/configure.ac
+===================================================================
+--- git.orig/configure.ac 2006-09-02 12:12:14.000000000 +0200
++++ git/configure.ac 2006-09-02 12:12:14.000000000 +0200
+@@ -442,6 +442,7 @@
+ AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
+ AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
+ AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
++AC_ARG_ENABLE(w100, AS_HELP_STRING([--enable-w100], [Build the kdrive Xw100 server (default: no)]), [KDRIVEW100=$enableval], [KDRIVEW100=no])
+ dnl xprint
+ AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
+ AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto)
+@@ -1519,6 +1520,10 @@
+ AC_SUBST([XSDL_LIBS])
+ AC_SUBST([XSDL_INCS])
+
++AM_CONDITIONAL(KDRIVEW100, [test "x$KDRIVEW100" = xyes])
++if test "x$KDRIVEW100" = xyes; then
++ AC_DEFINE(KDRIVEW100, 1, [Build Xw100 server])
++fi
+
+ dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
+ AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
+@@ -1753,6 +1758,7 @@
+ hw/kdrive/epson/Makefile
+ hw/kdrive/fake/Makefile
+ hw/kdrive/fbdev/Makefile
++hw/kdrive/w100/Makefile
+ hw/kdrive/i810/Makefile
+ hw/kdrive/linux/Makefile
+ hw/kdrive/mach64/Makefile
diff --git a/packages/xorg-xserver/xserver-kdrive/w100-new-input-world-order.patch b/packages/xorg-xserver/xserver-kdrive/w100-new-input-world-order.patch
new file mode 100644
index 0000000000..239ae0bb67
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/w100-new-input-world-order.patch
@@ -0,0 +1,28 @@
+Index: xorg-server-1.4/hw/kdrive/w100/ati_stub.c
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/w100/ati_stub.c 2007-09-08 21:40:26.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/w100/ati_stub.c 2007-09-08 22:04:27.000000000 +0200
+@@ -74,10 +74,20 @@
+ void
+ InitInput(int argc, char **argv)
+ {
+- KdInitInput(&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+-#ifdef TOUCHSCREEN
+- KdAddMouseDriver(&TsFuncs);
++ KdKeyboardInfo *ki;
++
++ KdAddKeyboardDriver (&LinuxKeyboardDriver);
++ KdAddPointerDriver (&LinuxMouseDriver);
++ KdAddKeyboardDriver (&LinuxEvdevKeyboardDriver);
++ KdAddPointerDriver (&LinuxEvdevMouseDriver);
++#ifdef TSLIB
++ KdAddPointerDriver (&TsDriver);
+ #endif
++
++ ki = KdParseKeyboard ("keyboard");
++ KdAddKeyboard(ki);
++
++ KdInitInput ();
+ }
+
+ void
diff --git a/packages/xorg-xserver/xserver-kdrive/w100.patch b/packages/xorg-xserver/xserver-kdrive/w100.patch
index 9a20fa1f1e..1bb6f357c6 100644
--- a/packages/xorg-xserver/xserver-kdrive/w100.patch
+++ b/packages/xorg-xserver/xserver-kdrive/w100.patch
@@ -6332,57 +6332,4 @@ Index: git/hw/kdrive/w100/w100_regs.h
+
+
+#endif //_W100_REGS_H_
-Index: git/hw/kdrive/Makefile.am
-===================================================================
---- git.orig/hw/kdrive/Makefile.am 2006-09-02 12:12:13.000000000 +0200
-+++ git/hw/kdrive/Makefile.am 2006-09-02 12:12:14.000000000 +0200
-@@ -7,6 +7,10 @@
- FBDEV_SUBDIRS = fbdev epson
- endif
-
-+if KDRIVEW100
-+W100_SUBDIRS = w100
-+endif
-+
- if XSDLSERVER
- XSDL_SUBDIRS = sdl
- endif
-@@ -20,6 +24,7 @@
- linux \
- $(XSDL_SUBDIRS) \
- $(FBDEV_SUBDIRS) \
-+ $(W100_SUBDIRS) \
- $(VESA_SUBDIRS) \
- $(XEPHYR_SUBDIRS) \
- fake
-Index: git/configure.ac
-===================================================================
---- git.orig/configure.ac 2006-09-02 12:12:14.000000000 +0200
-+++ git/configure.ac 2006-09-02 12:12:14.000000000 +0200
-@@ -442,6 +442,7 @@
- AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
- AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
- AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
-+AC_ARG_ENABLE(w100, AS_HELP_STRING([--enable-w100], [Build the kdrive Xw100 server (default: no)]), [KDRIVEW100=$enableval], [KDRIVEW100=no])
- dnl xprint
- AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
- AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto)
-@@ -1519,6 +1520,10 @@
- AC_SUBST([XSDL_LIBS])
- AC_SUBST([XSDL_INCS])
-
-+AM_CONDITIONAL(KDRIVEW100, [test "x$KDRIVEW100" = xyes])
-+if test "x$KDRIVEW100" = xyes; then
-+ AC_DEFINE(KDRIVEW100, 1, [Build Xw100 server])
-+fi
-
- dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
- AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
-@@ -1753,6 +1758,7 @@
- hw/kdrive/epson/Makefile
- hw/kdrive/fake/Makefile
- hw/kdrive/fbdev/Makefile
-+hw/kdrive/w100/Makefile
- hw/kdrive/i810/Makefile
- hw/kdrive/linux/Makefile
- hw/kdrive/mach64/Makefile
+
diff --git a/packages/xorg-xserver/xserver-kdrive/xcalibrate-new-input-world-order.patch b/packages/xorg-xserver/xserver-kdrive/xcalibrate-new-input-world-order.patch
new file mode 100644
index 0000000000..2cc9e60d8d
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/xcalibrate-new-input-world-order.patch
@@ -0,0 +1,159 @@
+CRUDE HACK ALERT: this patch adds a new device control (DEVICE_RAWEVENT)
+which cannot be exported in the protocol because the xDeviceRaweventCtl
+carries a C pointer to the tslib event hook. For lack of a better idea,
+I added this to get the event hook pointer from Xext/xcalibrate.c into
+tslib.c, where the now-private _raw_event_hook and _raw_event_closure
+pointers are manipulated instead of, like before, in the Xcalibrate
+extension itself.
+
+Index: xorg-server-1.4/Xext/xcalibrate.c
+===================================================================
+--- xorg-server-1.4.orig/Xext/xcalibrate.c 2007-09-08 13:22:55.000000000 +0200
++++ xorg-server-1.4/Xext/xcalibrate.c 2007-09-08 16:03:17.000000000 +0200
+@@ -33,14 +33,14 @@
+ #include "os.h"
+ #include "dixstruct.h"
+ #include "extnsionst.h"
++#include "inputstr.h" /* for inputInfo */
+ #include "swaprep.h"
+
++#include <X11/extensions/XI.h> /* for XI_TOUCHSCREEN */
++#include <X11/extensions/XIproto.h> /* for xDeviceCtl */
+ #include <X11/extensions/xcalibrateproto.h>
+ #include <X11/extensions/xcalibratewire.h>
+
+-extern void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure);
+-extern void *tslib_raw_event_closure;
+-
+ static CARD8 XCalibrateReqCode;
+ int XCalibrateEventBase;
+ int XCalibrateReqBase;
+@@ -64,6 +64,31 @@
+ WriteEventsToClient (pClient, 1, (xEvent *) &ev);
+ }
+
++#define DEVICE_RAWEVENT 6
++typedef struct {
++ CARD16 control B16;
++ CARD16 length B16;
++ void *hook;
++} xDeviceRaweventCtl;
++
++static void
++xcalibrate_set_event_hook (void *hook, ClientPtr client)
++{
++ DeviceIntPtr devtmp;
++ Atom xiclass;
++ xDeviceRaweventCtl rawevent;
++
++ rawevent.control = DEVICE_RAWEVENT;
++ rawevent.length = sizeof(rawevent);
++ rawevent.hook = hook;
++
++ xiclass = MakeAtom(XI_TOUCHSCREEN, strlen(XI_TOUCHSCREEN), 1);
++
++ for (devtmp = inputInfo.devices; devtmp; devtmp = devtmp->next)
++ if (devtmp->type == xiclass)
++ ChangeDeviceControl(client, devtmp, (xDeviceCtl *) &rawevent);
++}
++
+ static int
+ ProcXCalibrateQueryVersion (ClientPtr client)
+ {
+@@ -124,8 +149,7 @@
+ {
+ /* Start calibrating. */
+ xcalibrate_client = client;
+- tslib_raw_event_hook = xcalibrate_event_hook;
+- tslib_raw_event_closure = client;
++ xcalibrate_set_event_hook(xcalibrate_event_hook, client);
+ rep.status = GrabSuccess;
+ }
+ else
+@@ -139,8 +163,7 @@
+ {
+ /* Stop calibrating. */
+ xcalibrate_client = NULL;
+- tslib_raw_event_hook = NULL;
+- tslib_raw_event_closure = NULL;
++ xcalibrate_set_event_hook(NULL, NULL);
+ rep.status = GrabSuccess;
+
+ /* Cycle input off and on to reload configuration. */
+@@ -277,8 +300,7 @@
+ {
+ /* Stop calibrating. */
+ xcalibrate_client = NULL;
+- tslib_raw_event_hook = NULL;
+- tslib_raw_event_closure = NULL;
++ xcalibrate_set_event_hook(NULL, NULL);
+ }
+ }
+
+Index: xorg-server-1.4/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/linux/tslib.c 2007-09-08 14:46:41.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/linux/tslib.c 2007-09-08 16:10:57.000000000 +0200
+@@ -56,6 +56,13 @@
+ int phys_screen;
+ };
+
++void
++tslib_set_raw_event_hook(KdPointerInfo *pi, void *hook, void *closure)
++{
++ struct TslibPrivate *private = pi->driverPrivate;
++ private->raw_event_hook = hook;
++ private->raw_event_closure = closure;
++}
+
+ static void
+ TsRead (int fd, void *closure)
+Index: xorg-server-1.4/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/src/kinput.c 2007-09-08 14:45:01.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/src/kinput.c 2007-09-08 16:09:32.000000000 +0200
+@@ -2389,10 +2389,19 @@
+ return BadMatch;
+ }
+
++#define DEVICE_RAWEVENT 6
++typedef struct {
++ CARD16 control B16;
++ CARD16 length B16;
++ void *hook;
++} xDeviceRaweventCtl;
++
+ int
+ ChangeDeviceControl(register ClientPtr client, DeviceIntPtr pDev,
+ xDeviceCtl *control)
+ {
++ KdPointerInfo *pi;
++
+ switch (control->control) {
+ case DEVICE_RESOLUTION:
+ /* FIXME do something more intelligent here */
+@@ -2406,6 +2415,24 @@
+ case DEVICE_ENABLE:
+ return Success;
+
++ case DEVICE_RAWEVENT:
++ if (!pDev)
++ return BadImplementation;
++
++ for (pi = kdPointers; pi; pi = pi->next) {
++ if (pi->dixdev && pi->dixdev->id == pDev->id)
++ break;
++ }
++
++ if (!pi || !pi->dixdev || pi->dixdev->id != pDev->id) {
++ ErrorF("[ChangeDeviceControl] Failed to find pointer for device %d!\n",
++ pDev->id);
++ return BadImplementation;
++ }
++
++ tslib_set_raw_event_hook(pi, ((xDeviceRaweventCtl *)control)->hook, client);
++ return Success;
++
+ default:
+ return BadMatch;
+ }
diff --git a/packages/xorg-xserver/xserver-kdrive/xcalibrate_coords.patch b/packages/xorg-xserver/xserver-kdrive/xcalibrate_coords.patch
new file mode 100644
index 0000000000..7f4ec09d68
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/xcalibrate_coords.patch
@@ -0,0 +1,122 @@
+---
+ Xext/xcalibrate.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
+ hw/kdrive/src/kdrive.h | 3 +++
+ hw/kdrive/src/kinput.c | 12 ++++++++++++
+ 3 files changed, 61 insertions(+), 1 deletion(-)
+
+Index: xorg-server-1.4/Xext/xcalibrate.c
+===================================================================
+--- xorg-server-1.4.orig/Xext/xcalibrate.c 2007-08-23 21:04:52.000000000 +0200
++++ xorg-server-1.4/Xext/xcalibrate.c 2007-09-06 23:27:40.000000000 +0200
+@@ -164,7 +164,6 @@
+ return (client->noClientException);
+ }
+
+-
+ static int
+ SProcXCalibrateSetRawMode (ClientPtr client)
+ {
+@@ -178,6 +177,47 @@
+ return ProcXCalibrateSetRawMode(client);
+ }
+
++static int
++ProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ xXCalibrateScreenToCoordReply rep;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ memset (&rep, 0, sizeof (rep));
++ rep.type = X_Reply;
++ rep.sequenceNumber = client->sequence;
++ rep.x = stuff->x;
++ rep.y = stuff->y;
++
++ KdScreenToPointerCoords(&rep.x, &rep.y);
++
++ if (client->swapped)
++ {
++ int n;
++
++ swaps (&rep.x, n);
++ swaps (&rep.y, n);
++ }
++ WriteToClient(client, sizeof (rep), (char *) &rep);
++ return (client->noClientException);
++}
++
++static int
++SProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ int n;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ swaps(&stuff->x, n);
++ swaps(&stuff->y, n);
++
++ return ProcXCalibrateScreenToCoord(client);
++}
++
+ static void
+ XCalibrateResetProc (ExtensionEntry *extEntry)
+ {
+@@ -192,6 +232,9 @@
+ return ProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return ProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return ProcXCalibrateScreenToCoord(client);
++
+ default: break;
+ }
+
+@@ -211,6 +254,8 @@
+ return SProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return SProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return SProcXCalibrateScreenToCoord(client);
+
+ default: break;
+ }
+Index: xorg-server-1.4/hw/kdrive/src/kdrive.h
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/src/kdrive.h 2007-08-23 21:04:53.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/src/kdrive.h 2007-09-06 23:28:50.000000000 +0200
+@@ -848,6 +848,9 @@
+ KdSetPointerMatrix (KdPointerMatrix *pointer);
+
+ void
++KdScreenToPointerCoords (int *x, int *y);
++
++void
+ KdComputePointerMatrix (KdPointerMatrix *pointer, Rotation randr, int width, int height);
+
+ void
+Index: xorg-server-1.4/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.4.orig/hw/kdrive/src/kinput.c 2007-08-23 21:04:53.000000000 +0200
++++ xorg-server-1.4/hw/kdrive/src/kinput.c 2007-09-06 23:30:54.000000000 +0200
+@@ -592,6 +592,18 @@
+ }
+
+ void
++KdScreenToPointerCoords (int *x, int *y)
++{
++ int (*m)[3] = kdPointerMatrix.matrix;
++ int div = m[0][1] * m[1][0] - m[1][1] * m[0][0];
++ int sx = *x;
++ int sy = *y;
++
++ *x = (m[0][1] * sy - m[0][1] * m[1][2] + m[1][1] * m[0][2] - m[1][1] * sx) / div;
++ *y = (m[1][0] * sx + m[0][0] * m[1][2] - m[1][0] * m[0][2] - m[0][0] * sy) / div;
++}
++
++void
+ KdComputePointerMatrix (KdPointerMatrix *m, Rotation randr, int width,
+ int height)
+ {