0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_44130326 来源:Linux1024 作者:Linux1024 2026-03-19 11:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在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交换问题,这是触控点与屏幕点击位置匹配的关键:

elseif(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未触发中断;

8eeb8fac-2342-11f1-b0db-92fbcf53809c.png

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引脚、屏幕分辨率微调即可。

审核编辑 黄宇

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

    关注

    12

    文章

    4035

    浏览量

    134446
  • gt911
    +关注

    关注

    0

    文章

    2

    浏览量

    2985
  • RK3568
    +关注

    关注

    5

    文章

    654

    浏览量

    8097
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术分享 | RK3568 Android11 如何实现自启动应用

    随着Android版本的不断升级,对于应用权限的管理会更加苛刻。我司IAC-RK3568-Kit开发板默认搭载Android11,相比较之前RK3288的产品安卓版本变更较大,有些客户
    的头像 发表于 02-05 17:26 648次阅读
    技术分享 | <b class='flag-5'>RK3568</b> <b class='flag-5'>Android11</b> 如何实现自启动应用

    RK3568 Android11编译环境搭建及报错解决指南

    在嵌入式开发领域,RK3568 芯片凭借其出色的性能被广泛应用。基于 RK3568 进行 Android11 系统的开发,首先要搭建好编译环境。本文将详细介绍在 Ubuntu20.04 系统上搭建
    的头像 发表于 02-04 17:37 2057次阅读
    <b class='flag-5'>RK3568</b> <b class='flag-5'>Android11</b>编译环境搭建及报错解决指南

    迅为驱动开发实战:iTOP-RK3568开发板eDP屏幕移植全攻略

    迅为驱动开发实战:iTOP-RK3568开发板eDP屏幕移植全攻略
    的头像 发表于 12-30 15:42 1214次阅读
    迅为<b class='flag-5'>驱动</b>开发<b class='flag-5'>实战</b>:iTOP-<b class='flag-5'>RK3568</b>开发板eDP屏幕<b class='flag-5'>移植</b>全攻略

    【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战RK3568内核模块符号导出详解

    【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战RK3568内核模块符号导出详解
    的头像 发表于 11-21 13:25 1581次阅读
    【迅为工业<b class='flag-5'>RK3568</b>稳定可靠】itop-<b class='flag-5'>3568</b>开发板Linux<b class='flag-5'>驱动</b>开发<b class='flag-5'>实战</b>:<b class='flag-5'>RK3568</b>内核模块符号导出详解

    RK3568 NPU实战】别再闲置你的NPU!手把手带你用迅为资料跑通Android AI检测Demo,附完整流程与效果

    RK3568 NPU实战】别再闲置你的NPU!手把手带你用迅为资料跑通Android AI检测Demo,附完整流程与效果
    的头像 发表于 11-10 15:58 1233次阅读
    【<b class='flag-5'>RK3568</b> NPU<b class='flag-5'>实战</b>】别再闲置你的NPU!手把手带你用迅为资料跑通<b class='flag-5'>Android</b> AI检测Demo,附完整流程与效果

    如何基于开发板RK3568 Android 11强制所有应用横屏展示

    RK3568 Android 11强制所有应用横屏展示,1、打开frameworks/base/core/java/android/content/pm/parsing/compone
    的头像 发表于 11-07 16:07 870次阅读
    如何基于开发板<b class='flag-5'>RK3568</b> <b class='flag-5'>Android</b> <b class='flag-5'>11</b>强制所有应用横屏展示

    实战RK3568性能调优:如何利用迅为资料压榨NPU潜能-在Android系统中使用NPU

    实战RK3568性能调优:如何利用迅为资料压榨NPU潜能-在Android系统中使用NPU》
    的头像 发表于 11-07 13:42 983次阅读
    <b class='flag-5'>实战</b><b class='flag-5'>RK3568</b>性能调优:如何利用迅为资料压榨NPU潜能-在<b class='flag-5'>Android</b>系统中使用NPU

    迅为RK3568开发板模型推理测试实战LPRNet 车牌识别

    迅为RK3568开发板模型推理测试实战LPRNet 车牌识别
    的头像 发表于 08-25 14:55 1536次阅读
    迅为<b class='flag-5'>RK3568</b>开发板模型推理测试<b class='flag-5'>实战</b>LPRNet 车牌识别

    【RA-Eco-RA6M4开发板评测】移植gt911的触摸驱动

    RA6M4驱动****GT911 在我使用的TFT—LCD屏中的触摸屏为GT911。 【原理图】 GT911---- IOSCL ----400SDA ----401RST ----7
    发表于 08-08 20:10

    技术分享 | RK3568 Android预安装应用

    很多客户在使用安卓系统时希望自己的业务APP能够第一时间开机启动,并且内置在系统当中。今天就以我司IAC-RK3568-Kit为例,分享如何在Android11系统中内置自己的业务APP。购买我司
    的头像 发表于 08-06 17:23 952次阅读
    技术分享 | <b class='flag-5'>RK3568</b> <b class='flag-5'>Android</b>预安装应用

    迅为RK3568 重制版RK3568驱动指南全面升级

    迅为RK3568 重制版RK3568驱动指南全面升级
    的头像 发表于 07-28 15:25 3471次阅读
    迅为<b class='flag-5'>RK3568</b> 重制版<b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b>指南全面升级

    迅为RK3568驱动指南GPIO子系统 GPIO操作函数实验

    迅为电子RK3568开发板驱动指南GPIO子系统 GPIO操作函数实验
    的头像 发表于 05-28 15:24 1488次阅读
    迅为<b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b>指南GPIO子系统 GPIO操作函数实验

    迅为3568开发板实操-HDF驱动配置 UART-配置 rk3568_uart_config.hcs

    、} 9、device_uart_0x0009 :: uart_device { 10、num = 9; 11、match_attr = \"rockchip_rk3568
    发表于 05-23 16:21

    迅为RK3568驱动指南GPIO子系统实战:实现动态切换引脚复用功能

    迅为RK3568驱动指南GPIO子系统实战:实现动态切换引脚复用功能
    的头像 发表于 05-22 14:27 2321次阅读
    迅为<b class='flag-5'>RK3568</b><b class='flag-5'>驱动</b>指南GPIO子系统<b class='flag-5'>实战</b>:实现动态切换引脚复用功能

    迅为RK3568开发板实操-HDF驱动配置UART-修改HCS配置

    对于不同的平台,需要在对应的平台目录修改对应的 hcs 文件,接下来示例为在 rk3568下新增 uart4 uart9 uart7 的修改方法。 修改 vendor/hihope/rk3568
    发表于 05-22 11:32