MTK中的TP代码结构并不复杂,相比于其他的系统更为的简单些。它使用的是input子系统,通过该系统来上报触摸按键。
首先我们来看看TP的文件夹下的各代码文件的功能。
文件名 |
具体功能 |
关系文件 |
tpd.h |
一些宏和extern 函数,外部使用 |
Mtk_tpd.c |
tpd_button.c |
关于实体按键的定义 |
|
Tpd_calibrate.c |
矫准,比如偏移,可能是MTK以前做电阻屏留下的架构 |
|
Tpd_calibrate.h |
矫准,一些宏和数据结构 |
|
Tpd_debug.c |
一些函数用于debug信息 |
|
Tpd_debug.h |
一些dubug信息和函数申明 |
|
Tpd_default.c |
函数似乎为完成,函数只有一个 |
|
Tpd_default.h |
似乎未完成 |
|
Tpd_init.c |
空文件夹 |
|
Tpd_misc.c |
导出一些符号,基本都是切换模式函数 |
|
Tpd_setting.c |
传些参数至上层应用 |
|
MTK_tpd.c |
关键代码区 |
|
met_ftrace_touch.h |
Ftrace工具,用来代码内追踪运行情况 |
|
以上代码文件中较为重要的就是mtk_tpd.c,故重点分析该文件。
在此会有以下几个关键的点:
1.mtk_tpd.c中的函数运行流程。
2.mtk_tpd.c中的input系统。
3.注册i2C
4.tpd_driver_add函数
5.LDO芯片设置
6.通过设备数或者其他方式获取RST,EINT引脚号
7.通过设备节点获得中断,并请求一个中断号,和注册中断handle
8.运行线程开启
9.中断处理函数,唤醒线程,并上报键值
在此,我将这几个分为一些几部分:
一、注册MTK下的TP框架,与建立I2C框架。
二、在probe函数中完成相应电源,设备数,硬件中断,GPIO等设置。
三、建立一个上报框架分为如下:1)开启一个线程2)申请一个中断irq来绑定硬件中断触发3)irq_handle中唤醒work 4)work在唤醒wait事件5)开启的线程等到wait事件执行上报关键代码。,否则睡眠。
四、填充关键的TP上报代码(input系统上报)。
1.mtk_tpd.c中的函数运行流程。
mtk_tpd.c中,我们最先查看init函数,也就是module添加。
1 static int tpd_remove(struct platform_device *pdev) 2 { 3 input_unregister_device(tpd->dev); 4 return 0; 5 } 6 7 /* called when loaded into kernel */ 8 static int __init tpd_device_init(void) 9 { 10 TPD_DEBUG("MediaTek touch panel driver init\n"); 11 if (platform_driver_register(&tpd_driver) != 0) { 12 TPD_DMESG("unable to register touch panel driver.\n"); 13