RK3568 android11 实现双路I2C触摸 --gt9xx

一,GT911 触摸屏简介

  1. 它的接口类型为 I2C ,供电电压和通讯电压均为 3.3V 。这款电容触摸屏内置了上拉电阻,这意味着我们的开发板上与该触摸屏的接口处不需要设置上拉电阻。
  2. 关于线序,同样是 GT911 ,不同批次的器件都有不同的线序。具体的要自行与厂家确认。

二,DTS配置

调试双I2C触摸,两个tp是同一型号(gt911),dts 文件配置的主要是 CPU 与触摸屏之间 I2C 通信的信息,查看硬件原理图两路tp是挂载在不同的I2C下。

TP1(i2c1):
在里插入图片描述
TP2(i2c3):
在这里插入图片描述

&i2c1 {
        status = "okay";

        gt1x: gt1x@14 {
                status = "okay";
                compatible = "goodix,gt9xx";
                reg = <0x14>;
                pinctrl-names = "default";
                pinctrl-0 = <&touch_gpio>;
                reset-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;//复位脚
                touch-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;//中断脚
                max-x = <1920>;
                max-y = <1080>;
                tp-size = <0>;
        };
};

&i2c3 {
        status = "okay";

        gt1x@14 {
            status = "okay";
            compatible = "goodix,gt9xx_extend";
            reg = <0x14>;
            pinctrl-names = "default";
            pinctrl-0 = <&extend_touch_gpio>;
            extend_reset-gpio = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>;
            extend_touch-gpio = <&gpio3 RK_PA3 IRQ_TYPE_LEVEL_LOW>;
            max-x = <1920>;
            max-y = <1080>;
            tp-size = <0>;
        };
};

&pinctrl {

        touch {
                touch_gpio: touch-gpio {
                        rockchip,pins =
                                <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>,
                                <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
                };
                extend_touch_gpio:extend-touch-gpio{
                        rockchip,pins =
                                <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>,
                                <3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
};

三,驱动文件配置

驱动相关的文件主要的就 3 个文件(这里以TP1的驱动为例):

1,gt9xx.c

static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) //入口函数
{
    ...

    ts->irq_pin = of_get_named_gpio_flags(np, "touch-gpio", 0, (enum of_gpio_flags *)(&ts->irq_flags));
    ts->rst_pin = of_get_named_gpio_flags(np, "reset-gpio", 0, &rst_flags);
    ts->pwr_pin = of_get_named_gpio_flags(np, "power-gpio", 0, &pwr_flags);
    //ts->tp_select_pin = of_get_named_gpio_flags(np, "tp-select-gpio", 0, &tp_select_flags);
    if (of_property_read_u32(np, "max-x", &val)) {
        dev_err(&client->dev, "no max-x defined\n");
        return -EINVAL;
    }
    //ts->abs_x_max = val;
    if (of_property_read_u32(np, "max-y", &val)) {
        dev_err(&client->dev, "no max-y defined\n");
        return -EINVAL;
    }
    //ts->abs_y_max = val;
    if (of_property_read_u32(np, "configfile-num", &val)) {
        ts->cfg_file_num = 0;
    } else {
        ts->cfg_file_num = val;
    }
    ts->pendown =PEN_RELEASE;
    ts->client = client;
    
    INIT_WORK(&ts->work, goodix_ts_work_func);
    ts->client = client;
    spin_lock_init(&ts->irq_lock);          // 2.6.39 later
    // ts->irq_lock = SPIN_LOCK_UNLOCKED;   // 2.6.39 & before

    ...

}

在这个函数中,可以看到读取前面dts中配置的信息,dts中的配置名,必须要与这份代码里的一致;

2,gt9xx.h

头文件里有几个宏,是关乎调试打印的,在我们适配过程中打开这些打印可以帮助我们定位一些问题。

#define DEBUG_SWITCH 0
#define GTP_DEBUG_ON          0
#define GTP_DEBUG_FUNC_ON     0
//这几个打印默认是关闭的,可以置1打开

3,cfg 文件

cfg 文件是触摸屏的初始化指令,它在上电后由 CPU 将这些指令通过 I2C 写到触摸屏的芯片中。
cfg文件是在gt9xx_cfg.h中配置,驱动程序具体引用了哪一份数组,可以自行查看确定。

#ifndef _GOODIX_GT9XX_CFG_H_
#define _GOODIX_GT9XX_CFG_H_

/* CFG for GT911 */
u8 gtp_dat_gt11[] = {
    /* <1200, 1920>*/
    #include "WGJ89006B_GT911_Config_20140625_085816_0X43.cfg"
};

u8 gtp_dat_8_9[] = {
    /* TODO:Puts your update firmware data here! */
    /* <1920, 1200> 8.9 */
    /* #include "WGJ89006B_GT9271_Config_20140625_085816_0X41.cfg" */
    /* #include "WGJ10162_GT9271_Config_20140820_182456.cfg" */
    #include "WGJ10162B_GT9271_1060_Config_20140821_1341110X42.cfg"
};

u8 gtp_dat_8_9_1[] = {
    #include "GT9271_Config_20170526.cfg"
};

u8 gtp_dat_9_7[] = {
    /* <1536, 2048> 9.7 */
    #include "GT9110P_Config_20160217_1526_2048_97.cfg"
};

u8 gtp_dat_10_1[] = {
    /* TODO:Puts your update firmware data here! */
    /* <1200, 1920> 10.1 */
    #include "WGJ10187_GT9271_Config_20140623_104014_0X41.cfg"
};

u8 gtp_dat_7[] = {
    /* TODO:Puts your update firmware data here! */
    /* <1024, 600> 7.0 */
    #include "WGJ10187_GT910_Config_20140623_104014_0X41.cfg"
};

#endif /* _GOODIX_GT9XX_CFG_H_ */

4,驱动移植

a.将原厂提供的的驱动(gt9xx)拷贝到下面的文件夹:

./kernel/drivers/input/touchscreen

b. 然后修改 touchscreen 目录下的 Makefile以及Kconfig。这个Makefile中定义的就是要编译哪个平台的触摸屏驱动的。

kernel/drivers/input/touchscreen/Makefile中添加:
obj-$(CONFIG_TOUCHSCREEN_GT9XX)                += gt9xx/
obj-$(CONFIG_TOUCHSCREEN_GT9XX_EXTEND)         += gt9xx_extend/


------------------------------------------------------------------------
kernel/drivers/input/touchscreen/Kconfig中添加:
source "drivers/input/touchscreen/gt9xx/Kconfig"
source "drivers/input/touchscreen/gt9xx_extend/Kconfig"

c. 内核中加载驱动:

kernel/arch/arm64/configs/rockchip_defconfig中添加:
CONFIG_TOUCHSCREEN_GT9XX=y
CONFIG_TOUCHSCREEN_GT9XX_EXTEND=y

注: 实现双I2C触摸,两份驱动可以使用一样的。即 将TP1的驱动复制一份出来给TP2使用,复制之后改匹配的字段,这时编译会出现冲突,然后把两份驱动中冲突的部分重命名,之后编译通过即可(判断驱动生效可以看文件夹下是否有对应的.o文件生成)。


三,调试

1>. 看上电时的内核打印日志,和触摸屏相关的打印都是以下列关键字开头的:

<<-GTP-INFO->>
<<-GTP-DEBUG->>
<<-GTP-ERROR->>

adb shell dmesg | grep GTP 可过滤触摸屏相关的打印。
2>. 查看工作状态的方式是看中断统计信息:

cat /proc/interrupts

驱动顺利加载的话,可以看到列出来的信息里有gt9xx,gt9xx_extend的统计信息。这些信息记录的就是这些中断发生的次数,通常我们与触摸屏交互,都能产生好多次中断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/194306.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学习JavaScript--JavaScript对象继承深度解析

JavaScript中的对象继承是构建灵活、可维护代码的关键部分。本文将深入讨论JavaScript中不同的继承方式&#xff0c;包括原型链继承、构造函数继承、组合继承等&#xff0c;并通过丰富的示例代码展示它们的应用和差异。通过详细解释&#xff0c;大家可以更全面地了解如何在Java…

vulfocus apache-cve_2021_41773 漏洞复现

vulfocus apache-cve_2021_41773 漏洞复现 名称: vulfocus/apache-cve_2021_41773 描述: Apache HTTP Server 2.4.49、2.4.50版本对路径规范化所做的更改中存在一个路径穿越漏洞&#xff0c;攻击者可利用该漏洞读取到Web目录外的其他文件&#xff0c;如系统配置文件、网站源码…

IDEA中也能用postman了?

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

修改mysql的密码(每一步都图文解释哦)

当你想要连接本机数据库时&#xff0c;是不是有可能突然忘记了自己的数据库密码? 在此文中&#xff0c;我们来详细解决一下如何去修改自己的数据库密码&#xff0c;并使用Navicat来连接测试 1.停止mysql服务 打开终端&#xff0c;键入命令,将mysql服务先停止掉&#xff0c;…

Matlab论文插图绘制模板第128期—函数三维折线图(fplot3)

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下函数三维折线图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋友可以关…

Linux系统编程:文件系统总结

目录和文件 获取文件属性 获取文件属性有如下的系统调用&#xff0c;下面逐个来分析。 stat:通过文件路径获取属性&#xff0c;面对符号链接文件时获取的是所指向的目标文件的属性 从上图中可以看到stat函数接收一个文件的路径字符串&#xff08;你要获取哪个文件的属性&a…

数据结构和算法-树和二叉树的定义和基本术语和性质

文章目录 树的基本概念和相关术语相关的应用节点间的关系描述节点&#xff0c;树的属性描述有序树vs无序树树vs森林小结 树的相关性质考点1考点2考点3考点4考点5考点6小结 二叉树的相关概念和基本术语重要 &#xff08;五种状态&#xff09;特殊二叉树小结 二叉树的相关性质二叉…

SpringCloudAlibaba之Nacos的持久化和高可用——详细讲解

目录 一、Nacos持久化 1.持久化说明 2.安装mysql数据库5.6.5以上版本(略) 3.修改配置文件 二、nacos高可用 1.集群说明 2.nacos集群架构图 2.集群搭建注意事项 3.集群规划 4.搭建nacos集群 5.安装Nginx 6.配置nginx conf配置文件 7.启动nginx进行测试即可 一、Nacos持久…

【算法】NOIP2003神经网络

题目描述 人工神经网络&#xff08;Artificial Neural Network&#xff09;是一种新兴的具有自我学习能力的计算系统&#xff0c;在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向&#xff0c;兰兰同学在自学了一本神经网络的…

经验分享:JMeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就…

19.Oracle11g中的游标

oracle11g中的游标 一、案例引入二、什么是游标三、隐式游标1、隐式游标的属性2、创建语法3、示例 四、显示游标1、显示游标的属性2、创建语法3、示例 五、REF游标1、REF游标的属性2、创建语法3、示例 六、循环游标1、 循环游标的作用2、用for 与 loop 创建3、示例 一、案例引入…

基于可微分渲染器的相机位置优化【PyTorch3D】

在这个教程中&#xff0c;我们将使用可微渲染学习给定参考图像的相机的 [x, y, z] 位置。 我们将首先使用相机的起始位置初始化渲染器。 然后&#xff0c;我们将使用它来生成图像&#xff0c;使用参考图像计算损失&#xff0c;最后通过整个管道进行反向传播以更新相机的位置。…

【开源】基于Vue+SpringBoot的企业项目合同信息系统

项目编号&#xff1a; S 046 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S046&#xff0c;文末获取源码。} 项目编号&#xff1a;S046&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合…

Flask Echarts 实现历史图形查询

Flask前后端数据动态交互涉及用户界面与服务器之间的灵活数据传递。用户界面使用ECharts图形库实时渲染数据。它提供了丰富多彩、交互性强的图表和地图&#xff0c;能够在网页上直观、生动地展示数据。ECharts支持各种常见的图表类型&#xff0c;包括折线图、柱状图、饼图、散点…

FFmepg 核心开发库及重要数据结构与API

文章目录 前言一、FFmpeg 核心开发库二、FFmpeg 重要数据结构与 API1、简介2、FFmpeg 解码流程①、FFmpeg2.x 解码流程②、FFmpeg4.x 解码流程 3、FFMpeg 中比较重要的函数以及数据结构①、数据结构②、初始化函数③、音视频解码函数④、文件操作⑤、其他函数 三、FFmpeg 流程1…

【活动回顾】sCrypt在柏林B2029开发者周

B2029 是柏林的一个区块链爱好者、艺术家和建设者聚会&#xff0c;学习、讨论和共同构建比特币区块链地方。 在2023年6月9日至11日&#xff0c;举行了第7次Hello Metanet研讨会。本次研讨会旨在为参与者提供一个学习、讨论和共同构建比特币区块链的平台。 在这个充满激情和创意…

C语言:输出所有“水仙花数”。“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身,如153=1^3 +5^3+3^3

分析&#xff1a; 在主函数 main 中&#xff0c;程序首先定义四个整型变量 m、a、b 和 c&#xff0c;并用于计算和判断水仙花数。然后使用 printf 函数输出提示信息。 接下来&#xff0c;程序使用 for 循环结构&#xff0c;从 100 到 999 遍历所有三位数。对于每个遍历到的数 m…

Vue简易的车牌输入键盘,可以根据需要修改

效果图如下&#xff1a; 代码如下&#xff1a; <template><div><div class"carNoBoxInput"><div style"padding: 6px;border: 2px solid #fff;border-radius: 6px;margin: 6px 3px 6px 6px;"><input class"inputBox"…

Make sure bypassing Vue built-in sanitization is safe here.

一、问题描述 二、问题分析 XSS(跨站脚本攻击) XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript&#xff0c;但实际上也可以包括J…

https到底把什么加密了?

首先直接说结论&#xff0c; https安全通信模式&#xff0c;是使用TLS加密传输所有的http协议。再重复一遍&#xff0c;是所有&#xff01; 通常将TLS加密传输http这个通信过程称为https&#xff0c;如果使用协议封装的逻辑结构来表达就是&#xff1a; IP TCP TLS 【 HTTP 】…