欢迎来到天天文库
浏览记录
ID:40530405
大小:50.50 KB
页数:8页
时间:2019-08-04
《Android触摸屏驱动(2.6内核)分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、s3c2410触摸屏驱动(2.6内核)分析来源:ChinaUnix博客 日期:2007.10.1521:15 (共有条评论)我要评论 s3c2410触摸屏驱动(2.6内核)分析 驱动不是很多,在此把它贴出来然后加上必要的注释:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include/*Forts.d
2、ev.id.version*/#defineS3C2410TSVERSION 0x0101#defineWAIT4INT(x)(((x)");MODULE_DESCRIPTION("s3c2410touchscreendriver");MODULE_LICENSE("GPL");/**Definitions&globalarrays.*/staticchar*s3c2410ts_name="s3c2410TouchScreen";/**Per-touchscreendata.*/structs3c2410ts{ structinput_devdev;
3、 longxp; longyp; intcount; intshift; charphys[32];};staticstructs3c2410tsts;staticvoid__iomem*base_addr;staticinlinevoids3c2410_ts_connect(void){ s3c2410_gpio_cfgpin(S3C2410_GPG12,S3C2410_GPG12_XMON); s3c2410_gpio_cfgpin(S3C2410_GPG13,S3C2410_GPG13_nXPON); s3c2410_gpio_cfgp
4、in(S3C2410_GPG14,S3C2410_GPG14_YMON); s3c2410_gpio_cfgpin(S3C2410_GPG15,S3C2410_GPG15_nYPON);}staticvoidtouch_timer_fire(unsignedlongdata){ unsignedlongdata0; unsignedlongdata1; intupdown; /* 读取stylus的状态 0=Stylusdownstate 1=Stylusupstate */ data0=
5、readl(base_addr+S3C2410_ADCDAT0); data1=readl(base_addr+S3C2410_ADCDAT1); updown=(!(data0&S3C2410_ADCDAT0_UPDOWN))&&(!(data1&S3C2410_ADCDAT1_UPDOWN)); /* 更新stylus状态寄存器updown: 1=down 0=up */ /* touch_timer_fire这个函数主要实现以下功能: 1、stylusdown的时候,在中断函数stylus_up
6、down里面被调用, 此时缓存区没有数据,ts.count为0,所以只是简单的设置ad转换的模式,然后开启ad转换。 2、但ADC中断函数stylus_action把缓冲区填满的时候,作为中断后半段函数稍后被调用, 此时ts.count为4,算出其平均值后,交给事件处理层(EventHandler)处理, 主要是填写缓冲,然后唤醒等待输入数据的进程。 3、stylus抬起,等到缓冲区填满后(可能会包含一些无用的数据)被调用, 这时候判断出stylusup,报告stylusup事件,重新等待stylusdo
7、wn。 if(updown){ if(ts.count!=0){ /*求平均值*/ ts.xp>>=ts.shift; ts.yp>>=ts.shift;#ifdefCONFIG_TOUCHSCREEN_S3C2410_DEBUG { structtimevaltv; do_gettimeofday(&tv); printk(DEBUG_LVL"T:%06d,X:%03ld,Y
8、:%03ld",(int)tv.tv_usec,ts.xp,t
此文档下载收益归作者所有