基于Dragonboard 410c的触摸屏调试

准备给Dragonboard 410c接一个mtch6102触摸板,但在调试过程中遇到了几个问题,花费了较多时间,记录下来为以后碰到类似问题可以得到快速解决,也把调试经验分享给大家。

mtch6102是一款比较简单的触摸IC,没有太复杂的软硬件需求。

这里写图片描述

这里写图片描述

它的驱动直接按照linux驱动框架就很容易编写出来了。

在kernel中正确配置相关dtsi文件,驱动成功运行后,操作触摸板发现两个问题:

1、驱动中能接收到TP触摸中断,但通过input子系统上报后,在应用端无法接收到相应的键值和座标。

这里写图片描述

发现这个问题时真是觉得很奇怪,用adb shell getevent查看明显是有数据上报上来的,跟踪log也发现在hal层是已经收到数据的,但在应用层确实收不到相关座标值。

后面分析了一下代码,发现只上报了TP的按压动作,但没有上报松开动作,这会导致上层认为这次事件不是一个完整的触摸事件,从而不会把座标分发给相应的应用 。

只要修改一下代码就OK了

这里写图片描述

2、mtch6102的驱动我编写的是中断方式上报的,可是后面发现即使不按压TP,上报数据的中断处理函数也会被一直触发调用,也就是一直有检测到有中断信号。

这里写图片描述

检查硬件是正常的,相关的dtsi配置也是正常的,驱动里对寄存器的配置也都是对的。

这个问题困扰了好长时间,后面通过把TP的中断线飞线出来连接示波器抓波形查看,确认中断信号是从TP IC端主动生成。

最终分析发现,在每次触摸中断触发后,读取TP座标相关的寄存器时,必须全部读全,如果有些寄存器没有读取数据,TP IC会认为此次的触摸数据还没有被读取从而一直产生中断。

修改中断处理函数中的读取寄存器值相关代码后,TP正常工作,不会在没有触摸的情况下再继续产生中断。

这里写图片描述

发布了31 篇原创文章 · 获赞 10 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章