zoukankan      html  css  js  c++  java
  • 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
    ");
                          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
                }
  • 相关阅读:
    SVN增加文件后,文件无法自动包括在项目中的原因
    关于浏览器和IIS基础的简单理解
    关联查询之速度优化
    <>这个符号表示泛型的意思
    傅里叶变换
    distinct和group by的性能比较
    VS2010 代码前出现虚线
    SQL的 like 中间字符通配 用法
    模态对话框中的window.close关闭时会打开新页面
    最大差值
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5164198.html
Copyright © 2011-2022 走看看