[CentOS] IBM Touchscreen

Wed Mar 31 14:58:27 UTC 2010
Janez Kosmrlj <postnalista at googlemail.com>

On Thu, Mar 18, 2010 at 12:39 PM, John Doe <jdmls at yahoo.com> wrote:

> From: Janez Kosmrlj <postnalista at googlemail.com>
> >On Mon, Mar 15, 2010 at 1:04 PM, Janez Kosmrlj <
> postnalista at googlemail.com> wrote:
> >>>Hi, i have some old IBM USB touchscreens, that insist on not working
> correctly under CentOS. I tried to use the 3m driver and the elousb driver,
> but none of them work.
> >>The touch part works out of the box witohut any drivers, but i can't find
> a way to calibrate them The y axis is inverted and the X axis is a bit off.
> >>Here is the output form lsusb:
> >>Bus 003 Device 002: ID 0596:0001 MicroTouch Systems, Inc. Touchscreen
>
> Google gives:
> http://cateee.net/lkddb/wemaintenace.b-lkddb/TOUCHSCREEN_USB_COMPOSITE.html<http://cateee.net/lkddb/web-lkddb/TOUCHSCREEN_USB_COMPOSITE.html>
>
> JD
>
>
>
> _______________________________________________
> CentOS mailing list
> CentOS at centos.org
> http://lists.centos.org/mailman/listinfo/centos
>

I found the solution, if anyone is interested.
First, this is not an ibm touch monitor, it was conwerted in a local shop. I
found that later, when i did some digging. It uses an MicroTouch matrix.
Microtouch is now used by 3m so you can get the drivers from 3m touch
systems. The trick is, that this kind of devices don't work with the new
driwers that are marked as "Linux kernel 2.6". You have to use the old
drivers marked as "Linuy Kernel 2.4". Dont worry, when you read the readme
file, you see that the drivers also work on 2.6 kernels. When downloaded you
get an source rpm. To sucessfully build the rpm on CentOS 5.4 you have to
unpack the rpm and modify the sources according to the attached document
(Touchware for Linux Kernel Module Issues.txt (google for the file name, i
don't know what the policy for attaching files is on this list)). After
modifying is just a matter of rpmbuld and installing rpm.

Regards

Janez
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.centos.org/pipermail/centos/attachments/20100331/93a1a304/attachment-0005.html>
-------------- next part --------------
? 
APPLICATIONS ENGINEERING NOTE
3M Touch Systems, Inc.
300 Griffin Brook Park Drive
Methuen, MA 01844
Phone:  978-659-9000
Fax:  978-659-9100
www.3Mtouch.com
Affected Product: The MicroTouch?  Software Suite TouchWare for Linux
© 2006 3M. ?All Rights Reserved.
TouchWare for Linux Kernel Module Issues
Date Originated: 3 August 2006
Created by: Damir Suljic
Date Revised:  21 May 2007
Revised by: Damir Suljic

Overview
The TouchWare for Linux Software, part of the MicroTouch? Software Suite, uses a kernel module for the Linux kernel 2.4 and 2.6 operating system. This module is responsible for communicating with the touch screen controllers in a touch system.
This document details known issues with kernel module not jet resolved or incorporated into released product.  It gives basic steps to resolve the problems on users? site, and describes suggested changes required on source RPMs.
The document first covers a build process of the kernel module and structure of source RPM. It explains how to customize the Source RPM and deploy it on target systems with new changes. The list of known issues will follow including problem description and details about system affected.   
Source RPM Build and Structure
TouchWare package is in form of Source RPM and main reason for this is Kernel module included in this package. In one Linux system the kernel module needs to be built and linked against current kernel version, and since Linux has vast number of kernel versions available we decided to allow users to build our package against their version. Now with every new version it is possible to hit a situation where kernel module will not build or will not load on target system.
After initial installation of source RPM into build directory (usually ?/usr/src/<rpm directory>?) the building binary RPM (all this is described in Readme file included in package) will have either failure while building or while installing binary RPM. In both cases you will have to investigate in more details what and where in process the errors were happening. In case of build error the command line output will give more information what file did fail to build. If binary RPM build successfully but after installing it kernel module did not load, you can check this by issuing ?lsmod? in command line and look for TWDrv, check ?/var/log/messages? file for errors related to TWDrv (?invalid module format?, ?unresolved sysmbols?, etc).
Customization of Source RPM
To make changes on source RPM you will have to extract TWDrvSoureces.tgz file (usually found in ?/usr/src/<rpm directory>/SOURCES? directory) in temporary directory ?/usr/tmp/mytemp?. After extracting sources change directory to ?/usr/src/mytemp? and you will see directories and files from our package. One of the directories is TwDrvKit where the kernel module files are located. Make needed changes on TWDriver.c file. Test build it by issuing make command, and insert module with ?insmod TWDrv.ko?.
If the changes were acceptable, change directory to ?/usr/tmp/mytemp? and issue ?tar ?czf TWDrvSources.tgz *? (it is * for all files in current directory). Copy newly created .tgz file into SOURCES directory and build binary RPM again. For more questions about RPM customization consult Linux RPM documentation.

List of Known Issues:
In the list of known issues we will include distribution and kernel version, short description of problem and possible solution.
Fedora Core 5 kernel version 2.6.15-1.2054_FC5
This particular issue is probably only related to this specific kernel version. The package builds without error but after installation the kernel module fails to load. The log file contains following error related to TWDrv module: ?unresolved symbol print_tainted?. The reason of failure is that function was not compiled into kernel.
Resolution: Change TWDriver.c file:
After the line:
static void TWDrv_ReleaseOpenLock (DEVICE_EXTENSION * pDevExit);
Add line
const char *print_tainted(void){ return NULL;};
This change is probably not needed for future kernel releases.
Fedora Core 5 kernel version 2.6.17-1.2157_FC5
CentOS 4.2  kernel version 2.6.9.22.EL
In this case the kernel module fails to build. The build errors point to TWDriver.c file starting line 108 ?error: expected ')' before string constant?. The reason for this failure is change in kernel include files against which the module is built. The macro MODULE_PARM does not exist anymore.
Resolution:  Replace all MODULE_PARAM macros with new function call in TWDriver.c file:
1. Replace Lines:
MODULE_PARM (TWDrv_pszSerialPath, "s");
With lines:
#ifndef MODULE_PARM
module_param(TWDrv_pszSerialPath, charp, 0000);
#else
MODULE_PARM (TWDrv_pszSerialPath, "s");
#endif
2. Replace Line:
MODULE_PARM (TWDrv_nMaxSerial, "i");
With lines:
#ifndef MODULE_PARM
module_param(TWDrv_nMaxSerial, int, 0000);
#else  
MODULE_PARM (TWDrv_nMaxSerial, "i");
#endif
3. Replace Line:
MODULE_PARM (TWDrv_nMajorNumber, "i");
With lines:
#ifndef MODULE_PARM
module_param(TWDrv_nMajorNumber, int, 0000);
#else  
MODULE_PARM (TWDrv_nMajorNumber, "i");
#endif
4. Replace Line:
MODULE_PARM (TWDrv_nMinSerial, "i");
With lines:
#ifndef MODULE_PARM
module_param(TWDrv_nMinSerial, int, 0000);
#else  
MODULE_PARM (TWDrv_nMinSerial, "i");
#endif
5. Replace Line:
MODULE_PARM (TWDrv_nSerialTimeOut, "i");
With lines:
#ifndef MODULE_PARM
module_param(TWDrv_nSerialTimeOut, int, 0000);
#else  
MODULE_PARM (TWDrv_nSerialTimeOut, "i");
#endif

In addition to the previous changes the both distributions require changes to accommodate Xfree86 switch to Xorg. The binary driver will work but the driver?s installation tree has changed.  

Resolution:  In order to resolve this change TWDrv.spec file in SPECS directory before building binary RPM and new source RPM.
The changes in spec file are:
1. After line 81 (in "%install" section) add following two lines:

mkdir -p ${RPM_BUILD_ROOT}/usr/lib/xorg/modules/input
install -o root -g root -m444 Xfree4.0.3/TWXinput_drv.o  ${RPM_BUILD_ROOT}/usr/lib/xorg/modules/input

2. After line 173 in original file (in %files section) add one line:
/usr/lib/xorg/modules/input/TWXinput_drv.o
   
After completing all the changes rebuild binary RPM and new source RPM with following command:

	rpmbuld  -ba TWDrv.spec

Latest kernel from kernel.org starting with version 2.6.18
This particular issue is probably related to all newer kernel versions. The build errors point to TWDriver.c file with message ?devfs_fs_kernel.h? file not found.
Resolution: Change TWDriver.c file:
Find and delete the line:
#include <linux/devfs_fs_kernel.h>;

Latest kernel from kernel.org starting with version 2.6.20
The macro ?SLAB_ATOMIC? definition is abandoned in all newer kernel versions. The build errors point to TWDriver.c file with message: error: 'SLAB_ATOMIC' undeclared (first use in this function).
Resolution: Change TWDriver.c file:
Find and replace all instances of ?SLAB_ATOMIC? with ?GFP_ATOMIC? macro.

MicroTouch, the MicroTouch logo, and ClearTek are either registered trademarks or trademarks of 3M in the United States and/or other countries.  Windows and/or other Microsoft products referenced herein are either registered trademarks or trademarks of Microsoft Corporation in the U.S. and/or other countries. 









P/N xxxxx	3M Touch Systems Inc. Proprietary Information	     Page  PAGE 1

 AUTHOR MicroTouch Systems	Page  PAGE 1	 FILENAME TouchWare for Linux Driver IO.doc