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 = <>;
i2c-scl-falling-time-ns = <>;
clock-frequency = <>; focaltech: focaltech@ {
compatible = "focaltech,fts";
reg = <0x38>;
focaltech,reset-gpio = <&gpio1 GPIO_ACTIVE_LOW>;
focaltech,irq-gpio = <&gpio1 IRQ_TYPE_LEVEL_LOW>;
focaltech,max-touch-number = <>;
focaltech,display-coords = < >;
tp-supply = <&vcc3v0_tp>; focaltech,have-key;
focaltech,key-number = <>;
focaltech,keys = < >;
focaltech,key-y-coord = <>;
focaltech,key-x-coords = < >;
};
};

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 < )
FTS_ERROR("set TP to sleep mode fail, ret=%d", ret);

用示波器测试唤醒时 reset 引脚,发现休眠和唤醒一直是高电平

查看代码,发现 resume 函数中复位函数被屏蔽了,取消屏蔽就正常了

fts_reset_proc();

RK3399 focaltech敦泰触摸屏移植调试的更多相关文章

  1. RK3288 GT触摸屏移植调试

    CPU:RK3288 系统:Android 5.1 IC:GT911 1.在 menuconfig 或者 rockchip_defconfig 中支持触摸屏.具体用哪种方式需要结合编译方法. 按照瑞芯 ...

  2. [RK3399] 汇顶gt9xx触摸屏在RK原始代码调试

    CPU:RK3399 系统:Android 7.1 触摸屏:1024x768   8inch 触摸IC:GT9271 基于RK3399,从瑞芯微服务器更新到最新的 Android 7.1 代码中,瑞芯 ...

  3. RK3399 4G模块移远EC20移植调试

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/11266330.html CPU:RK3399 系统:Android 7.1 1.通过串口打印或者adb获取 ...

  4. android TP驱动移植调试笔记(转)

    1. 添加I2C 设备 TP 一般采用的是I2C 作为数据和命令接口,所以TP 驱动也可以归类为I2C 驱动.TP驱动的主要逻辑不在这里,但是了解了Linux 的I2C 体系架构,就可以对整个驱动流程 ...

  5. 敦泰FT6X06单层自容调屏

    总的概括来说,自电容调屏在配置好通道个数和顺序后,只需调整AFE相关的设置参数使各通道的Raw Data和CI值符合定义的标准即可.– AFE是模拟前端的缩写-Analog Front End• Ra ...

  6. 触摸屏 adb调试

    1.adb shell cat /proc/kmsg 这条命令肯定是要放在第一位的,可以打印内核信息,对应于驱动程序中的printk语句. 如果出现以下提示,说明权限不够,可以通过adb root获取 ...

  7. Android触摸屏配置调试

    前几天搞乐蛙时,进入后是鼠标模式,好坑爹的模式有木有~~ 但是大蛋给出了解决方法,我不怕不怕啦~让我们向大牛致敬!!! 首先输入Command查看你的input配置~ adb shell dumpsy ...

  8. Qualcomm平台camera调试移植入门

    1  camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...

  9. Tslib的移植【转】

    转自:http://www.cnblogs.com/uvsjoh/archive/2011/08/25/2152947.html移植Tslib 1 下载源码tslib-x.x.tar.gz 2 解压, ...

随机推荐

  1. Java程序员的自我修养

    一.自我修养路线图 如图,这是笔者所走的路.且不论这路走的对不对,这个过程中行业环境会影响到你,大可不必钻牛角尖.附上这张图的目的是为了说,如果你想成为一个优秀的程序员,那么你一定要有规划.当然,别想 ...

  2. JS如何做2048(详细)

    在做2048之前,我们首先要了解它的游戏规则,以及运行逻辑 首先,来看上半部分 除了标题外还有记录每次获得的分数,以及总分数,还有一个重新开始按钮,这个最大分数会保存下来. 来看页面内容 页面内容由1 ...

  3. JS中浏览器的数据存储机制

    一.JS中的三种数据存储方式 cookie.sessionStorage.localStorage 二.cookie 1.cookie的定义: cookie是存储在浏览器上的一小段数据,用来记录某些当 ...

  4. hibernate saveorupdate方法只有更新有效果,保存没有效果

    转自:https://blog.csdn.net/KAIXINLUOYE/article/details/72821014 单主键生成策略由native改成assigned后,问题解决.

  5. 高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

    HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...

  6. javascript动态添加html节点

    之前一直没怎么接触需要动态添加和删除html节点的项目,这次项目中用到了,也学习了. 在一个<table id="tab">标签中添加一个<tr id=" ...

  7. springcloud工程建立 父工程+公用子模块+微服务提供模块

    建立 Java Working Set:工程多的时候可以展开收缩,方便管理 切换到Package Explorer视图,并点击视图右侧下箭头,选择Working Sets,如下图: 建立父工程,将后续 ...

  8. 这个在Github有52100颗星星的项目,怎么还有人不知道鸭!

    Ta是近两年Docker最为火热的开源项目之一.Docker 开启了容器时代,而Ta则革新了我们对于云计算,软件开发流程,业务平台等等方面的认知. Ta就是Kubernetes,/k(j)uːbəˈn ...

  9. 动态URL是什么?动态URL有什么特点?

    动态URL是什么动态URL就是动态页面,动态链接,即指在URL中出现“?”这样的参数符号,并以aspx.asp.jsp.php.perl.cgi为后缀的url. 动态URL有什么特点1.在建设反向链接 ...

  10. k8s的监控

    监控 1.资源指标和资源监控 一个集群系统管理离不开监控,同样的Kubernetes也需要根据数据指标来采集相关数据,从而完成对集群系统的监控状况进行监测.这些指标总体上分为两个组成:监控集群本身和监 ...