RK3568+Android11 GT911触控驱动移植与配置实战

电子说

1.4w人已加入

描述

在RK3568平台的Android11系统开发中,汇顶GT911作为小尺寸5点电容触控芯片是常见选型,其驱动移植核心围绕设备树适配、内核编译配置、驱动代码微调三大环节展开。本文结合实际项目修改补丁,从驱动核心分析、移植配置步骤、常见报错排查三方面,详解GT911在RK3568+Android11上的开发配置全流程,最终实现触控功能正常可用。

一、GT911触控驱动核心分析

GT911驱动基于汇顶官方gt9xx系列框架开发,核心由gt9xx.c(驱动实现)、gt9xx.h(宏定义/结构体)和GT911芯片手册组成,适配RK3568需重点理解以下核心设计:

1. 通信与工作模式

I2C通信:GT911作为I2C从设备,支持两组从地址0xBA/0xBB和0x28/0x29,项目中配置为0x14(对应0x28/0x29,I2C地址右移一位),驱动通过gtp_i2c_read/write实现与主控的寄存器读写、坐标数据传输。

工作模式:支持**中断模式(默认)**和轮询模式,中断引脚触发触控事件后,驱动读取芯片0x814E开始的坐标寄存器,上报触控点信息;同时芯片支持Normal/Green/Sleep三种功耗模式,驱动通过gtp_enter_sleep/gtp_wakeup_sleep实现功耗管理。

触控能力:GT911最大支持5点触控,驱动中通过GTP_MAX_TOUCH配置,可读取触摸坐标、触摸面积、移动轨迹,适配7~8寸屏幕。

2. 驱动关键适配逻辑

gt9xx.c中通过**tp-size设备树属性**做芯片型号的差异化适配,驱动会根据设备树传入的tp-size值,设置对应的标志位和坐标参数:

•当tp-size = <911>时,驱动会将bgt911 = TRUE,匹配GT911芯片的专属配置;

•同时驱动提供gtp_change_x2y(坐标XY交换)、gtp_x_reverse/gtp_y_reverse(坐标反转)宏,解决芯片物理坐标与屏幕显示坐标的匹配问题,这是GT911适配的核心微调点。

3. 驱动架构核心函数

核心函数 功能
goodix_ts_probe 驱动入口,完成GPIO/中断申请、I2C检测、面板初始化、输入设备注册
gtp_request_io_port 申请复位(RST)、中断(INT)GPIO,完成芯片复位和I2C地址配置
goodix_ts_irq_handler 中断处理函数,触发后调度工作队列读取触控数据
gtp_touch_down/up 触控点按下/松开事件上报,完成坐标转换后通过input子系统上报
gtp_init_panel 面板初始化,加载GT911专属配置参数,发送芯片配置寄存器

二、RK3568+Android11 GT911移植配置全步骤

本次移植基于RK3568 EVB开发板,核心是禁用原有Focaltech触控驱动,适配GT911的I2C节点、GPIO、编译配置,所有修改均为项目实测有效补丁,分设备树、内核编译、驱动代码三部分展开。

步骤1:设备树配置修改(核心)

设备树修改集中在rk3568-evb.dtsi和rk3568-evb1-ddr4-v10.dtsi,核心是配置GT911的I2C节点、复位/中断GPIO,禁用原有FTS触控驱动,对应补丁解析如下:

1.1 配置I2C1总线的GT911节点

 

&i2c1 {    status = "okay";    // 替换原有gt1x为gt9xx,启用GT911驱动    gt9xx: gt9xx@14 {        status = "okay";        compatible = "goodix,gt9xx"; // 匹配gt9xx驱动的of_match_table        reg = <0x14>; // GT911 I2C从地址(0x28右移一位)        pinctrl-names = "default";        pinctrl-0 = <&touch_gpio>; // 绑定触控GPIO引脚        reset-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>; // 复位GPIO        touch-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>; // 中断GPIO,低电平触发        max-x = <1920>; // 屏幕X轴分辨率        max-y = <1080>; // 屏幕Y轴分辨率        tp-size = <911>; // 关键:告诉驱动适配GT911芯片    };    // 禁用原有Focaltech FTS触控驱动    // focaltech: focaltech@38 { ... };};

 

关键修改原因

•compatible = "goodix,gt9xx":必须与gt9xx.c中of_device_id的兼容属性一致,否则驱动无法匹配加载;

•tp-size = <911>:驱动的核心识别标志,触发GT911的专属配置逻辑;

•中断GPIO配置为IRQ_TYPE_LEVEL_LOW:与GT911芯片的中断输出模式匹配。

1.2 禁用原有GT1X驱动节点

 

// >1x {//     status = "okay";//     power-supply = <&vcc3v3_lcd0_n>;// };

 

1.3 注释原有FTS的GPIO引脚配置

原有FTS触控的GPIO与GT911复用,需注释避免引脚冲突:

 

// ft5x26 {//     ft5x26_gpio: ft5x26-gpio {//         rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>,//                         <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;//     };// };

 

步骤2:内核编译配置修改

修改rockchip_defconfig和触控驱动Makefile,启用GT9XX驱动,禁用FTS驱动,修正驱动编译路径

2.1 开启GT9XX/关闭FTS驱动(rockchip_defconfig)

 

CONFIG_TOUCHSCREEN_GT9XX=y # 启用GT9xx系列驱动# CONFIG_TOUCHSCREEN_FTS=y # 禁用Focaltech FTS驱动CONFIG_TOUCHSCREEN_GT1X=y # 保留(不影响,已在设备树禁用)

 

2.2 修正驱动编译路径(Makefile)

原有GT1X驱动的编译路径替换为GT9XX,避免编译冲突:

 

# 原配置# obj-$(CONFIG_TOUCHSCREEN_GT1X)         += gt1x/# 新配置obj-$(CONFIG_TOUCHSCREEN_GT1X)         += gt9xx/

 

步骤3:GT911驱动代码微调

核心修改gt9xx.c中GT911的坐标适配参数,解决坐标XY交换问题,这是触控点与屏幕点击位置匹配的关键:

 

else if (val == 911) {    m89or101 = FALSE;    bgt911 = TRUE;    gtp_change_x2y = FALSE; // 原TRUE改为FALSE,关闭XY坐标交换    gtp_x_reverse = FALSE;    gtp_y_reverse = TRUE;}

 

修改原因:GT911芯片的感应通道与屏幕的XY轴物理排布一致,无需交换坐标,若保持gtp_change_x2y=TRUE会出现点击屏幕X轴,触控点在Y轴移动的偏移问题。

三、编译与烧录验证

1. 内核编译

执行RK3568 Android11的内核编译命令,生成包含GT911驱动的内核镜像:

2. 烧录验证

将编译后的boot.img通过RKDevTool烧录到开发板,重启后通过以下命令验证驱动加载状态:

(1)查看驱动加载日志

 

dmesg | grep -i goodix

 

正常输出:包含GTP Driver Version: V2.2、GTP I2C Address: 0x14、GTP works in interrupt mode、X_MAX: 1920, Y_MAX: 1080等信息,说明驱动成功匹配并加载。

(2)查看触控输入设备

 

getevent -l

 

正常输出:能看到/dev/input/eventX(X为数字)的输入设备,名称为goodix-ts,表示触控设备已成功注册到input子系统。

(3)测试触控事件

 

getevent /dev/input/eventX

 

点击屏幕,会输出连续的触控点坐标、触摸压力等信息,说明触控事件正常上报,GT911功能可用。

四、GT911常见报错与排查方案

在RK3568+Android11平台适配GT911时,常见问题集中在I2C通信失败、触控无响应、坐标偏移、中断异常四大类,以下为针对性排查方案,结合芯片手册和驱动逻辑逐一解析:

问题1:dmesg提示“I2C communication ERROR!”,驱动加载失败

现象:驱动probe阶段提示I2C读写出错,无法检测到GT911芯片;

原因&排查步骤

1.I2C地址不匹配:检查设备树reg = <0x14>是否与GT911实际地址一致(芯片地址可通过Reset/INT引脚配置,0x14对应0x28/0x29,0x5A对应0xBA/0xBB);

2.复位GPIO未拉通:GT911上电需先复位,检查reset-gpio的引脚号、电平极性(GPIO_ACTIVE_HIGH)是否正确,可通过cat /sys/class/gpio/gpioX/value查看GPIO状态;

3.I2C总线被占用:执行i2cdetect -y 1(I2C1总线),查看0x14地址是否被占用,若被占用需排查其他设备的I2C节点;

4.硬件接线问题:检查GT911的SDA/SCL引脚是否与RK3568的I2C1引脚连接正常,是否接拉电阻(4.7K)。

问题2:驱动加载成功,但屏幕触控无响应

现象:dmesg无报错,getevent能看到设备,但点击屏幕无任何事件输出;

原因&排查步骤

1.中断GPIO异常:检查touch-gpio的引脚号、触发方式(IRQ_TYPE_LEVEL_LOW)是否正确,执行cat /proc/interrupts | grep goodix查看中断是否被注册,若中断计数为0,说明GPIO未触发中断;

gt911

2.芯片未进入工作模式:GT911若进入Sleep模式会停止扫描,可通过驱动gtp_wakeup_sleep函数唤醒,或检查硬件电源是否为2.8~3.3V(芯片推荐工作电压);

3.配置寄存器未发送:驱动gtp_init_panel会向GT911发送配置参数,若bgt911未设为TRUE,会导致配置不匹配,检查设备树tp-size = <911>是否配置正确。

问题3:触控有响应,但坐标偏移/反转(点击东,触控点西)

现象:点击屏幕某位置,触控点出现在其他位置,或X/Y轴反转;

原因&排查步骤

1.坐标交换/反转参数错误:调整gt9xx.c中的gtp_change_x2y(XY交换)、gtp_x_reverse/gtp_y_reverse(坐标反转),逐一枚举测试(如gtp_y_reverse=FALSE);

2.屏幕分辨率不匹配:检查设备树max-x/max-y是否与实际屏幕分辨率一致,若分辨率错误会导致坐标比例失调;

3.GT911传感器配置错误:芯片的驱动/感应通道与屏幕的物理排布需匹配,若硬件做了通道调整,需修改驱动中Sensor_CH0~CH13、Driver_CH0~CH25的寄存器配置(0x80B7~0x80EE)。

问题4:触控点乱跳,或偶尔无响应

现象:屏幕无触摸时,触控点自动跳动,或点击时偶尔无响应;

原因&排查步骤

1.抗干扰配置不足:GT911支持跳频功能,可在驱动中开启跳频(配置0x807A~0x808F跳频寄存器),避开电源、LCD的干扰频率;

2.硬件接地不良:GT911的AGND/DGND需可靠接地,否则会出现电容检测干扰,导致点飘;

3.去抖参数设置不合理:调整驱动中Shake_Count(去抖次数,寄存器0x804F),增大去抖次数可减少点飘(如设置为5)。

问题5:休眠唤醒后触控无响应

现象:系统休眠前触控正常,唤醒后触控无响应;

原因&排查步骤

1.休眠后芯片未唤醒:驱动goodix_ts_early_resume函数中需调用gtp_wakeup_sleep唤醒GT911,检查该函数是否被正常调用;

2.中断未重新使能:休眠时驱动会禁用中断,唤醒后需重新执行gtp_irq_enable,检查中断使能逻辑是否完整;

3.电源管理问题:若触控芯片的电源被休眠关闭,需在设备树中配置power-supply,保证休眠时电源常供(如power-supply = <&vcc3v3_lcd0_n>)。

五、总结

RK3568+Android11平台的GT911触控驱动移植,核心是抓住“设备树标识匹配、GPIO/中断配置、坐标参数微调”三个关键点,本次实战的核心经验如下:

1.设备树是基础:compatible、tp-size、reg三个属性必须与驱动严格匹配,否则驱动无法加载;

2.坐标适配是关键:GT911的gtp_change_x2y是适配痛点,需根据硬件的物理排布调整,这是解决坐标偏移的核心;

3.排错先软后硬:先通过dmesg、getevent、i2cdetect排查软件配置问题,再检查硬件接线、电源、接地等问题;

4.驱动复用性强:汇顶gt9xx系列驱动框架兼容GT911/GT9110/GT9271等芯片,仅需通过tp-size做差异化配置,无需大幅修改驱动。

本次配置的补丁已在RK3568 EVB开发板实测通过,可直接作为GT911在RK3568+Android11平台的移植模板,仅需根据实际硬件的GPIO引脚、屏幕分辨率微调即可。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分