基于ARM嵌入式系统的触摸屏驱动程序开发.doc
西安文理学院机械电子工程系本科毕业设计(论文)题 目 基于ARM嵌入式系统的触摸屏驱动程序开发专业班级 08级自动化(2)班 学 号 08103080227 学生姓名 赵凯 指导教师 雷俊红 设计所在单位 自动化 2012年5月西安文理学院本科毕业设计(论文)评阅教师评分表学生姓名赵凯学 号08103080227专 业自动化班 级08级(2)班毕业设计(论文)题目基于ARM嵌入式系统的触摸屏驱动程序开发设计(论文)起止时间 2012年 1月 10日至 2012年 5月 12日评阅教师评语:(应从选题、写作规范、问题论证或说明效果等方面对论文进行评述)建议成绩:评阅教师签名: 年 月 日西安文理学院本科毕业设计(论文)答辩记录学生姓名赵凯学 号08103080227专业名称自动化答辩时间2012年5月 12日答辩地点B0209指导教师雷俊红题 目基于ARM嵌入式系统的触摸屏驱动程序开发答辩小组成 员姓 名职 称姓 名职 称提问及回答情况记录: 记录人签字: 年 月 日答辩成绩:答辩小组组长签名: 年 月 日毕业论文成绩答辩委员会认定成绩毕业论文等级系(院)答辩委员会意见:负责人签名: 年 月 日注:1、毕业论文成绩=指导教师成绩×40%评阅教师成绩×20%答辩成绩×40%;2、答辩委员会认定成绩是根据该生毕业设计期间的表现及该专业整体论文情况的综合评定成绩。3、论文等级分优秀(90分)、良好(8089分)、中等(7079分)、及格(6069分)、不及格(<60分)。基于ARM嵌入式系统的触摸屏驱动程序开发摘要:随着多媒体信息的与日俱增,传统的人机交互的速度已经不能满足需求,传统的人机交流是通过键盘或鼠标来实现的。信息交换的速度比较慢,而且要求操作者具有一定的专业知识。这将使信息交流的目的大打折扣。触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备,已取代键盘,越来越受到各种终端产品商的重视。 基于 Linux 的嵌入式系统目前获得到了广泛应用,在嵌入式 Linux 核心层的开发中,设备驱动分为字符设备、块设备和网络接口设备,触摸屏驱动属于字符设备,但它也可以被纳入input输入子系统的框架下。通过毕业设计的驱动程序开发,也希望能对国家在这方面的发展做出自己的一点贡献。本论文介绍了触摸屏的分类和原理,接着概要介绍嵌入式系统的相关原理理论,然后详细介绍了整个系统的开发环境,最后对整个触摸屏驱动系统进行了分析,讨论了系统具体实现。关键词:Linux操作系统;触摸屏;程序开发;交叉编译;NFSDevelopment of touch screens driver based on ARM embedded systemAbstract:With the increasing of the required information,touch screen has impact on more and more peoples daily life,touch screen is not only easy to operate,but also has the performances of durable,fast reaction speed and friendly HMI(man-machine interaction).Now,embedded system has been applied widely,in the development of embedded kerner,the development of the device driver occupy most of the workload.it isnt easy to develop good driver.Therefore,I can master the framework and development process by completing the development of touch screen base on ARM embedded system.This paper introduces the classification of touch screen drivers and principle.Then,an overview of the relevant principles of embedded sytems theory,and then details the development environment of the system.Finally,the touch screen driver are analyzed to discuss the system implemenation.Keywords:Linux perating system;Touch screen;Driver development;Cross compiling;NFS目录1 绪论1.1 设计目的 ·······················································11.2 设计环境 ·······················································11.3 设计总体要求····················································12 方案设计2.1 系统硬件平台····················································2 2.1.1 ADC和触摸屏接口介绍·······································22.1.2电阻式触摸屏的工作原理······································52.2 系统软件平台····················································72.2.1 软件简介···················································72.2.2 软件基本操作···············································72.2.3 嵌入式驱动程序基础·········································8 3 嵌入式系统开发环境的搭建3.1 建立交叉编译环境················································93.2 配置超级终端····················································93.3 配置网络文件系统NFS服务·······································104 嵌入式设备驱动程序开发4.1编写触摸屏设备驱动程序··········································11 4.1.1 Linux输入子系统介绍········································114.1.2驱动程序的实现原理和步骤···································124.2 运行程序·······················································124.3.1 烧写程序··················································135 结束语·····························································14致谢··································································15参考文献······························································16附录A 驱动源程序······················································17附录B 英文资料························································22附录C 英文资料翻译····················································31第一章 绪论1.1 毕业设计目的随着多媒体信息的与日俱增,传统的人机交互的速度已经不能满足需求,传统的人机交流是通过键盘或鼠标来实现的。信息交换的速度比较慢,而且要求操作者具有一定的专业知识。这将使信息交流的目的大打折扣。触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备,已取代键盘,越来越受到各种终端产品商的重视。 基于 Linux 的嵌入式系统目前获得到了广泛应用,在嵌入式 Linux 核心层的开发中,设备驱动分为字符设备、块设备和网络接口设备,触摸屏驱动属于字符设备,但它也可以被纳入input输入子系统的框架下。通过毕业设计的驱动程序开发,也希望能对国家在这方面的发展做出自己的一点贡献。本论文介绍了触摸屏的分类和原理,接着概要介绍嵌入式系统的相关原理理论,然后详细介绍了整个系统的开发环境,最后对整个触摸屏驱动系统进行了分析,讨论了系统具体实现。1.2 毕业设计环境 硬件环境为PC机一台,GT2440开发板一套(带有3.5寸,分辨率为320X240的4线式电阻屏),CPU处理器采用三星S3C2440A 主频400,最高能达到533 MHZ,内存为64M SDRAM,存储为256M Nand Flash、2M Nor Flash,支持Linux 2.6.30版本操作系统;软件为Redhat9.0 Linux2.4.0版本操作系统, Vmware5.0虚拟机和Windows系统的超级终端1.3 毕业设计总体要求 完成虚拟机和Redhat9.0的安装,配置网络文件系统NFS,搭建交叉编译环境,完成触摸屏的驱动程序和应用程序的开发。第二章方案设计2.1系统硬件平台开发板的处理器是基于ARM 920T 核心的S3C2440A,它集成了众多外围设备,其中包括4线电阻式触摸屏控制器,8路模拟输入通道。在8路A/D转换通道中,A7和A5作为触摸屏的X,Y坐标的采集通道。图2.1 触摸屏接线图S3C2440提供了nYPON,YMON,nXPON和XMON信号直接作为触摸屏的控制信号,通过其控制外部晶体管的打开与关闭实现触摸屏的引脚状态的切换。2.1.1 ADC和触摸屏接口介绍10位COMS的是有通道模拟输入的循环类型设备,最大的转换率是在2.5MHZ,转换时种下达到500KSPS,转化器支持片上采样和保存功能及掉电模式。触摸屏接口可以控制或选择触摸屏触点用于坐标的转换,触摸屏接口包括触摸点控制逻辑和有中断产生逻辑的接口逻辑。下图为转换器和触摸屏接口的功能模块图,注意转换器设备是一个循环类型。(1)ADC特点分辨率:12位;最大转换率:500KSPS;供电电压:3.3V;输入模拟电压范围:03.3V。(2)触摸屏接口模式正常转换模式单个转化模式可能是使用在通用目的的ADC转换。该模式可以通过设置ADCCON(控制寄存器)来初始化并且完成对ADCDATE0的读写操作(ADC数据寄存器0)。 分离XY坐标转换模式触摸屏控制器可以在两种转换模式中的一种模式下操作。分离的XY坐标转换器模式由以下方法操作。X坐标模式写X坐标转换数据到ADCDAT0,触摸屏皆苦产生中断源到中断控制器;Y坐标模式写Y坐标转换数据到ADCDAT1,触摸屏皆苦产生中断源到中断控制器。 自动(连续)XY坐标转换模式自动(连续)XY坐标转换模式是如下操作,触摸屏控制器连续的转换X坐标和Y坐标。在触摸屏控制器写X测量数据到ADCDAT0且写Y测量数据到ADCDAT1后,触摸屏接口产生中断源到自动坐标模式下的中断控制器。 等待中断模式当光标按下,触摸屏控制器产生中断信号(INC_TC)。触摸屏控制器的等待中断模式必须设定为触摸屏接口中触点的状态(XP,XM,YP,)。在触摸屏控制器产生中断信号(INC_TC),等待中断模式必须要被消除。(XY_PST设置到无操作模式)(2)ADC及触摸屏接口特殊控制器ADC控制寄存器(ADCCON)表2.2 ADC控制寄存器ADC触摸屏控制寄存器表2.3 ADC触摸屏控制寄存器 ADC开始延时寄存器表2.4 ADC开始延时寄存器 ADC转换数据寄存器0表2.5 ADC转换数据寄存器0 ADC转换数据寄存器1表2.6 ADC转换数据寄存器1 ADC触摸屏起落中断检测寄存器表2.7 ADC触摸屏起落中断检测寄存器2.1.1 电阻式触摸屏的工作原理 由于本次毕业设计采用电阻触摸屏,所以重点介绍四线式电阻触摸屏触摸屏系统是一种人机交互设备,其结构如图,将触摸屏安装在LCD显示屏上,配以相应的控制电路对触摸屏和LCD进行控制,用户通过触摸操作就可以实现同触摸屏系统相连接的设备进行信息交互。设计采用四线电阻式接触屏,包含两层透平,均匀导电的ITO层,分别作为X电极和Y电极,它们之间由细微绝缘点隔开。X电极和Y电极的正负端由“导电条”分别从两端引出,且X电极和Y电极导电条的位置相互垂直,引出端X-,X+,Y-,Y+共4条线。图2.8 触摸屏原理图2.9 触摸屏的触摸示意图当有物体接触触摸屏表面并施以一定的压力时,上层的ITO导电层发生形变与下层ITO发生接触,形成可等效为图2的分压电路。控制器通过下述方法即可确定触摸点位置: 在X+电极施加驱动电压,X-电极接地,Y+作为引出端测量得到接触点的电压,触点电压与驱动电压之比等于触点X坐标与屏宽度之比,得到X坐标。 在Y+电极施加驱动电压,Y-电极接地,X+作为引出端测量得到接触点的电压,触点电压与驱动电压之比等于触点Y坐标与屏宽度之比,得到Y坐标。因此,计算触摸点的坐标首先需要对触摸屏的引脚电平进行切换控制,使其处于合适的坐标。然后通过转换采集到的接触点电压值,进行相应的计算。图2.9 触摸屏等效电路图2.2系统软件平台软件平台使用Linux操作系统自带的Vi文本编辑器。2.2.1 软件简介Vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们只要使用的文本编辑工具,足见其生命力之强,而强大的生命力是其强大的功能带来的。Vi有三种模式,分别是命令行模式、插入模式及低行模式。命令行模式:在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”灯操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字。插入模式:只有在该模式下,用户才能进行文字编辑和输入,用户可按【Esc】键回到命令行模式。低行模式:在该模式下,光标位于屏幕的低行。用户可以进行文件保存或退出操作,也可以设置编辑环境。2.2.2 软件基本操作(1).进入Vi,即在命令行下输入Vi 文件名。此时进入的是命令模式,光标位于屏幕的上方。(2).在命令行模式下输入i进入插入模式。可以看出,在屏幕底部显示有“插入”字样表示插入模式,在该模式下可以输入文字信息。(3).最后按“【Esc】”,则当前模式转入命令行模式,并在低行中输入“:wq”进入低行模式。wq(存盘保存),q(退出Vi),q!(强制退出)等。2.2.3 嵌入式驱动程序基础(1)设备驱动程序概述 设备文件 嵌入式Linux的一个重要特点就是将所有的设备都当做文件进行处理,所以设备驱动程序也就是设备文件。设备文件分为三类:字符型设备文件、块设备文件或网络接口设备文件。 字符设备文件通常指不需要缓冲就能够直接读写的设备,它们以字节为单位进行读写。 块设备文件通常指仅能以块为单位读写的设备,一般块的大小为512字节的整数倍。 网络接口设备文件通常指网络设备访问的接口。 设备驱动程序和用户应用程序设备驱动程序可以理解为操作系统的一部分,它的作用就是让操作系统能正确识别和使用设备。对于不同的硬件设备,其对应的设备驱动程序也是不同的。设备驱动程序与用户应用程序是不同的,设备驱动程序是用户应用程序与硬件设备之间的一个中间软件层。设备驱动程序运行在内核空间,而用户应用程序则运行在用户空间。嵌入式操作系统通过系统调用和硬件中断来完成从用户空间到内核空间的控制转移。(2)设备驱动程序的加载过程 设备号 嵌入式Linux系统通过设备号来区分不同设备,设备号分为主设备(0255)和次设备。一般在/proc目录下的devices文件中记录了系统中处于活动状态的设备的主设备号。 设备进入点 对每个设备都要定义一个设备进入点,该设备进入点的名称称为设备名。 使用mknod命令在文件系统中创建一个设备进入点。命令格式为:mknod /dev/设备名 type major minor type为设备类型,c为字符设备;b为块设备。命令为:Mknod /dev/ts_driver c 255 o 加载设备驱动程序 加载设备驱动程序: insmod 设备驱动程序名.O 命令为:insmod ts_driver.o 查看当前加载了哪些设备驱动程序:lsmod l 卸载设备驱动程序: rmmod 设备驱动程序名.O 设备驱动程序加载与卸载的工作过程 在用户空间通过命令insmod向内核空间加载设备驱动程序模块,此时程序的入口点是初始化函数init_module(),在该函数中完成设备的注册。完成设备注册加载之后,系统将设备驱动加载到内核中,在用户空间的用户应用程序就可以通过调用驱动程序的功能接口函数对该设备进行操作。设备用完之后,可以再用户空间通过移除已加载的驱动设备命令rmmod将设备卸载,此时的入口点是cleanup_module函数,在该函数中完成设备的卸载。 第三章 嵌入式系统开发环境的搭建绝大多数的软件开发都是以本地编译方式进行的,即在本机上开发编译、本机上运行的方式。但是,由于开发板上没有足够的资源来运行开发工具和调试工具。因此嵌入式系统软件的开发通常采用交叉编译的方式。所谓交叉编译,就是指在一个硬件平台上生成可以在另一个不同硬件平台上执行的代码。3.1 建立交叉编译环境 将arm-linux-gcc-4.3.3.tar.gz拷贝到目录/opt下,然后进入该目录,执行解压命令: #mv arm-linux-gcc-4.3.3.tar.gz /opt#cd /tmp #tar xvzf arm-linux-gcc-4.3.3.tar.gz C 然后再运行如下命令: #gedit /root/.bashrc 在打开的文件的末尾加上如下内容: export PATH=$PATH:/opt/usr/locla/arm/4.4.3/bin 然后保存退出 重新登录Redhat系统,使以上设置生效,在命令行输入arm-linux-gcc v,会出现arm-linux-gcc的版本号,这说明交叉编译环境已经安装成功。3.2 配置超级终端 超级终端程序通常位于windows系统的“开始->程序->附件->通讯”中,选择运行该程序,一般会弹出提示窗口,询问你是否将HyperTerminal作为默认的telnet程序,此时选择“否”。 接下来弹出来的窗口,选择“取消”。 此时系统提示“您确定要取消吗?”,选择“是”,接着点击提示窗口的“确定”,进入下一步。 超级终端会要求你为新的连接取个新的名字,我在配置的时候取的是“tty”。 当你命名完以后,又会跳出一个对话框,选择开发板的串口,我选择的是串口4. 最后一步,最重要的一步,数据流控制必须选择“无”,另外板子的串口波特率设为115200。 当所有的参数都设置好后,超级终端就配置好了。3.3 配置网络文件系统NFS服务 在配置NFS服务之前,先使用查看一下Linux系统在安装的时候是否已经安装了NFS服务,方法如下:输入命令setup,然后在出现的蓝色窗口中选择System services,进入后,如果看到选项前的中括号有“*”,表示已经被选中,如果没有,就表示没选中;现在选中NFS服务,去掉iptables,然后保存退出。 接下来运行命令 #gedit /etc/exports 在打开的NFS服务的配置文件中添加以下内容: /home/share 192.168.1.230(rw,sync,no_root_squash) 其中:/home/share表示NFS共享目录,它可以作为开发板的根文件系统192.168.1.230是开发板的IP地址,注意IP地址前有空格。(这里的IP地址可以用*代替,表示所有的客户机都可以挂载次 目录)rw表示挂载次目录的客户机多该目录有读写的权力sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘no_root_squash表示允许挂载次目录的客户机有该主机的root身份然后保存退出。最后使用/etc/init.d/nfs stop和 /etc/init.d/portmap stop命令停止NFS服务和端口监听服务,再用/etc/init.d/nfs start和 /etc/init.d/portmap start命令重新启动NFS服务和端口监听服务使之配置生效。第四章 嵌入式设备驱动程序开发4.1编写触摸屏设备驱动程序4.1.1 Linux输入子系统介绍在Linux中,输入子系统是由输入子系统设备驱动、输入子系统核心层(Input Core)和事件输入层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交层给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心设备文件的操作,而是要关心对各硬件寄存器的操作和提交的输入事件。下面用图形来描述一下这三者的关系吧!图4.1 输入子系统结构图4.1.2驱动程序的实现原理与步骤 (1).驱动程序的实现原理在Linux中,Input设备用input_dev结构体描述,定义在input.h中。设备驱动的实现步骤:在驱动模块加载函数中设置Input设备支持input子系统的哪些事件;将Input设备注册到input子系统中;在Input设备发生输入操作时,提交所发生的事件及对应的键值/坐标等状态。 (2).驱动程序实现过程建立触摸屏程序ts_driver.c,首先实现加载和卸载部分,在驱动加载部分:启用ADC所需要的时钟、映射IO口、申请中断(触摸屏中断和ADC中断)、初始化输入设备、将输入设备注册到输入子系统中。图4.2 程序框架图源程序见附录A4.2 运行程序4.2.1 烧写程序将编译好的可执行文件下载到目标板,我通过在网络上收集了资料总结了以下四种方式:第一种:使用U盘或者其他可移动设备第二种:通过NFS直接运行第三种:通过串口下载文件到开发板第四板:通过网络下载文件到开发板(1) 使用U盘方法:先把编译好的可执行程序复制到U盘,在U盘插到目标板上并挂载,然后把程序拷贝到目标板的可执行目录/bin。(2) 通过网络文件系统NFS执行方法:前提是先按照3.3节搭建好NFS服务器系统,然后在超级终端中输入命令#mount t nfs o nolock 192.168.1.22:/home/share /mnt/nfs192.168.1.22为宿主机的IP地址,/home/share是宿舍机上的共享目录;/mnt/nfs是目标机上的共享目录。这样就挂载成功了,只要把需要执行文件复制到共享文件中,然后再目标机的超级终端上执行即可。第五章 结束语本次毕业设计顺利完成了触摸屏驱动开发的设计,完成了毕业设计的基本要求。在本次毕业设计中,NFS服务系统的配置是最基本的东西,虽然从理论上来说不是太难,但是实际操作时遇到了不少问题,不过通过在网上找寻的资料和同老师、同学的交流下,得到了解答;在设备驱动的开发中,虽然也很难,但是这些东西都是框架式的,网上很多,只需修改一下,满足自己的硬件平台即可。应用相当来说不是太难,只要注意到一些特有的函数,库文件,问题不是太大。通过这次毕业设计,对Linux中的一些常用命令又回顾了一遍,并且也加深了印象,对Linux下设备驱动程序的开发也有了基本的认识,感觉学到了很多东西,对不会的知识有一定的了解;对熟悉、学过的知识又复习了一遍,理解更加深刻,也加深了印象。接下来,我对在这次课程设计中遇到的问题和解决方法进行个总结:1. 目标板和宿主机不能Ping通解决方法:(1) 看交叉网线是否接触正常 (2) 检查开发板上的网口驱动是否挂载 (3) 开发板的IP地址必须要和宿主机的IP地址在一个IP段内,例如192.168.1.*和192.168.1.*就在一个IP段内 (4) 关闭Linux的防火墙2. 使用NFS共享目录时,挂载共享目录不成功解决方法:(1) 检查目标板和宿主机是否能Ping通(这是基础)(2)查看NFS服务和端口监听服务的状态(命令分别是/etc/init.d/nfs status /etc/init.d/portmap status),如果是关闭请打开(命令分别是/etc/init.d/nfs start /etc/init.d/portmap start)3. 由于对Linux内核不熟悉,所以在分析触摸屏的驱动代码时,遇到了不少问题解决方案:(1) 通过对网上的教学视频和资料的学习,初步了解了其构架 (2) 分析代码中所用到的函数和宏定义 4. makefile的编写问题,经常出错 这个问题不好解决,因为makefile文件的编写比较难,不是短时间能解决的。在课程设计中,大的问题基本上就遇到了这么多,还有很多小问题,在谷歌上一搜就有,关于技术方面的问题,最好是在谷歌上搜,感觉比百度全。总之,我相信有付出就有回报!致谢本课题的研究探讨以及论文撰写一直都是在雷俊红老师的细心指导下进行的,可以说其中的每个环节都倾注了雷俊红老师的智慧和心血,在此表示感谢。参考文献1杜春雷 . ARM体系结构与编程 . 北京:清华大学出版社,2003.2张思民 . 嵌入式系统设计与应用 . 北京:清华大学出版社,2008.3冯国进 . 嵌入式Linux驱动程序设计从入门到精通 . 北京:清华大学出版社,2008.4马忠梅等 . ARM & Linux嵌入式系统教程 . 北京:北京航空航天大学出版社,20045魏永明等译 . LINUX设备驱动程序 . 北京:中国电力出版社,20066张晓林等 . 嵌入式系统设计与实践 . 北京:北京航空航天大学出版社,2006附录A 驱动源程序驱动源程序 /* ts_driver.c*/#include <linux/kernel.h>#include <linux/errno.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/input.h>#include <linux/init.h>#include <linux/serio.h>#include <linux/delay.h>#include <linux/platform_device.h>#include <linux/clk.h>#include <asm/io.h>#include <asm/irq.h>#include <plat/regs-adc.h>#include <mach/regs-gpio.h>#define S3C2410TSVERSION0x0101#define WAIT4INT(x) (x)<<8) | S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_XY_PST(3)#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0)static char *gt2440ts_name = "GT2440 TouchScreen"staticstruct input_dev *dev; staticlong xp; staticlong yp;staticint count;extern struct semaphore ADC_LOCK; static int OwnADC = 0; static void _iomem *base_addr;static inline void gt2440_ts_connect(void)s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON); s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);static void touch_timer_fire(unsigned long data) unsigned long data0; unsigned long data1;int updown; data0 = ioread32(base_addr+S3C2410_ADCDAT0); data1 = ioread32(base_addr+S3C2410_ADCDAT1); updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN) && (!(data1 & S3C2410_ADCDAT0_UPDOWN); if (updown) if (count != 0) xp >>= 2; yp >>= 2; input_report_abs(dev, ABS_X, xp); input_report_abs(dev, ABS_Y, yp); input_report_key(dev, BTN_TOUCH, 1); input_report_abs(dev, ABS_PRESSURE, 1); input_sync(dev); xp = 0; yp = 0; count = 0; iowrite32(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC); iowr