3TP调试

本文介绍了Android内核中TP驱动的加载原理,包括TP与kernel交互的基础知识,如何从零开始添加新的TP驱动,以及如何实现TP的兼容性。此外,还详细阐述了TP的附加功能如手势唤醒、虚拟按键和翻转180度等,并提供了TP调试的各种方法,如检查硬件、查看设备节点、读取输入事件等。

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

一:基础知识
    Kernel 通过input 子系统与Android交互,每当我们点击屏幕或抬起都会产生中断,
    每当kernel收到中断会通过i2c总线读取TP控制器产生的坐标数据,kernel就会通过input系统上报给android层, android层会完成相应的动作。
    1. 硬件管脚:
        SCL0: IIC 时钟引脚
        SDA0:IIC数据引脚
        RST: 复位引脚
        EINT: IIC 中断引脚,触摸事件通过IIC 贯穿到系统
    2. TP  增加驱动原理    
        TMK 增加驱动到静态数组 tpd_driver_list 数组中
            static struct tpd_driver_t tpd_device_driver = {
                .tpd_device_name = "FT5x0x",
                .tpd_local_init = tpd_local_init,
            };
            module_init(tpd_driver_init)--->tpd_driver_add(&tpd_device_driver)
        kernel-3.18/drivers/input/touchscreen/mediatek/mtk_tpd.c TP 设备加载、卸载和平台总线注册
        
        运行 tpd_probe
            static int tpd_probe(struct platform_device *pdev)
            {
                ...
                /*    全局数组tpd_driver_lsit[i]中的tp驱动依次进行如下操作 ,遍历整个数组
                    执行tp驱动中的tpd_local_init()接口,此接口主要是对tpd_i2c_driver进行i2c
                    总线的注册,匹配成功后执行tpd_i2c_driver中的probe ,这个probe比较重要,
                    其中系统会跟TP进行一次i2c通信,如果成功则说明找到了这个驱动,根据
                    此,可以兼容多款不同IC的TP设备* /
                for (i = 1; i < TP_DRV_MAX_COUNT; i++) {
                    /* add tpd driver into list */
                    if (tpd_driver_list[i].tpd_device_name != NULL) {
                        //运行驱动中i2c_add_driver(&tpd_i2c_driver) -->tpd_probe 读取成功则全局 tpd_load_status设置为1 ,这可以兼容不同TP
                        tpd_driver_list[i].tpd_local_init(); 
                        /* msleep(1); */
                        if (tpd_load_status == 1) {//// 如果上面的i2c总线注册成功,则将tpd_load_status置位
                            TPD_DMESG("[mtk-tpd]tpd_probe, tpd_driver_name=%s\n",
                                  tpd_driver_list[i].tpd_device_name);
                            g_tpd_drv = &tpd_driver_list[i];  //并将g_tpd_drv指向这个驱动  
                            break;
                        }
                    }
                }
                ...
                if(input_register_device(tpd->dev))   //向输入子系统注册输入设备  
                ...
            }
二:从零添加新TP
            1. 修改kernel-3.18/arch/arm/configs/hys6737m_35_m0_debug_defconfig
                kernel-3.18/arch/arm/configs/hys6737m_35_m0_defconfig    
                -CONFIG_TOUCHSCREEN_MTK_GT1151=y
                +CONFIG_TOUCHSCREEN_MTK_FT6X36=y                        //打开指定的tp,关闭其他的
            
            2. 修改 device/teksun/hys6737m_35_m0/ProjectConfig.mk
                +CUSTOM_KERNEL_TOUCHPANEL = ft6x36                        //修改为指定tp
         
            3. 添加驱动代码,把ft6x36放到 kernel-3.18/drivers/input/touchscreen/mediatek/ 中        
                对TP功能进行修改,分辨率,等。
                有dts 的需要修改kernel-3.18/arch/arm/boot/dts/hys6737m_35_m0.dts
                -       tpd-resolution = <720 1280>;
    &nb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值