• 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);
  • 相关阅读:
    【WPF】【基础】布局系统
    【设计】【托管扩展性框架】 MEF vs 2010 samples
    【wpf】【控件】内容控件
    【Wpf】【debug】Exception has been thrown by the target of an invocation.
    【设计模式】概述
    期待与悲催中的2012
    金额转为大写人民币
    使用vs2005的GridView控件,菜鸟问题。
    Microsoft Visual Studio 2005中使用水晶报表
    将金额小写转化成汉字大写(javascript)
  • 原文地址:https://www.cnblogs.com/lialong1st/p/11239780.html
Copyright © 2020-2023  润新知