【工作交接】 Touch Screen 模拟按键实现

Natalie2-uo Touch Screen驱动说明及Bug修改记录

 

简介:

Natalie2TouchDVT2及后续阶段采用的是Jtouch的模组,而Jtouch又用的新思(Synaptics)的IC.而在EVTDVT1部分机器用的是Atmel的电容屏。但是在软件上是做的自动侦测,发现是哪块电容屏就加载哪个电容屏的驱动,而且采样率都差不多是80HZ/S,这是相同点。不同点是Synaptics的屏没有噪声干扰,在IC内部的Firmware里都做了处理,而Atmel的屏没有Debug噪声问题,因为当时只有一小部分机器用的Atmel屏。没有时间去维护一个项目两块屏。

从硬件角度上来看,主控区(Main Part Region)和四个按键区(SoftKey Region)就是一个整屏,大小为1750(横向)*3052(纵向)。在软件上把这块屏划分为两个驱动,主控区占据1750*3052*800/854))这么大小,这个800/854的系数是LCD整屏像素分辨率是854而主控区占据了其中的800个像素点计算出来的。纵向从3052*800/854)à 3052这块大小是按键区,横向的1750四等分以后的每个部分就是每个SoftKey的横向边界区分点。

从软件角度上看有两个设备。这两个设备是不一样的,主控区直接由输出子系统打开,并且支持多点上报。而按键区则不支持多点上报,一方面是Spec没有要求我们没有必要画蛇添足,另一方面多点触控处理起来非常麻烦,并且这个设备不能由输入子系统打开,而是只能由中间的一个incservice守护进程来打开和取数据。按键区设备是一个虚拟的设备。

 

原理:

       主控区驱动原理:

IIC设备列表中增加新思电容屏设备,位于board-msm7x27.cstatic struct i2c_board_info i2c_devices[]数组。包括设备名ts_synaptics,中断Pin, IIC Slave设备的从地址0x22等。在对应的驱动中驱动名也叫ts_synaptics,代码位于synaptics_ts.cstatic struct i2c_driver ts_synaptics_driver变量里。当系统启动以后驱动名字和设备名字相匹配以后Probe就会调用到这个驱动的Probe,在Probe里完成电容屏的上电,初始化以及跟输入子系统注册对应的Input设备。后续的动作就是设置参数位包括长半轴长和短半轴长,单点多点属性等等,这些都是标准的东西,可以参考同目录下其它电容屏驱动,网上也有很多介绍的,比如说http://blog.csdn.net/pottichu/archive/2010/06/23/5689479.aspx。这个介绍的比较详细,这里不需要赘述。需要特别说明的是,当中断到达时,依据Linux内核中断处理方法分为顶半部和底半部的做法,需要把具体的取IC数据和上报动作放到一个工作对队里去,这个工作对队就是所谓的底半部。如果不这样做的话中断处理时间过长,CPU进程切换的话一定会引起当机。同样的道理,在进休眠时需要设置Sleep寄存器,也需要把做这件事推入一个工作队列里去,否则也是当机。主控区有许多标准驱动参照,这里不做过多说明,主要是SoftKey区我们扩展的软件判断按键的处理复杂一些。

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值