Linux内核打开ilitek,MTK平台TP驱动调用流程分析_kernel-4.4

本文详细分析了Linux内核4.4中MTK平台触摸屏(TP)驱动的加载流程,从MTK Touch driver的组成到TP驱动加载的具体步骤,包括平台驱动注册、设备匹配、TP IC驱动初始化。同时,探讨了TP中断处理流程,描述了当触摸发生时,如何从硬件中断到中断处理函数,再到数据读取和上报的完整过程。通过对msg2238驱动和Ft6xxx驱动中断处理的比较,展示了不同TP IC驱动的中断处理方式。

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

MTK Touch 驱动的组成

Mtk Touch driver 驱动包括:Mtkplatform 虚拟平台设备驱动、Module touch IC

驱动、Inputsubsystem。Mtk platform 设备驱动是mtk为了兼容多个touch

IC驱动而设计出来的虚拟驱动,它会去遍历每一个touch IC驱动,直到其中一个初始化成功。Linux

input_subsystem是linux的输入子系统,我们的输入设备都要通过这个子系统进行上报事件以及设置事件的类型。

一:TP驱动加载流程()

在LINUX启动过程中,先注册kernel-4.4/drivers/input/touchscreen/mediatek/目录下的具体驱动(如msg2238_ilitek),在驱动tpd_driver_init函数里调用tpd_driver_add(&tpd_device_driver)把该tp驱动加入到一个静态数组tpd_driver_list[i]中,在kernel-4.4/drivers/input/touchscreen/mediatek/mtk_tpd.c中moduel_init首先加载的函数tpd_device_init

函数中调用tpd_init_work_callback -->

然后platform_driver_register(&tpd_driver)注册一个mtk_touch_driver平台驱动driver

--> mtk_touch_driver函数的.of_match_table =

touch_of_match的compatible =

"mediatek,mt6739-touch"与在mt6739.dts注册的设备device touch: touch

compatible = "mediatek,mt6739-touch";相同,就执行tpd_probe函数。根据platform

bus match的规则:driver_name 和device_name相同就会调用platform_driver

的probe函数。(这里牵扯到Linux的设备模型知识,需要了解的人可以看下Linux platform

bus。)在tpd_probe函数中,调用tpd_get_gpio_info(pdev)函数解析dts参数,调用input_allocate_device()分配一个输入设备,设置input

设备事件类型,执行if(tpd_driver_list[i].tpd_device_name !=

NULL)//这里是在遍历mtk的tpd_driver_list里面的所有的驱动,判断名字是否为NULL,每一个module

touch IC 驱动都会添加到这个静态数组里面。tpd_driver_list[i].tpd_local_init();

if(tpd_load_status ==1) {//这里我们会判断我们所遍历的每一个module IC

驱动的初始化函数tpd_local_init()。probe成功的话就会将tpd_load_status变量置1,所以我们就是通过这个值tpd_load_status判断使用哪一个驱动的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值