diff options
Diffstat (limited to 'packages/tslib')
-rw-r--r-- | packages/tslib/tslib/h3900/tslib.sh | 14 | ||||
-rw-r--r-- | packages/tslib/tslib/ts.conf-h2200 | 0 | ||||
-rw-r--r-- | packages/tslib/tslib/tslib-linearize.patch | 182 | ||||
-rw-r--r-- | packages/tslib/tslib_cvs.bb | 6 |
4 files changed, 198 insertions, 4 deletions
diff --git a/packages/tslib/tslib/h3900/tslib.sh b/packages/tslib/tslib/h3900/tslib.sh index 5c446c2610..c885ccc9d2 100644 --- a/packages/tslib/tslib/h3900/tslib.sh +++ b/packages/tslib/tslib/h3900/tslib.sh @@ -1,5 +1,9 @@ #!/bin/sh +module_id() { + awk 'BEGIN { FS=": " } /Hardware/ { print $2 } ' </proc/cpuinfo +} + case `uname -r` in 2.4*) TSLIB_TSDEVICE=/dev/touchscreen/0raw @@ -7,7 +11,15 @@ case `uname -r` in ;; *) TSLIB_TSDEVICE=`detect-stylus --device` - TSLIB_CONFFILE=/usr/share/tslib/ts.conf-h3600 + case `module_id` in + "HP iPAQ H2200") + # h2200 needs special linearizing thing + TSLIB_CONFFILE=/usr/share/tslib/ts.conf-h2200 + ;; + *) + TSLIB_CONFFILE=/usr/share/tslib/ts.conf-h3600 + ;; + esac ;; esac diff --git a/packages/tslib/tslib/ts.conf-h2200 b/packages/tslib/tslib/ts.conf-h2200 new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/tslib/tslib/ts.conf-h2200 diff --git a/packages/tslib/tslib/tslib-linearize.patch b/packages/tslib/tslib/tslib-linearize.patch index e69de29bb2..e1d2774a7f 100644 --- a/packages/tslib/tslib/tslib-linearize.patch +++ b/packages/tslib/tslib/tslib-linearize.patch @@ -0,0 +1,182 @@ +--- /dev/null 2005-02-14 22:51:21.000000000 +0000 ++++ tslib/plugins/linear-h2200.c 2005-02-14 21:49:54.000000000 +0000 +@@ -0,0 +1,121 @@ ++/* ++ * tslib/plugins/linear-h2200.c ++ * ++ * Copyright (C) 2004 Michael Opdenacker ++ * ++ * This file is placed under the LGPL. Please see the file ++ * COPYING for more details. ++ * ++ * $Id$ ++ * ++ * Linearly scale touchscreen values for HP iPAQ h22xx. ++ */ ++ ++#include <stdlib.h> ++#include <string.h> ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <unistd.h> ++#include <fcntl.h> ++ ++#include <stdio.h> ++ ++#include "tslib.h" ++#include "tslib-filter.h" ++ ++struct tslib_linear_h2200 { ++ struct tslib_module_info module; ++}; ++ ++/* ++ ++ Thanks to Lau Norgaard <lau@robo.dk> for the formula! ++ ++ [u v] = [1 x y x*y x2 y2] * P ++ ++ P = [ 14.0274374997464 -10.4143500663246 ++ 0.963183808844262 0.123820939383483 ++ -0.0175631972840528 0.90783932803656 ++ 3.01072646091237e-005 -0.00022066295637918 ++ 1.78550793439434e-005 5.26174785439132e-006 ++ 1.24328256232492e-006 0.000171150736110672] ++ ++ Using fixed point arithmetics as ARM processors don't have floating point ++ capabilities. Otherwise, using floating point would cause time consuming ++ kernel exceptions. With our input and output data, found that we could ++ use a 12.20 format, provided we use extra intermediate shifts with very ++ small numbers and products are done in a careful order that doesn't ++ yield big intermediate products). ++ ++*/ ++ ++#define M20(x,y) ((long)(((long long)x * (long long)y) >> 20)) ++#define M32(x,y) ((long)(((long long)x * (long long)y) >> 32)) ++ ++static int ++linear_h2200_read(struct tslib_module_info *info, struct ts_sample *samp, int nr) ++{ ++ int ret; ++ long x, y, new_x, new_y; ++ ++ ret = info->next->ops->read(info->next, samp, nr); ++ if (ret >= 0) { ++ int nr; ++ ++ for (nr = 0; nr < ret; nr++, samp++) { ++ ++ x = ((long) samp->x) << 20; ++ y = ((long) samp->y) << 20; ++ ++ /* Caution: constants have been multiplied by 2^20 ++ (to save runtime). Some of them have been ++ multiplied by 2^32 when they were too small. ++ An extra >>12 is then needed. ++ ++ Note: we never multiply x*y or y*y first ++ (intermediate result too big, could overflow), ++ we multiply by the constant first. Because of this, ++ we can't reuse x^2, y^2 and x*y ++ */ ++ ++ new_x = 14708834 + M20(1009971,x) + M20(-18416,y) + ++ M20(M32(129310,x),y) + M20(M32(76687,x),x) + ++ M20(M32(5340,y),y); ++ ++ new_y = -10920238 + M20(129836,x) + M20(951939,y) + ++ M20(M32(-947740,x),y) + M20(M32(22599,x),x) + ++ M20(M32(735087,y),y); ++ ++ samp->x = (int) (new_x >> 20); ++ samp->y = (int) (new_y >> 20); ++ } ++ } ++ ++ return ret; ++} ++ ++static int linear_h2200_fini(struct tslib_module_info *info) ++{ ++ free(info); ++ return 0; ++} ++ ++static const struct tslib_ops linear_h2200_ops = ++{ ++ .read = linear_h2200_read, ++ .fini = linear_h2200_fini, ++}; ++ ++struct tslib_module_info *mod_init(struct tsdev *dev, const char *params) ++{ ++ ++ struct tslib_linear_h2200 *lin; ++ ++ lin = malloc(sizeof(struct tslib_linear_h2200)); ++ if (lin == NULL) ++ return NULL; ++ ++ lin->module.ops = &linear_h2200_ops; ++ ++ return &lin->module; ++} +Index: configure.ac +=================================================================== +RCS file: /mnt/src/cvsroot/tslib/configure.ac,v +retrieving revision 1.1 +diff -u -r1.1 configure.ac +--- tslib/configure.ac 21 Jul 2004 19:17:17 -0000 1.1 ++++ tslib/configure.ac 16 Feb 2005 23:03:07 -0000 +@@ -63,6 +63,15 @@ + AC_MSG_RESULT($dejitter_module) + AM_CONDITIONAL(ENABLE_DEJITTER_MODULE, test "$dejitter_module" = "yes") + ++AC_MSG_CHECKING([whether linear-h2200 module is requested]) ++AC_ARG_ENABLE(dejitter, ++ AS_HELP_STRING([--enable-linear-h2200], ++ [Enable building of linearizing filter for iPAQ h2200 (default=yes)]), ++ [h2200_linear_module=$enableval], ++ [h2200_linear_module=yes]) ++AC_MSG_RESULT($h2200_linear_module) ++AM_CONDITIONAL(ENABLE_H2200_LINEAR_MODULE, test "$h2200_linear_module" = "yes") ++ + AC_MSG_CHECKING([whether variance module is requested]) + AC_ARG_ENABLE(variance, + AS_HELP_STRING([--enable-variance], +Index: Makefile.am +=================================================================== +RCS file: /mnt/src/cvsroot/tslib/plugins/Makefile.am,v +retrieving revision 1.4 +diff -u -r1.4 Makefile.am +--- tslib/plugins/Makefile.am 21 Jul 2004 19:12:58 -0000 1.4 ++++ tslib/plugins/Makefile.am 16 Feb 2005 23:09:22 -0000 +@@ -85,6 +85,12 @@ + INPUT_MODULE = + endif + ++if ENABLE_H2200_LINEAR_MODULE ++H2200_LINEAR_MODULE = linear_h2200.la ++else ++H2200_LINEAR_MODULE = ++endif ++ + pluginexec_LTLIBRARIES = \ + $(LINEAR_MODULE) \ + $(DEJITTER_MODULE) \ +@@ -96,6 +102,7 @@ + $(H3600_MODULE) \ + $(MK712_MODULE) \ + $(ARCTIC2_MODULE) \ ++ $(H2200_LINEAR_MODULE) \ + $(INPUT_MODULE) + + variance_la_SOURCES = variance.c +@@ -131,3 +138,6 @@ + + input_la_SOURCES = input-raw.c + input_la_LDFLAGS = -module $(LTVSN) ++ ++linear_h2200_la_SOURCES = linear-h2200.c ++linear_h2200_la_LDFLAGS = -module $(LTVSN) diff --git a/packages/tslib/tslib_cvs.bb b/packages/tslib/tslib_cvs.bb index fb2da3ba23..a42fe2b12e 100644 --- a/packages/tslib/tslib_cvs.bb +++ b/packages/tslib/tslib_cvs.bb @@ -1,7 +1,7 @@ SECTION = "base" DESCRIPTION = "tslib is a touchscreen access library." PV = "0.0cvs${CVSDATE}" -PR = "r15" +PR = "r16" SRC_URI_OVERRIDES_PACKAGE_ARCH = "0" PACKAGE_ARCH_tslib-conf = "${MACHINE}" @@ -9,7 +9,7 @@ PACKAGE_ARCH_ramses = "${MACHINE}" SRC_URI = "cvs://cvs:@pubcvs.arm.linux.org.uk/mnt/src/cvsroot;module=tslib \ file://ts.conf \ - file://ts.conf-h3600 file://ts.conf-h3600-2.4 \ + file://ts.conf-h3600 file://ts.conf-h3600-2.4 file://ts.conf-h2200 \ file://ts.conf-corgi file://ts.conf-corgi-2.4 \ file://tslib.sh \ file://initialize_djs.patch;patch=1 \ @@ -45,7 +45,7 @@ do_install_append() { case ${MACHINE} in h3600 | h3900) install -d ${D}${datadir}/tslib - for f in ts.conf-h3600 ts.conf-h3600-2.4; do + for f in ts.conf-h3600 ts.conf-h3600-2.4 ts.conf-h2200; do install -m 0644 ${WORKDIR}/$f ${D}${datadir}/tslib/ done rm -f ${D}${sysconfdir}/ts.conf |