本篇记录Andoird9 高通msm8953 汇顶gt9xx系列TP调试过程,主要涉及到以下几个知识点:
①.TP通讯的基本原理
②.TP参数的配置;
③.不同TP的兼容;
④.TP与LCD原点不一致的解决-翻转TP
一.TP通讯的基本原理
主板与TP是通过I2C协议通讯,当触摸屏被触碰,TP产生中断信号,主板驱动程序检测到相应的IO脚信号变化获取到中断事件,
再去读取tp的寄存器,获取报点,并且上报坐标给system.
二.TP参数的配置
tp参数主要涉及到几个方面,如下:
gt9xxx TP配置
三.不同TP的兼容
根据上边第二步“二.TP参数的配置”,可知道TP兼容与如下几个方面相关:
1. IC芯片地址:不同芯片地址区分不同TP
2.product-id 与sensor id:此处仅以汇顶系列为例子,其它厂商TP不一定有这个。相同id说明其IC相同,仅需根据其sensor id不同下发固件适配不同的触摸面板。
我这目前有两个TP,都是gt9xx系列,前一款product-id=911,sensor id = 0
当前dts配置为goodix,product-id = "911";
要调试的这款,上电,触摸无效,查看日志如下:
触摸 Product ID 不匹配
从日志知道驱动读取到TP product id 为9271,而dts配置的是911,因此不匹配,程序退出结束。
思考:
对应都是gt9xx系列的TP,其驱动程序是可以共用的,因此只要在配置兼容即可。有如下两个思路:
①.在dts里参照 goodix@5d创建节点,除节点名称不同,product-id值不同,对应sensor id固件不同外,其余不做修改,应能达到兼容。
②.去除驱动程序对product-id匹配限制:对应gt9xx系列的这两款TP而言,如若其sensor id不同,可根据其sensor id区分达到兼容
方案①此处未做验证,选择了方案②。
去除驱动程序对product-id匹配限制:
修改kernel\msm-4.9\drivers\input\touchscreen\gt9xx\gt9xx.c 函数goodix_ts_probe(),去除限制,如下:
去除对product-id匹配限制:
编译烧录,上电,其日志如下,读出了其sensor id是2,
读取sensor id
这样,我们在dtsi里给其配置goodix,cfg-data2固件即可,如下:
配置对应sensor id的固件
再次编译烧录,上电,触摸正常。
四.TP与LCD原点不一致的解决-翻转TP
额额额~~
还有点小问题,由于结构原因,LCD显示方向驱动配置翻转了180,因此TP原点与LCD不一致,需要修改TP原点。
怎么翻转TP原点呢?其实就是镜像X Y方向坐标。
实现如下:
原点翻转180
原点翻转180
现在剩下的就是就是根据不同sensor id 配置是否翻转原点,驱动读取TP sensor id 并选择相应组的固件,
是在gtp_init_panel()函数,在此增加判断逻辑即可。如下:
根据sensor id兼容不同TP
验证:同一8953主板,同一固件,不同的的TP,其触摸正常,原点与LCD一致,调试成功!!!