summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2007-05-18 12:36:25 +0000
committerKoen Kooi <koen@openembedded.org>2007-05-18 12:36:25 +0000
commit0fb087429000007d0852d3b9b729c3f1090c67d8 (patch)
tree7d77cbddce41f8715b1188a27b67ce8ac0e98387 /packages
parent938eaae0ad35de21d49d60b3ac125a0a89659b50 (diff)
xserver-kdrive-xomap: merge from poky
Diffstat (limited to 'packages')
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty0
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch20
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch137
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch20
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch37
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch12
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch23
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/fbdev-not-fix.patch14
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch446
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch503
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/kdrive-use-evdev.patch53
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/kmode.patch43
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/no-serial-probing.patch13
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/optional-xkb.patch54
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate.patch73
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/xfbdev-fb-opt.patch82
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap_X11R7.1-1.1.99.3.bb47
17 files changed, 1577 insertions, 0 deletions
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty b/packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch b/packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch
new file mode 100644
index 0000000000..ee8c1ed680
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch
@@ -0,0 +1,20 @@
+---
+ hw/kdrive/linux/tslib.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-05-17 10:28:12.000000000 +0100
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-05-17 10:28:42.000000000 +0100
+@@ -111,10 +111,7 @@ TsRead (int fd, void *closure)
+ event.pressure);
+ discard = 0;
+ if (event.pressure) {
+- if (event.pressure > pi->dixdev->absolute->button_threshold)
+- flags = KD_BUTTON_8;
+- else
+- flags = KD_BUTTON_1;
++ flags = KD_BUTTON_1;
+
+ /*
+ * Here we test for the touch screen driver actually being on the
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch b/packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch
new file mode 100644
index 0000000000..df5bbe2abf
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch
@@ -0,0 +1,137 @@
+---
+ configure |38107 -----------------------------------------------------------
+ configure.ac | 2 -
+ hw/kdrive/linux/tslib.c | 68 ++++++++++++++++++++++++++----------------------
+ 2 files changed, 39 insertions(+), 31 deletions(-)
+
+
+Index: xorg-server-1.1.99.3/configure.ac
+===================================================================
+--- xorg-server-1.1.99.3.orig/configure.ac 2007-01-30 00:22:41.000000000 +0000
++++ xorg-server-1.1.99.3/configure.ac 2007-01-30 00:22:41.000000000 +0000
+@@ -717,7 +717,7 @@ fi
+
+ if test "x$XCALIBRATE" = xyes && test "$KDRIVE" = yes; then
+ AC_DEFINE(XCALIBRATE, 1, [Build XCalibrate extension])
+- REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateproto"
++ REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateext"
+ else
+ XCALIBRATE=no
+ fi
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-30 00:44:13.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-30 21:55:52.000000000 +0000
+@@ -47,6 +47,10 @@
+
+ #define TSLIB_QUEUE_SIZE 3
+
++/* For XCalibrate extension */
++void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure);
++void *tslib_raw_event_closure;
++
+ struct TslibPrivate {
+ int fd;
+ int lastx, lasty;
+@@ -76,6 +80,19 @@ TsRead (int fd, void *closure)
+ unsigned long flags = 0;
+ int discard = 0;
+
++ if (tslib_raw_event_hook)
++ {
++ /* XCalibrate Ext */
++ if (ts_read_raw(private->tsDev, &event, 1) == 1)
++ {
++ tslib_raw_event_hook (event.x,
++ event.y,
++ event.pressure,
++ tslib_raw_event_closure);
++ }
++ return;
++ }
++
+ if (!private->tsDev) {
+ DebugF("[tslib] EXTREME BADNESS: TsRead called while tsDev is null!\n");
+ return;
+@@ -322,14 +339,14 @@ TsRead (int fd, void *closure)
+ }
+ }
+
+-/* must always be NULL-terminated. */
+-char *valid_ts_names[] = {
+- "ADS784x Touchscreen",
+- "omap-ts",
+- "TSC2301 touchscreen",
+- NULL
++static char *TsNames[] = {
++ NULL, /* set via TSLIB_TSDEVICE */
++ "/dev/ts",
++ "/dev/touchscreen/0",
+ };
+
++#define NUM_TS_NAMES (sizeof (TsNames) / sizeof (TsNames[0]))
++
+ #define TS_NAME_SIZE 32
+
+ static Status
+@@ -383,11 +400,10 @@ TslibDisable (KdPointerInfo *pi)
+ private->tsDev = NULL;
+ }
+
+-
+ static Status
+ TslibInit (KdPointerInfo *pi)
+ {
+- int fd = 0, i = 0;
++ int fd = 0, i = 0, j = 0;
+ char devpath[PATH_MAX], devname[TS_NAME_SIZE];
+ DIR *inputdir = NULL;
+ struct dirent *inputent = NULL;
+@@ -397,33 +413,25 @@ TslibInit (KdPointerInfo *pi)
+ return !Success;
+
+ if (!pi->path || strcmp(pi->path, "auto") == 0) {
+- if (!(inputdir = opendir("/dev/input"))) {
+- ErrorF("[tslib/TslibInit]: couldn't open /dev/input!\n");
+- return BadMatch;
+- }
+
+- while ((inputent = readdir(inputdir))) {
+- if (strncmp(inputent->d_name, "event", 5) != 0)
+- continue;
++ if ((TsNames[0] = getenv("TSLIB_TSDEVICE")) == NULL)
++ j++;
++
++ for (i = j; i < NUM_TS_NAMES; i++)
++ {
++ struct tsdev *tsDev;
+
+- snprintf(devpath, PATH_MAX, "/dev/input/%s", inputent->d_name);
+- fd = open(devpath, O_RDWR);
++ if(!(tsDev = ts_open(TsNames[i], 0)))
++ continue;
+
+- if (!ioctl(fd, EVIOCGNAME(sizeof(devname)), devname)) {
+- close(fd);
++ if (ts_config(tsDev))
+ continue;
+- }
+- close(fd);
+
+- for (i = 0; valid_ts_names[i]; i++) {
+- if (strcmp(devname, valid_ts_names[i]) == 0) {
+- pi->path = KdSaveString(devpath);
+- break;
+- }
+- }
+- }
+-
+- closedir(inputdir);
++ ts_close(tsDev);
++
++ pi->path = KdSaveString(TsNames[i]);
++ break;
++ }
+ }
+
+ if (!pi->path || strcmp(pi->path, "auto") == 0) {
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch b/packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch
new file mode 100644
index 0000000000..bd8842721b
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch
@@ -0,0 +1,20 @@
+--- xserver/hw/kdrive/linux/linux.c.orig 2005-04-23 15:56:13.988849232 +0000
++++ xserver/hw/kdrive/linux/linux.c 2005-04-23 15:57:05.001094192 +0000
+@@ -342,7 +342,7 @@
+ /*
+ * Open the APM driver
+ */
+- LinuxApmFd = open ("/dev/apm_bios", 2);
++ /*LinuxApmFd = open ("/dev/apm_bios", 2);
+ if (LinuxApmFd < 0 && errno == ENOENT)
+ LinuxApmFd = open ("/dev/misc/apm_bios", 2);
+ if (LinuxApmFd >= 0)
+@@ -352,7 +352,7 @@
+ RegisterBlockAndWakeupHandlers (LinuxApmBlock, LinuxApmWakeup, 0);
+ AddEnabledDevice (LinuxApmFd);
+ }
+-
++ */
+ /*
+ * now get the VT
+ */
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch b/packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch
new file mode 100644
index 0000000000..9c43e52ead
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch
@@ -0,0 +1,37 @@
+--- git/configure.ac.orig 2006-05-22 22:40:00.000000000 +0200
++++ git/configure.ac 2006-06-10 15:10:14.000000000 +0200
+@@ -505,7 +505,11 @@
+ XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
+
+ dnl Core modules for most extensions, et al.
++if test "$KDRIVE" = yes; then
++REQUIRED_MODULES="randrproto renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto"
++else
+ REQUIRED_MODULES="randrproto renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans xf86miscproto xf86vidmodeproto xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto xf86dgaproto"
++fi
+ REQUIRED_LIBS="xfont xau fontenc"
+
+ AM_CONDITIONAL(XV, [test "x$XV" = xyes])
+@@ -1514,7 +1526,9 @@
+ AC_SUBST(XKB_COMPILED_DIR)
+
+ dnl and the rest of these are generic, so they're in config.h
++if test ! x"$KDRIVE" = xyes; then
+ AC_DEFINE(XFreeXDGA, 1, [Build XDGA support])
++fi
+ AC_DEFINE(XResExtension, 1, [Build XRes extension])
+
+ dnl CYGWIN does not define fd_set if _POSIX_SOURCE is defined
+@@ -1534,10 +1548,12 @@
+
+ AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
+
++if test ! "x$KDRIVE" = xyes ; then
+ dnl xorgconfig CLI configuration utility
+ PKG_CHECK_MODULES([XORGCONFIG_DEP], [xkbfile x11])
+ AC_SUBST(XORGCONFIG_DEP_CFLAGS)
+ AC_SUBST(XORGCONFIG_DEP_LIBS)
++fi
+
+ dnl xorgcfg GUI configuration utility
+ AC_ARG_ENABLE(xorgcfg, AS_HELP_STRING([--enable-xorgcfg],
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch b/packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch
new file mode 100644
index 0000000000..13a6c2c954
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch
@@ -0,0 +1,12 @@
+--- xorg-server-X11R7.1-1.1.0/dix/dixfonts.c.orig 2006-06-08 14:49:12.158684250 +0200
++++ xorg-server-X11R7.1-1.1.0/dix/dixfonts.c 2006-06-08 14:49:52.493205000 +0200
+@@ -52,8 +52,8 @@
+ /* $Xorg: dixfonts.c,v 1.4 2000/08/17 19:48:18 cpqbld Exp $ */
+
+ #define NEED_REPLIES
+ #ifdef HAVE_DIX_CONFIG_H
+-#include <dix-config.h>
++#include <kdrive-config.h>
+ #endif
+
+ #include <X11/X.h>
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch b/packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch
new file mode 100644
index 0000000000..e488657b74
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch
@@ -0,0 +1,23 @@
+--- 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-xomap/fbdev-not-fix.patch b/packages/xorg-xserver/xserver-kdrive-xomap/fbdev-not-fix.patch
new file mode 100644
index 0000000000..f87e7cc2cd
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/fbdev-not-fix.patch
@@ -0,0 +1,14 @@
+--- xserver/hw/kdrive/fbdev/fbdev.c~ 2004-09-15 00:08:10.000000000 +0100
++++ xserver/hw/kdrive/fbdev/fbdev.c 2004-11-13 17:47:02.000000000 +0000
+@@ -198,6 +198,11 @@
+ return FALSE;
+ }
+
++ /* Re-get the "fixed" parameters since they might have changed */
++ k = ioctl (priv->fd, FBIOGET_FSCREENINFO, &priv->fix);
++ if (k < 0)
++ perror ("FBIOGET_FSCREENINFO");
++
+ /* Now get the new screeninfo */
+ ioctl (priv->fd, FBIOGET_VSCREENINFO, &priv->var);
+ depth = priv->var.bits_per_pixel;
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch b/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
new file mode 100644
index 0000000000..09c9e8909c
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
@@ -0,0 +1,446 @@
+---
+ Xi/chgdctl.c | 55 +++++++++++++++++++------
+ Xi/getdctl.c | 87 +++++++++++++++++++++++++++++++----------
+ Xi/getdctl.h | 11 +++--
+ Xi/stubs.c | 2
+ configure.ac | 2
+ dix/devices.c | 31 +++++++++-----
+ hw/kdrive/linux/tslib.c | 8 +--
+ hw/kdrive/src/kinput.c | 6 +-
+ hw/xfree86/common/xf86Xinput.c | 3 -
+ include/input.h | 2
+ include/inputstr.h | 18 +++++++-
+ 11 files changed, 162 insertions(+), 63 deletions(-)
+
+Index: xorg-server-1.1.99.3/Xi/chgdctl.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/chgdctl.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/chgdctl.c 2007-01-29 22:59:27.000000000 +0000
+@@ -104,8 +104,10 @@ ProcXChangeDeviceControl(ClientPtr clien
+ xChangeDeviceControlReply rep;
+ AxisInfoPtr a;
+ CARD32 *resolution;
+- xDeviceTSCtl *ts;
++ xDeviceAbsCalibCtl *calib;
++ xDeviceAbsAreaCtl *area;
+ xDeviceCoreCtl *c;
++ xDeviceEnableCtl *e;
+
+ REQUEST(xChangeDeviceControlReq);
+ REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
+@@ -170,25 +172,28 @@ ProcXChangeDeviceControl(ClientPtr clien
+ return Success;
+ }
+ break;
+- case DEVICE_TOUCHSCREEN:
+- ts = (xDeviceTSCtl *)&stuff[1];
+-
+- if (ts->button_threshold < 0 || ts->button_threshold > 255) {
++ case DEVICE_ABS_CALIB:
++ calib = (xDeviceAbsCalibCtl *)&stuff[1];
++
++ if (calib->button_threshold < 0 || calib->button_threshold > 255) {
+ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
+ BadValue);
+ return Success;
+ }
+
+- status = ChangeDeviceControl(client, dev, (xDeviceCtl *) ts);
++ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) calib);
+
+ if (status == Success) {
+- dev->touchscreen->min_x = ts->min_x;
+- dev->touchscreen->max_x = ts->max_x;
+- dev->touchscreen->min_y = ts->min_y;
+- dev->touchscreen->max_y = ts->max_y;
+- dev->touchscreen->button_threshold = ts->button_threshold;
+- } else if (status == DeviceBusy) {
+- rep.status = DeviceBusy;
++ dev->absolute->min_x = calib->min_x;
++ dev->absolute->max_x = calib->max_x;
++ dev->absolute->min_y = calib->min_y;
++ dev->absolute->max_y = calib->max_y;
++ dev->absolute->flip_x = calib->flip_x;
++ dev->absolute->flip_y = calib->flip_y;
++ dev->absolute->rotation = calib->rotation;
++ dev->absolute->button_threshold = calib->button_threshold;
++ } else if (status == DeviceBusy || status == BadValue) {
++ rep.status = status;
+ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
+ &rep);
+ return Success;
+@@ -199,6 +204,30 @@ ProcXChangeDeviceControl(ClientPtr clien
+ }
+
+ break;
++ case DEVICE_ABS_AREA:
++ area = (xDeviceAbsAreaCtl *)&stuff[1];
++
++ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) area);
++
++ if (status == Success) {
++ dev->absolute->offset_x = area->offset_x;
++ dev->absolute->offset_y = area->offset_y;
++ dev->absolute->width = area->width;
++ dev->absolute->height = area->height;
++ dev->absolute->screen = area->screen;
++ dev->absolute->following = area->following;
++ } else if (status == DeviceBusy || status == BadValue) {
++ rep.status = status;
++ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
++ &rep);
++ return Success;
++ } else {
++ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
++ BadMatch);
++ return Success;
++ }
++
++ break;
+ case DEVICE_CORE:
+ c = (xDeviceCoreCtl *)&stuff[1];
+
+Index: xorg-server-1.1.99.3/Xi/getdctl.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/getdctl.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/getdctl.c 2007-01-29 22:59:27.000000000 +0000
+@@ -124,14 +124,23 @@ ProcXGetDeviceControl(ClientPtr client)
+ total_length = sizeof(xDeviceResolutionState) +
+ (3 * sizeof(int) * dev->valuator->numAxes);
+ break;
+- case DEVICE_TOUCHSCREEN:
+- if (!dev->touchscreen) {
++ case DEVICE_ABS_CALIB:
++ if (!dev->absolute) {
+ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
+ BadMatch);
+ return Success;
+ }
+
+- total_length = sizeof(xDeviceTSCtl);
++ total_length = sizeof(xDeviceAbsCalibCtl);
++ break;
++ case DEVICE_ABS_AREA:
++ if (!dev->absolute) {
++ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
++ BadMatch);
++ return Success;
++ }
++
++ total_length = sizeof(xDeviceAbsAreaCtl);
+ break;
+ case DEVICE_CORE:
+ total_length = sizeof(xDeviceCoreCtl);
+@@ -152,8 +161,11 @@ ProcXGetDeviceControl(ClientPtr client)
+ case DEVICE_RESOLUTION:
+ CopySwapDeviceResolution(client, dev->valuator, buf, total_length);
+ break;
+- case DEVICE_TOUCHSCREEN:
+- CopySwapDeviceTouchscreen(client, dev->touchscreen, buf);
++ case DEVICE_ABS_CALIB:
++ CopySwapDeviceAbsCalib(client, dev->absolute, buf);
++ break;
++ case DEVICE_ABS_AREA:
++ CopySwapDeviceAbsArea(client, dev->absolute, buf);
+ break;
+ case DEVICE_CORE:
+ CopySwapDeviceCore(client, dev, buf);
+@@ -206,28 +218,61 @@ CopySwapDeviceResolution(ClientPtr clien
+ }
+ }
+
+-void CopySwapDeviceTouchscreen (ClientPtr client, TouchscreenClassPtr dts,
++void CopySwapDeviceAbsCalib (ClientPtr client, AbsoluteClassPtr dts,
+ char *buf)
+ {
+ register char n;
+- xDeviceTSState *ts = (xDeviceTSState *) buf;
++ xDeviceAbsCalibState *calib = (xDeviceAbsCalibState *) buf;
+
+- ts->control = DEVICE_TOUCHSCREEN;
+- ts->length = sizeof(ts);
+- ts->min_x = dts->min_x;
+- ts->max_x = dts->max_x;
+- ts->min_y = dts->min_y;
+- ts->max_y = dts->max_y;
+- ts->button_threshold = dts->button_threshold;
++ calib->control = DEVICE_ABS_CALIB;
++ calib->length = sizeof(calib);
++ calib->min_x = dts->min_x;
++ calib->max_x = dts->max_x;
++ calib->min_y = dts->min_y;
++ calib->max_y = dts->max_y;
++ calib->flip_x = dts->flip_x;
++ calib->flip_y = dts->flip_y;
++ calib->rotation = dts->rotation;
++ calib->button_threshold = dts->button_threshold;
+
+ if (client->swapped) {
+- swaps(&ts->control, n);
+- swaps(&ts->length, n);
+- swapl(&ts->min_x, n);
+- swapl(&ts->max_x, n);
+- swapl(&ts->min_y, n);
+- swapl(&ts->max_y, n);
+- swapl(&ts->button_threshold, n);
++ swaps(&calib->control, n);
++ swaps(&calib->length, n);
++ swapl(&calib->min_x, n);
++ swapl(&calib->max_x, n);
++ swapl(&calib->min_y, n);
++ swapl(&calib->max_y, n);
++ swapl(&calib->flip_x, n);
++ swapl(&calib->flip_y, n);
++ swapl(&calib->rotation, n);
++ swapl(&calib->button_threshold, n);
++ }
++}
++
++void CopySwapDeviceAbsArea (ClientPtr client, AbsoluteClassPtr dts,
++ char *buf)
++{
++ register char n;
++ xDeviceAbsAreaState *area = (xDeviceAbsAreaState *) buf;
++
++ area->control = DEVICE_ABS_AREA;
++ area->length = sizeof(area);
++ area->offset_x = dts->offset_x;
++ area->offset_y = dts->offset_y;
++ area->width = dts->width;
++ area->height = dts->height;
++ area->screen = dts->screen;
++ area->following = dts->following;
++
++ if (client->swapped) {
++ swaps(&area->control, n);
++ swaps(&area->length, n);
++ swapl(&area->offset_x, n);
++ swapl(&area->offset_y, n);
++ swapl(&area->width, n);
++ swapl(&area->height, n);
++ swapl(&area->screen, n);
++ swapl(&area->following, n);
+ }
+ }
+
+Index: xorg-server-1.1.99.3/Xi/getdctl.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/getdctl.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/getdctl.h 2007-01-29 22:59:27.000000000 +0000
+@@ -42,10 +42,13 @@ void CopySwapDeviceResolution(ClientPtr
+ int /* length */
+ );
+
+-void CopySwapDeviceTouchscreen(ClientPtr /* client */ ,
+- TouchscreenClassPtr /* ts */ ,
+- char * /* buf */
+- );
++void CopySwapDeviceAbsCalib (ClientPtr client,
++ AbsoluteClassPtr dts,
++ char *buf);
++
++void CopySwapDeviceAbsArea (ClientPtr client,
++ AbsoluteClassPtr dts,
++ char *buf);
+
+ void CopySwapDeviceCore(ClientPtr /* client */ ,
+ DeviceIntPtr /* dev */ ,
+Index: xorg-server-1.1.99.3/Xi/stubs.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/stubs.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/stubs.c 2007-01-29 22:59:27.000000000 +0000
+@@ -287,7 +287,7 @@ ChangeDeviceControl(register ClientPtr c
+ switch (control->control) {
+ case DEVICE_RESOLUTION:
+ return (BadMatch);
+- case DEVICE_TOUCHSCREEN:
++ case DEVICE_ABS_CALIB:
+ return (BadMatch);
+ case DEVICE_CORE:
+ return (BadMatch);
+Index: xorg-server-1.1.99.3/dix/devices.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/dix/devices.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/dix/devices.c 2007-01-29 22:59:27.000000000 +0000
+@@ -117,7 +117,7 @@ AddInputDevice(DeviceProc deviceProc, Bo
+ dev->button = (ButtonClassPtr)NULL;
+ dev->focus = (FocusClassPtr)NULL;
+ dev->proximity = (ProximityClassPtr)NULL;
+- dev->touchscreen = (TouchscreenClassPtr)NULL;
++ dev->absolute = (AbsoluteClassPtr)NULL;
+ dev->kbdfeed = (KbdFeedbackPtr)NULL;
+ dev->ptrfeed = (PtrFeedbackPtr)NULL;
+ dev->intfeed = (IntegerFeedbackPtr)NULL;
+@@ -821,22 +821,31 @@ InitValuatorClassDeviceStruct(DeviceIntP
+ }
+
+ _X_EXPORT Bool
+-InitTouchscreenClassDeviceStruct(DeviceIntPtr dev)
++InitAbsoluteClassDeviceStruct(DeviceIntPtr dev)
+ {
+- register TouchscreenClassPtr tsc;
++ register AbsoluteClassPtr abs;
+
+- tsc = (TouchscreenClassPtr)xalloc(sizeof(TouchscreenClassRec));
+- if (!tsc)
++ abs = (AbsoluteClassPtr)xalloc(sizeof(AbsoluteClassRec));
++ if (!abs)
+ return FALSE;
+
+ /* we don't do anything sensible with these, but should */
+- tsc->min_x = -1;
+- tsc->min_y = -1;
+- tsc->max_x = -1;
+- tsc->max_y = -1;
++ abs->min_x = -1;
++ abs->min_y = -1;
++ abs->max_x = -1;
++ abs->max_y = -1;
++ abs->flip_x = 0;
++ abs->flip_y = 0;
++ abs->rotation = 0;
++ abs->button_threshold = 0;
+
+- tsc->button_threshold = 0;
+- dev->touchscreen = tsc;
++ abs->offset_x = 0;
++ abs->offset_y = 0;
++ abs->width = -1;
++ abs->height = -1;
++ abs->following = 0;
++
++ dev->absolute = abs;
+
+ return TRUE;
+ }
+Index: xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:59:27.000000000 +0000
+@@ -538,7 +538,8 @@ ChangeDeviceControl (ClientPtr client, D
+ switch (control->control) {
+ case DEVICE_CORE:
+ case DEVICE_RESOLUTION:
+- case DEVICE_TOUCHSCREEN:
++ case DEVICE_ABS_CALIB:
++ case DEVICE_ABS_AREA:
+ return Success;
+ default:
+ return BadMatch;
+Index: xorg-server-1.1.99.3/include/input.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/input.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/include/input.h 2007-01-29 22:59:27.000000000 +0000
+@@ -238,7 +238,7 @@ extern Bool InitValuatorClassDeviceStruc
+ int /*numMotionEvents*/,
+ int /*mode*/);
+
+-extern Bool InitTouchscreenClassDeviceStruct(
++extern Bool InitAbsoluteClassDeviceStruct(
+ DeviceIntPtr /*device*/);
+
+ extern Bool InitFocusClassDeviceStruct(
+Index: xorg-server-1.1.99.3/include/inputstr.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/inputstr.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/include/inputstr.h 2007-01-29 22:59:27.000000000 +0000
+@@ -185,13 +185,25 @@ typedef struct _ProximityClassRec {
+ char pad;
+ } ProximityClassRec, *ProximityClassPtr;
+
+-typedef struct _TouchscreenClassRec {
++typedef struct _AbsoluteClassRec {
++ /* Calibration. */
+ int min_x;
+ int max_x;
+ int min_y;
+ int max_y;
++ int flip_x;
++ int flip_y;
++ int rotation;
+ int button_threshold;
+-} TouchscreenClassRec, *TouchscreenClassPtr;
++
++ /* Area. */
++ int offset_x;
++ int offset_y;
++ int width;
++ int height;
++ int screen;
++ XID following;
++} AbsoluteClassRec, *AbsoluteClassPtr;
+
+ typedef struct _KbdFeedbackClassRec *KbdFeedbackPtr;
+ typedef struct _PtrFeedbackClassRec *PtrFeedbackPtr;
+@@ -293,7 +305,7 @@ typedef struct _DeviceIntRec {
+ ButtonClassPtr button;
+ FocusClassPtr focus;
+ ProximityClassPtr proximity;
+- TouchscreenClassPtr touchscreen;
++ AbsoluteClassPtr absolute;
+ KbdFeedbackPtr kbdfeed;
+ PtrFeedbackPtr ptrfeed;
+ IntegerFeedbackPtr intfeed;
+Index: xorg-server-1.1.99.3/configure.ac
+===================================================================
+--- xorg-server-1.1.99.3.orig/configure.ac 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/configure.ac 2007-01-29 22:59:27.000000000 +0000
+@@ -1586,7 +1586,7 @@ if test "$KDRIVE" = yes; then
+ #KDRIVE_PURE_LIBS="$DIX_LIB $OS_LIB $FB_LIB $XEXT_LIB $MIEXT_DAMAGE_LIB \
+ # $MIEXT_SHADOW_LIB $XPSTUBS_LIB"
+ KDRIVE_XKB_DDX_LIB='$(top_builddir)/hw/kdrive/src/libkdrivexkb.a'
+- KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB$COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
++ KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB $COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
+ KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.a'
+ KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.a'
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-29 22:59:27.000000000 +0000
+@@ -94,7 +94,7 @@ TsRead (int fd, void *closure)
+ event.pressure);
+ discard = 0;
+ if (event.pressure) {
+- if (event.pressure > pi->dixdev->touchscreen->button_threshold)
++ if (event.pressure > pi->dixdev->absolute->button_threshold)
+ flags = KD_BUTTON_8;
+ else
+ flags = KD_BUTTON_1;
+@@ -356,9 +356,9 @@ TslibEnable (KdPointerInfo *pi)
+ close(private->fd);
+ return BadAlloc;
+ }
+- if (pi->dixdev && pi->dixdev->touchscreen &&
+- pi->dixdev->touchscreen->button_threshold == 0)
+- pi->dixdev->touchscreen->button_threshold = 115;
++ if (pi->dixdev && pi->dixdev->absolute &&
++ pi->dixdev->absolute->button_threshold == 0)
++ pi->dixdev->absolute->button_threshold = 115;
+
+ DebugF("[tslib/TslibEnable] successfully enabled %s\n", pi->path);
+ KdRegisterFd(private->fd, TsRead, pi);
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kinput.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/src/kinput.c 2007-01-29 22:59:27.000000000 +0000
+@@ -444,7 +444,7 @@ KdPointerProc(DeviceIntPtr pDevice, int
+
+ #ifdef XINPUT
+ if (pi->inputClass == KD_TOUCHSCREEN) {
+- InitTouchscreenClassDeviceStruct(pDevice);
++ InitAbsoluteClassDeviceStruct(pDevice);
+ xiclass = AtomFromName(XI_TOUCHSCREEN);
+ }
+ else {
+@@ -2323,8 +2323,8 @@ ChangeDeviceControl(register ClientPtr c
+ /* FIXME do something more intelligent here */
+ return BadMatch;
+
+- case DEVICE_TOUCHSCREEN:
+- if (!pDev->touchscreen)
++ case DEVICE_ABS_CALIB:
++ if (!pDev->absolute)
+ return BadDevice;
+ else
+ return Success;
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch b/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
new file mode 100644
index 0000000000..06eab817bd
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
@@ -0,0 +1,503 @@
+# Kdrive evdev support patch, posted by Ander Conselvan de Oliveira at
+# http://lists.freedesktop.org/archives/xorg/2005-December/011635.html
+---
+# hw/kdrive/linux/evdev.c | 385 ++++++++++++++++++++++++++++++++++++++++++++++--
+# hw/kdrive/src/kdrive.c | 9 +
+# hw/kdrive/src/kdrive.h | 4
+# 3 files changed, 386 insertions(+), 12 deletions(-)
+#
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/evdev.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/evdev.c 2006-11-03 14:49:05.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/evdev.c 2007-01-25 22:05:48.000000000 +0000
+@@ -31,9 +31,11 @@
+ #include <X11/X.h>
+ #include <X11/Xproto.h>
+ #include <X11/Xpoll.h>
++#include <X11/keysym.h>
+ #include "inputstr.h"
+ #include "scrnintstr.h"
+ #include "kdrive.h"
++#include "kkeymap.h"
+
+ #define NUM_EVENTS 128
+ #define ABS_UNSET -65535
+@@ -107,9 +109,10 @@ EvdevRead (int evdevPort, void *closure)
+ {
+ KdPointerInfo *pi = closure;
+ Kevdev *ke = pi->driverPrivate;
+- int i;
++ int i, j;
+ struct input_event eve