diff options
Diffstat (limited to 'meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib')
4 files changed, 70 insertions, 0 deletions
diff --git a/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi new file mode 100644 index 0000000000..906043947e --- /dev/null +++ b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/10-x11-input-tslib.fdi @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<deviceinfo version="0.2"> + <device> + <match key="info.capabilities" contains="input.touchpad"> + <merge key="input.x11_driver" type="string">tslib</merge> + </match> + <match key="info.capabilities" contains="input.touchscreen"> + <merge key="input.x11_driver" type="string">tslib</merge> + </match> + </device> +</deviceinfo> diff --git a/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules new file mode 100644 index 0000000000..ec130c257d --- /dev/null +++ b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/99-xf86-input-tslib.rules @@ -0,0 +1,5 @@ +# create /dev/input/touchscreenX symlink, tag xf86-input-tslib as driver +SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen%n", ENV{x11_driver}="tslib" +SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="ads7846", SYMLINK+="input/touchscreen%n", ENV{x11_driver}="tslib" + + diff --git a/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch new file mode 100644 index 0000000000..07754731dd --- /dev/null +++ b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/double-free-crash.patch @@ -0,0 +1,20 @@ +xorg-server-1.7.3/hw/xfree86/common/xf86Helper.c contains this code +causing a double free crash on chvt or exit: + + /* This should *really* be handled in drv->UnInit(dev) call instead, but + * if the driver forgets about it make sure we free it or at least crash + * with flying colors */ + if (pInp->private) + xfree(pInp->private); +Index: xf86-input-tslib-0.0.6/src/tslib.c +=================================================================== +--- xf86-input-tslib-0.0.6.orig/src/tslib.c ++++ xf86-input-tslib-0.0.6/src/tslib.c +@@ -435,6 +435,7 @@ xf86TslibUninit(InputDriverPtr drv, Inpu + xf86TslibControlProc(pInfo->dev, DEVICE_OFF); + ts_close(priv->ts); + xfree(pInfo->private); ++ pInfo->private = NULL; + xf86DeleteInput(pInfo, 0); + } + diff --git a/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch new file mode 100644 index 0000000000..a1f6ba8f9e --- /dev/null +++ b/meta-oe/recipes-graphics/xorg-driver/xf86-input-tslib/xserver-174-XGetPointerControl.patch @@ -0,0 +1,34 @@ +From Grazvydas Ignotas + +At least xserver 1.7.4 crashes on XGetPointerControl request because of xf86-input-tslib: + +Program received signal SIGSEGV, Segmentation fault. +#0 0x000355e0 in ProcGetPointerControl (client=0x4a2e58) at devices.c:2122 +#1 0x00062fa8 in Dispatch () at dispatch.c:439 +#2 0x00022444 in main (argc=4, argv=0xbeebedc4, envp=0xbeebedd8) at main.c:285 + +This happens because ptrfeed field is not set in device structure from tslib. +To fix this, call InitPtrFeedbackClassDeviceStruct() during DEVICE_INIT to get necessary setup done (as done in other input drivers). + +--- +diff -ur xf86-input-tslib-0.0.6/src/tslib.c xf86-input-tslib-0.0.6_/src/tslib.c +--- xf86-input-tslib-0.0.6/src/tslib.c 2010-02-09 12:23:22.000000000 +0200 ++++ xf86-input-tslib-0.0.6_/src/tslib.c 2010-02-09 12:37:33.000000000 +0200 +@@ -103,8 +103,6 @@ + static void + PointerControlProc(DeviceIntPtr dev, PtrCtrl * ctrl) + { +- ErrorF("%s\n", __FUNCTION__); +- return; + } + + static Bool +@@ -406,6 +404,8 @@ + xf86MotionHistoryAllocate(pInfo); + #endif + ++ if (!InitPtrFeedbackClassDeviceStruct(device, PointerControlProc)) ++ return !Success; + break; + + case DEVICE_ON: |