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;

若出現觸摸不准,,觸摸跳點等問題,則需要聯系供應商查看硬件或者修改配置參數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM