zoukankan      html  css  js  c++  java
  • RK3288 汇顶GT触摸屏移植调试

    CPU:RK3288

    系统:Android 5.1

    触摸IC:GT911

    1、在 menuconfig 或者 rockchip_defconfig 中支持触摸屏。具体用哪种方式需要结合编译方法。

    按照瑞芯微提供的编译方式,则修改 rockchip_defconfig,这种方式在make前,需要执行 make rockchip_defconfig,生成 .config 文件。

    path:kernel/arch/arm/configs/rockchip_defconfig

    CONFIG_INPUT_TOUCHSCREEN=y
    CONFIG_TOUCHSCREEN_GT9XX=y

    只执行make的话,就要在make menuconfig中修改,保存后生成 .config 文件。

    Device Drivers  --->
        Input device support  --->
             [*]   Touchscreens  --->
                <*>   Goodix touch screen gt9xx support for rockchip based platform

    2、修改触摸屏分辨率。

    path:kernel/drivers/input/touchscreen/gt9xx/gt9xx.h

    // 下面有两种定义分辨率的方式,任选一种
    #define GTP_CUSTOM_CFG        1     
            ... ...
    #define GTP_1024X768
            ... ...
    #if GTP_CUSTOM_CFG
        #ifdef GTP_1024X768
              #define GTP_MAX_HEIGHT      768
              #define GTP_MAX_WIDTH     1024
        #else
             #define GTP_MAX_HEIGHT      320
              #define GTP_MAX_WIDTH     480
        #endif
      // 触摸屏中断触发信号
      #define GTP_INT_TRIGGER      0          // 0: Rising 1: Falling
    #else
      #define GTP_MAX_HEIGHT   4096
      #define GTP_MAX_WIDTH    4096
      #define GTP_INT_TRIGGER  1
    #endif        

    3、确认触摸屏Sensor-ID,有下面两种方式

    (1)根据硬件配置,需要咨询供应商。

    //*************************** PART2:TODO define **********************************
    // STEP_1(REQUIRED): Define Configuration Information Group(s)
    // Sensor_ID Map:
    /* sensor_opt1 sensor_opt2 Sensor_ID
        GND         GND          0 
        VDDIO       GND          1 
        NC          GND          2 
        GND         NC/300K      3 
        VDDIO       NC/300K      4 
        NC          NC/300K      5 
    */

    (2)内核运行时的log可以看出来

    // 获取 sensor_id
    ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_SENSOR_ID, &sensor_id, 1);
    if (SUCCESS == ret)    // 获取 sensor_id 成功
    {
        // sensor_id 超出范围
        if (sensor_id >= 0x06)
        {
            GTP_ERROR("Invalid sensor_id(0x%02X), No Config Sent!", sensor_id);
            ts->pnl_init_error = 1;
            return -1;
        }
    }
    else    // 获取 sensor_id 失败
    {
        GTP_ERROR("Failed to get sensor_id, No config sent!");
        ts->pnl_init_error = 1;
        return -1;
    }
    // 成功后打印 sensor_id
    GTP_INFO("Sensor_ID: %d", sensor_id);

    4、在dts文件中,修改触摸屏的硬件参数。

    // i2c接口
    &i2c4 {
        // 使能
        status = "okay";
        // 设备地址(记得除二)
        ts@5d{
            compatible = "goodix,gt9xx";
            reg = <0x5d>;
            // 复位IO
            goodix,rst-gpio = <&gpio7 GPIO_B2 GPIO_ACTIVE_HIGH>; 
            // 中断IO
            goodix,irq-gpio = <&gpio7 GPIO_B1 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            // 中断IO默认上拉
            pinctrl-0 = <&gpio7_b1>;
            // 触摸屏配置参数,需要供应商提供,group0-group5,根据Sensor-ID决定,若ID=4,则使用goodix,cfg-group4
            goodix,cfg-group0 = [
                63 40 01 E0 01 05 35 00 01 08 28 05 50 32 03 05 00 00 00 00
                00 00 00 14 16 18 10 8C 20 08 17 15 31 0D 00 00 02 9A 04 24
                00 00 00 00 00 03 64 32 00 00 00 0F 94 94 45 02 07 00 00 04
                8D 13 00 5C 1E 00 3C 30 00 28 4C 00 1D 78 00 1D 00 00 00 00
                00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
                00 00 00 00 00 00 00 00 00 00 00 00 02 04 06 08 0A 0C 0E 10
                FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
                00 00 00 02 04 06 08 0A 0C 0F 10 12 13 14 FF FF FF FF FF FF
                FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
                00 00 00 00 C9 01];
            };
    };

    此时已配置完毕

    若出现触摸方向x、y反了,可以联系供应商改配置文件,也可以在头文件中打开交换x、y坐标的宏

    宏生效后,会在触摸按下的函数 gtp_touch_down 中,交换x、y坐标

    #define GTP_CHANGE_X2Y        1       //swap x y
    #if GTP_CHANGE_X2Y
        GTP_SWAP(x, y);
    #endif

    若出现触摸方向x、y镜像了,可以联系供应商改配置文件,也可以在触摸按下的函数 gtp_touch_down 中,修改x、y坐标

    // abs_x_max abs_y_max 分别是x y方向的最大值
    // x 方向镜像
    x = ts->abs_x_max - x;
    // y 方向镜像
    y = ts->abs_y_max - y;

    若出现触摸不准,,触摸跳点等问题,则需要联系供应商查看硬件或者修改配置参数。

  • 相关阅读:
    国内首篇介绍JanOS物联网操作系统的文章
    安卓MonkeyRunner源码分析之与Android设备通讯方式
    MonkeyRunner源码分析之-谁动了我的截图?
    学习Swift写iOS?那写安卓和WinPhone呢?请看一石三鸟终极解决方案
    UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
    jdbc基础 (二) 通过properties配置文件连接数据库
    对于Servlet、Servlet容器以及一个Servlet容器-Tomcat
    5种分布式共享session的方法
    企业项目构建学习(一)maven
    SQLServer 2008以上误操作数据库恢复方法——日志尾部备份
  • 原文地址:https://www.cnblogs.com/lialong1st/p/9952077.html
Copyright © 2011-2022 走看看