基于Dragonboard 410c的触摸屏调试

本文记录了mtch6102触摸板驱动的调试过程及遇到的问题,包括触摸事件不完整导致应用层无法接收坐标值,以及在无触摸时驱动程序误报中断信号等问题的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备给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正常工作,不会在没有触摸的情况下再继续产生中断。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值