Android触摸屏驱动(26内核)分析.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android触摸屏驱动(26内核)分析

触摸屏驱动(2.6内核)分析 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 驱动不是很多,在此把它贴出来然后加上必要的注释: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* For ts.dev.id.version */ #define S3C2410TSVERSION? ? 0x0101 #define WAIT4INT(x) (((x)); MODULE_DESCRIPTION(s3c2410 touchscreen driver); MODULE_LICENSE(GPL); /* * Definitions global arrays. */ static char *s3c2410ts_name = s3c2410 TouchScreen; /* * Per-touchscreen data. */ struct s3c2410ts { ? ? struct input_dev dev; ? ? long xp; ? ? long yp; ? ? int count; ? ? int shift; ? ? char phys[32]; }; static struct s3c2410ts ts; static void __iomem *base_addr; static inline void s3c2410_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; ? ?? ?/* ? ?? ???读取stylus的状态 ? ?? ?? ?0 = Stylus down state ? ?? ???1 = Stylus up state ? ?? ? */ ? ?? ?data0 = 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、stylus down的时候,在中断函数stylus_updown里面被调用, ? ?? ?? ?此时缓存区没有数据,ts.count为0,所以只是简单的设置ad转换的模式,然后开启ad转换。 ? ?? ?2、但ADC中断函数stylus_action把缓冲区填满的时候,作为中断后半段函数稍后被调用, ? ?? ?? ? 此时ts.count为4,算出其平均值后,交给事件处理层(Event Handler)处理, ? ?? ?? ?主要是填写缓冲,然后唤醒等待输入数据的进程。 ? ?? ?3、stylus抬起,等到缓冲区填满后(可能会包含一些无用的数据)被调用, ? ?? ?? ?这时候判断出stylus up,报告stylus up事件,重新等待stylus down。 ? ???if (updown) {? ?? ?? ?? ?? ?? ?? ?? ? ? ?? ?? ?if (ts.count != 0) {? ??? ? ?? ?? ?? ?? ?/* 求平均值 */ ? ?? ?? ?? ? ts.

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档