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

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

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判断使用哪一个驱动的

ilitek2510 是一款常见的 USB 触摸屏控制器芯片,Linux 平台下可以使用 HID 触摸屏驱动来支持 ilitek2510 触摸屏。 以下是步骤: 1. 确保系统已经加载了 hid-multitouch 驱动,可以使用以下命令来检查: ``` lsmod | grep hid_multitouch ``` 如果没有输出,则需要加载该驱动: ``` sudo modprobe hid-multitouch ``` 2. 连接 ilitek2510 触摸屏,并用以下命令来检测是否能够识别: ``` dmesg | grep input ``` 如果能够识别,则会输出如下信息: ``` input: ILITEK ILITEK-TP as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:22B8:2E82.0001/input/input3 hid-generic 0003:22B8:2E82.0001: input,hidraw0: USB HID v1.10 Pointer [ILITEK ILITEK-TP] on usb-0000:00:14.0-3/input0 ``` 其中,hidraw0 就是触摸屏的设备号。 3. 安装 xinput 工具,可以使用以下命令进行安装: ``` sudo apt-get install xinput ``` 4. 使用以下命令来调整触摸屏的参数: ``` xinput set-prop <device id> "Device Accel Velocity Scaling" <value> ``` 其中,device id 就是之前获取到的 hidraw 设备号,value 是一个浮点数,代表加速度的值。可以根据实际情况进行调整。 5. 如果需要在系统启动时自动加载 hid-multitouch 驱动和设置触摸屏参数,可以将以下脚本保存为 /etc/init.d/touchscreen,并授予可执行权限: ``` #!/bin/bash ### BEGIN INIT INFO # Provides: touchscreen # Required-Start: $local_fs $remote_fs $syslog # Required-Stop: $local_fs $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start touchscreen # Description: Enable support for ilitek2510 touchscreen on boot ### END INIT INFO case "$1" in start) modprobe hid-multitouch xinput set-prop <device id> "Device Accel Velocity Scaling" <value> ;; stop) ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 ``` 然后使用以下命令将脚本添加到启动项中: ``` sudo update-rc.d touchscreen defaults ``` 以上就是在 Linux 平台下使用 ilitek2510 触摸屏的驱动方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值