I.MX6 Goodix GT9xx touchscreen driver porting

简介: /************************************************************************ * I.MX6 Goodix GT9xx touchscreen driver porting * 声明: * 本文主要是记录GT9xx电容Touch移植过程中遇到的一些问题。
/************************************************************************
 *          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\
            }

 

目录
相关文章
|
机器学习/深度学习 并行计算 程序员
成功解决 This graphics driver could not find compatible graphics hardware. You maycontinue installation,
成功解决 This graphics driver could not find compatible graphics hardware. You maycontinue installation,
成功解决 This graphics driver could not find compatible graphics hardware. You maycontinue installation,
|
Oracle 关系型数据库 Linux
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
1) Starting with Oracle Grid Infrastructure 12C Release 1 (12.1.0.2), Oracle ASM Filter Driver (Oracle ASMFD) is installed with an Oracle Grid Infrastructure installation.
2687 0
|
Linux
platform_device_register和platform_driver_register
http://www.linuxidc.com/Linux/2012-01/51725.htm   #include #include #include #include #include #include #include #include #include #...
1412 0
|
Linux
I.MX6 driver goto 使用
/************************************************************************** * I.MX6 driver goto 使用 * 说明: * 在绝大多数地方,我们都被告诉尽可能不要用goto,甚至都没学过goto,但 * 这种语法却在内核驱动中普遍使用。
919 0
|
芯片
I.MX6 PMU MMPF0100 driver porting
/************************************************************************** * I.MX6 MMPF0100 driver porting * 说明: * 虽然主板上有MMPF0100芯片,却没有注册设备并使用该PMU驱动,真是浪费, * 当然因为需要,所以将PMU的驱动注册起来。
970 0
|
Linux Android开发
I.MX6 gpio-keys driver hacking
/**************************************************************************** * I.MX6 gpio-keys driver hacking * 说明: * 1. 本文解读gpio-keys驱动是如何注册,最终处理函数在哪里。
1124 0
I.MX6 U-boot Kernel backlight setting
/********************************************************************* * I.MX6 U-boot Kernel backlight setting * 说明: * 本文主要记录I.MX6 U-boot、Kernel中如何打开、关闭背光设置。
893 0
OK335xS davinci mdio driver hacking
/******************************************************************************* * OK335xS davinci mdio driver hacking * 说明: * 以前一直也想对网卡驱动的工作原理进行跟踪,这次正好有机会,先跟mdio接口部分 * 的代码。
805 0
|
芯片
I.MX6 bq27441 driver hacking
/************************************************************************* * I.MX6 bq27441 driver hacking * 声明: * 本文主要是记录对电池计量芯片bq27441芯片驱动注册过程进行代码跟踪。
772 0
|
Linux 芯片
I.MX6 bq27441 driver porting
/************************************************************************** * I.MX6 bq27441 driver porting * 声明: * 本文主要记录bq27441电池检测芯片驱动遇到的一些问题以及解决方法。
858 0

热门文章

最新文章