RK3399 focaltech敦泰觸摸屏移植調試


CPU:RK3399

系統:Android 7.1

IC:FT5406

 

focaltech(敦泰)觸摸屏也是比較常用的,但是相對匯頂,就比較少用

RK的源碼中雖然有 focaltech 的代碼,但沒有調試過,一般都會用供應商提供的代碼

 

供應商會提供一個名為 focaltech_touch 的文件夾,里面包括觸屏所有代碼

我們要做的就是將代碼移植到 kernel 中,編譯燒錄

 

1、將文件加拷貝到 kernel/drivers/input/touchscreen/ 目錄下

2、修改 touchscreen 目錄下的 Kconfig 文件,在最后一行的 endif 前加一行

source "drivers/input/touchscreen/focaltech/Kconfig"

3、修改 touchscreen 目錄下的 Makefile 文件,在最后一行添加

obj-$(CONFIG_TOUCHSCREEN_FTS)        += focaltech_touch/

4、修改 rockchip_defconfig 文件,將代碼加入編譯,相當於修改 .config 文件

CONFIG_TOUCHSCREEN_FTS=y

5、在 dts 中添加設備,需要找到對應的 i2c

&i2c4 {
    status = "okay";
    i2c-scl-rising-time-ns = <150>;
    i2c-scl-falling-time-ns = <30>;
    clock-frequency = <400000>;

    focaltech: focaltech@38 {
        compatible = "focaltech,fts";
        reg = <0x38>;
        focaltech,reset-gpio = <&gpio1 4 GPIO_ACTIVE_LOW>;
        focaltech,irq-gpio = <&gpio1 6 IRQ_TYPE_LEVEL_LOW>;
        focaltech,max-touch-number = <5>;
        focaltech,display-coords =  <0 0 800 1280>;
        tp-supply = <&vcc3v0_tp>;
        
        focaltech,have-key;
        focaltech,key-number = <3>;    
        focaltech,keys = <139 102 158>;     
        focaltech,key-y-coord = <1200>; 
        focaltech,key-x-coords = <200 400 600>;
    };
};

FT5406設備地址:0x70,dts 中需要右移一位,等於除以2,實際為 0x38

focaltech,reset-gpio:復位引腳

focaltech,irq-gpio:中斷引腳

focaltech,max-touch-numbe:IC 支持的最大觸摸點數

文件 focaltech_core.h 中的宏 FTS_MAX_POINTS_SUPPORT 與此值保持一致,FTS_MAX_POINTS_SUPPORT 過大,雖然使用中不影響,但是測試多點觸控會顯示無效的觸控點

display-coords:設置觸摸屏的分辨率

focaltech,have-key:是否有觸摸按鍵,有的話需要定義此行,無觸摸按鍵屏蔽

focaltech,key-number:觸摸按鍵個數

focaltech,keys:每個按鍵對應的按鍵值

focaltech,key-y-coord:觸摸按鍵的 y 坐標

focaltech,key-x-coords:觸摸按鍵的 x 坐標

 

此時就移植完畢,下面是調試過程中遇到的問題

1、讀取的 chip id 匹配失敗

[FTP]TP not ready, read:0x55aa

需要在 focaltech_common.h 的 FTS_CHIP_TYPE_MAPPING 中添加,具體需要咨詢供應商

#define FTS_CHIP_TYPE_MAPPING { \
    {0x01, 0x58, 0x22, 0x58, 0x22, 0x00, 0x00, 0x58, 0x2C}, \
    {0x02, 0x55, 0xAA, 0x55, 0xAA, 0x00, 0x00, 0x79, 0x03}, \
}

添加后還是同樣的問題,id 的高位匹配成功,低位匹配失敗,

[FTP]TP not ready, read:0x55ff

原因是代碼太舊,要么更新代碼,要么刪除低位匹配

供應商建議取消低位匹配,並將 focaltech_config.h 中 FTS_AUTO_UPGRADE_EN 設置為 0

if (VALID == fw_valid) {
  if (id_h == ctype[i].chip_idh)
        break;
} else {
  if ((id_h == ctype[i].rom_idh)
       || (id_h == ctype[i].pb_idh)
       || ((id_h == ctype[i].bl_idh) && (id_l == ctype[i].bl_idl)))
       break;
}

 

2、開機后觸摸屏可以正常使用,但是休眠喚醒后,觸摸無效

檢查 reset 腳配置正確,並且 reset 腳沒有開路

將 focaltech_config.h 文件中 FTS_POWER_SOURCE_CUST_EN 設置為 0,測試還是不行

將 suspend 函數中設置 ic 休眠寄存器的部分屏蔽掉,喚醒后觸摸正常,此時確認喚醒時復位失敗

ret = fts_i2c_write_reg(ts_data->client, FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_SLEEP_VALUE);
    if (ret < 0)
        FTS_ERROR("set TP to sleep mode fail, ret=%d", ret);

用示波器測試喚醒時 reset 引腳,發現休眠和喚醒一直是高電平

查看代碼,發現 resume 函數中復位函數被屏蔽了,取消屏蔽就正常了

fts_reset_proc(200);

 


免責聲明!

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



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