I.MX6 Goodix GT9xx touchscreen driver porting

/************************************************************************
 *          I.MX6 Goodix GT9xx touchscreen driver porting
 * 声明:
 *     本文主要是记录GT9xx电容Touch移植过程中遇到的一些问题。
 *
 *                                      2016-1-27 深圳 南山平山村 曾剑锋
 ***********************************************************************/

一、参考文档:
    GT9XX驱动移植说明书_for_Android_2014011401.pdf

二、error 1:
    1. 出错信息:
        1. 直接将驱动放在kernel里系统会卡死,出错信息如下:
            USB Gadget resume begins
            fsl_udc_resume, Wait for wakeup thread finishes
            dr_controller_run: udc out low power mode
            USB Gadget resume ends
            fsl-usb2-udc: bind to driver android_usb
            mousedev: PS/2 mouse device common for all mice
            input: gpio-keys as /devices/platform/gpio-keys/input/input0
            <<-GTP-INFO->> GTP driver installing...
            <<-GTP-INFO->> GTP Driver Version: V2.4<2014/11/28>
            <<-GTP-INFO->> GTP Driver Built@11:15:29, Jan 26 2016
            <<-GTP-INFO->> GTP I2C Address: 0x5d
            <<-GTP-INFO->> Guitar reset
            <<-GTP-INFO->> Chip Type: GOODIX_GT9
            <<-GTP-INFO->> IC Version: 9157_1040
            <<-GTP-INFO->> X_MAX: 720, Y_MAX: 1280, TRIGGER: 0x01
            <<-GTP-INFO->> create proc entry gt9xx_config success
            input: goodix-ts as /devices/virtual/input/input1
            <<-GTP-INFO->> GTP works in interrupt mode.
            <<-GTP-INFO->> Applied memory size:2562.
            <<-GTP-INFO->> Applied memory size:2562.
            <<-GTP-INFO->> I2C function: without pre and end cmd!
            <<-GTP-INFO->> Create proc entry success!
            mtk_tpd: hotknot_device register failed
            USB Gadget resume begins
            fsl_udc_resume, Wait for wakeup thread finishes
            ehci_fsl_bus_suspend begins, Host 1
            ehci_fsl_bus_suspend ends, Host 1
            <系统会卡死在这里,接下来没有任何信息输出>
        2. 作为模块加入内核,使用久了,系统也会卡死:
            root@android:/ # cd /data/local
            root@android:/data/local # ls
            gt9xxm.ko
            tmp
            root@android:/data/local # insmod gt9xxm.ko
            <<-GTP-INFO->> GTP driver installing...
            <<-GTP-INFO->> GTP Driver Version: V2.4<2014/11/28>
            <<-GTP-INFO->> GTP Driver Built@11:40:19, Jan 26 2016
            <<-GTP-INFO->> GTP I2C Address: 0x5d
            <<-GTP-INFO->> Guitar reset
            <<-GTP-INFO->> Chip Type: GOODIX_GT9
            <<-GTP-INFO->> IC Version: 9157_1040
            <<-GTP-INFO->> X_MAX: 720, Y_MAX: 1280, TRIGGER: 0x01
            <<-GTP-INFO->> create proc entry gt9xx_config success
            input: goodix-ts as /devices/virtual/input/input1
            cpufreq_interactive_input_connect: connect to goodix-ts
            <<-GTP-INFO->> GTP works in interrupt mode.
            <<-GTP-INFO->> Applied memory size:2562.
            <<-GTP-INFO->> Applied memory size:2562.
            <<-GTP-INFO->> I2C function: without pre and end cmd!
            root@android:/data/local # <<-GTP-INFO->> Create proc entry success!
            mtk_tpd: hotknot_device register failed
    2. 解决方法:
        1. cat gt9xx.h
            ......
            #define HOTKNOT_ENABLE        0    // hotknot module
            #define HOTKNOT_BLOCK_RW      0    // block rw operation in hotknot
            ......
        2. cat goodix_tool.c
            s32 init_wr_node(struct i2c_client *client)
            {
                ......
            #if 0
                if (misc_register(&hotknot_misc_device))
                {
                      printk("mtk_tpd: hotknot_device register failed\n");
                      return FAIL;
                }
            #endif
                ......
            }
    3. 思路来源:
        1. 想通过尽可能减少驱动的功能来判断驱动哪里出了问题。
        2. cat gt9xx.h
            ......
            #define HOTKNOT_ENABLE        1    // hotknot module
            #define HOTKNOT_BLOCK_RW      1    // block rw operation in hotknot
            ......
        3. 如上所述,不需要该功能,当然我也不知道这是什么功能。
        4. 改为如下内容:
            #define HOTKNOT_ENABLE        0    // hotknot module
            #define HOTKNOT_BLOCK_RW      0    // block rw operation in hotknot
        5. 报错如下:
            ......
              CC      drivers/input/touchscreen/gt9xx.o
            drivers/input/touchscreen/gt9xx.c: In function 'goodix_ts_suspend':
            drivers/input/touchscreen/gt9xx.c:2735:5: warning: unused variable 'buf' [-Wunused-variable]
              CC      drivers/input/touchscreen/gt9xx_update.o
              CC      drivers/input/touchscreen/goodix_tool.o
            drivers/input/touchscreen/goodix_tool.c: In function 'init_wr_node':
            drivers/input/touchscreen/goodix_tool.c:346:21: error: 'hotknot_misc_device' undeclared (first use in this function)
            drivers/input/touchscreen/goodix_tool.c:346:21: note: each undeclared identifier is reported only once for each function it appears in
            drivers/input/touchscreen/goodix_tool.c: At top level:
            drivers/input/touchscreen/goodix_tool.c:855:16: warning: 'hotknot_write' defined but not used [-Wunused-function]
            drivers/input/touchscreen/goodix_tool.c:1243:16: warning: 'hotknot_read' defined but not used [-Wunused-function]
            make[3]: *** [drivers/input/touchscreen/goodix_tool.o] Error 1
            make[2]: *** [drivers/input/touchscreen] Error 2
            make[1]: *** [drivers/input] Error 2
            make: *** [drivers] Error 2
            error: make uImage failed.
            ./remake.sh: 18: exit: Illegal number: -1
        6. 既然已经禁止了,那么不可能还有hotknot_misc_device设备注册的,也就意味着这个版本的驱动有错。
        7. 综上所述:可能是我们的kernel不支持hotknot这个功能导致的。

三、error 2:
    1. 触摸屏点击有效,但是不准确,TP厂没有给矫正文件,后来FAE确认是由于矫正配置参数的问题。
    2. 修改gt9xx.h文件:
        ......
        #define GTP_DRIVER_SEND_CFG   1
        ......
    3. 配置参数:
        #define CTP_CFG_GROUP0 {\
            0x46,0xD0,0x02,0x00,0x05,0x0A,0x05,0x40,0x01,0x08,\
            0x28,0x0F,0x50,0x32,0x03,0x05,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x0A,0x0B,\
            0x2E,0x30,0x31,0x0D,0x00,0x00,0x00,0x02,0x03,0x1D,\
            0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,\
            0x00,0x21,0x41,0x94,0xC5,0x02,0x07,0x00,0x00,0x04,\
            0x9E,0x23,0x00,0x8D,0x28,0x00,0x80,0x2E,0x00,0x74,\
            0x35,0x00,0x69,0x3C,0x00,0x69,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x16,0x14,0x12,0x10,0x0E,0x0C,0x0A,0x08,\
            0x06,0x04,0x02,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
            0x00,0x00,0x16,0x13,0x18,0x12,0x1C,0x10,0x1D,0x0F,\
            0x0A,0x1E,0x00,0x24,0x22,0x02,0x21,0x04,0x20,0x06,\
            0x1F,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,\
            0x00,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
            0x9F,0xFF,0xFF,0xFF,0x00,0x01\
            }

 

时间: 2024-08-18 18:02:09

I.MX6 Goodix GT9xx touchscreen driver porting的相关文章

I.MX6 Linux eGTouch TouchScreen porting

I.MX6 Linux eGTouch TouchScreen porting 一.Download Driver: http://www.eeti.com.tw/drivers_Linux.html 二.阅读:EETI eGTouch Linux Programming Guide 三.系统启动配置: ...... # 本人直接将驱动放在内核里了,并没有做成模块 # insmod /module/hid-multitouch.ko # 使用eGTouch_v2.5.4330.L-ma/eGTo

I.MX6 PMU MMPF0100 driver porting

/************************************************************************** * I.MX6 MMPF0100 driver porting * 说明: * 虽然主板上有MMPF0100芯片,却没有注册设备并使用该PMU驱动,真是浪费, * 当然因为需要,所以将PMU的驱动注册起来. * * 2016-3-31 深圳 南山平山村 曾剑锋 *******************************************

I.MX6 bq27441 driver porting

/************************************************************************** * I.MX6 bq27441 driver porting * 声明: * 本文主要记录bq27441电池检测芯片驱动遇到的一些问题以及解决方法. * * 2016-1-28 深圳 南山平山村 曾剑锋 ************************************************************************

I.MX6 ar1020 SPI device driver hacking

/************************************************************************************ * I.MX6 ar1020 SPI device driver hacking * 声明: * 1. 本文主要是解读I.MX6中ar1020 SPI设备注册,以及驱动调用流程: * 2. 本文主要使用了vim+ctags进行代码跟踪,所以几乎都是函数原型之间的调用: * * 2015-9-5 晴 深圳 南山平山村 曾剑锋 *

I.MX6 Linux I2C device&amp; driver hacking

/******************************************************************************************* * I.MX6 Linux I2C device& driver hacking * 声明: * 1. 本文主要是对Linux I2C驱动进行代码跟踪,主要是为了能够对I2C驱动框架有个全面的了解: * 2. 本文源代码来自myzr_android4_2_2_1_1_0.tar.bz2: * 3. 如果你有兴趣,

Linux 2.6.19.x 内核编译配置选项简介

Linux 2.6.19.x 内核编译配置选项简介 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件.您可以自由链接.下载.传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明. 其他作品 本文作者十分愿意与他人共享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有作品的列表: 金步

FL2440 Linux kernel + yaffs2根文件移植过程(一)

本文全过程为自己亲自试验,成功移植了一个最基本功能的Kernel.根文件系统,现在将这个一耗时.耗精力 的过程写下来,希望对遇到相同问题的朋友们有所帮助! 平台:飞凌FL2440             windows xp sp2             vmware 6.5.build-203739              ubuntu 9.10              交叉编译器: 4.3.2              内核:linux-2.6.28.7.tar.bz2        

AM335x(TQ335x)学习笔记——触摸屏驱动编写

前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题.由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱动源码,单纯的配置DTS是无法完成TQ335x的触摸驱动移植工作的,因此,本文参考内核中原有的pixcir_i2c_ts驱动编写TQ335x的触摸屏(TN92)驱动. 在之前移植TQ210时,我已经编写过TQ210的触摸屏驱动,我的TQ335x还是使用的TQ210的屏,因此,难度不是很大.这里需要说

iPad 2 物料清单和详细成本曝光

近日,IHS iSuppli 列出了 iPad 2 的物料清单和详细成本,32GB WCDMA +WiFi 版本的 iPad 2 物料成本为 326.6 美元,而 CDMA 版本为 323.25 美元.由下图不难看出,9.7 英寸屏幕占据了很大部分的成本,显示加触摸屏共 127 美元:接下来是存储系统,包括 NAND 闪存和 DRAM 内存共 65.7 美元:由三星代工的苹果 A5 芯片,成本费为 14 美元:摄像头 4.3 美元:每台 iPad 2 的组装费为 10 美元.详细列表如下: IH