触摸TP,gt9xx调试分享

2023-10-04 17:26
文章标签 调试 分享 tp gt9xx 触摸

本文主要是介绍触摸TP,gt9xx调试分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

板子:rk3568
平台:android11

1.添加驱动

驱动文件列表:

-rw-rw-r-- 1 vtlk vtlk  17979 1020 14:04  goodix_tool.c
-rw-rw-r-- 1 vtlk vtlk    965 711 16:52 'GT9110P(2020)V71_Config_20201028_170326.cfg'
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  GT9110P_Config_20160217_1526_2048_97.cfg
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  GT9271_Config_20170526.cfg
-rw-rw-r-- 1 vtlk vtlk  87561 1020 15:30  gt9xx.c
-rw-rw-r-- 1 vtlk vtlk   1853 711 16:52  gt9xx_cfg.h
-rw-rw-r-- 1 vtlk vtlk 224220 1020 11:38  gt9xx_firmware.h
-rw-rw-r-- 1 vtlk vtlk  14656 1020 15:13  gt9xx.h
-rw-rw-r-- 1 vtlk vtlk 106042 1020 11:38  gt9xx_update.c
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  HLS-0102-1398V1-1060-GT911_Config_20201204_V66.cfg
-rw-rw-r-- 1 vtlk vtlk    152 1020 15:45  Makefile
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  WGJ10162B_GT9271_1060_Config_20140821_1341110X42.cfg
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  WGJ10162_GT9271_Config_20140820_182456.cfg
-rw-rw-r-- 1 vtlk vtlk   1366 711 16:52  WGJ10187_GT910_Config_20140623_104014_0X41.cfg
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  WGJ10187_GT9271_Config_20140623_104014_0X41.cfg
-rwxrwxr-x 1 vtlk vtlk    929 711 16:52  WGJ89006B_GT911_Config_20140625_085816_0X43.cfg
-rw-rw-r-- 1 vtlk vtlk    929 711 16:52  WGJ89006B_GT9271_Config_20140625_085816_0X41.cfg

首先是设备树配置:

&i2c1 {status = "okay";gt928:gt928@14 {compatible = "goodix,gt9xx";//"goodix,gt928";status = "okay";reg = <0x14>;pinctrl-names = "default";pinctrl-0 = <&gt928_reset_pin &gt928_int_pin>;interrupt-parent = <&gpio0>;interrupts = <RK_PB5 IRQ_TYPE_EDGE_FALLING>;touch-gpio = <&gpio0 RK_PB5 0>;reset-gpio = <&gpio0 RK_PB6 0>;max-x = <800>;max-y = <1280>;tp-size = <928>;};
};

这里的touch-gpio,reset-gpio,max-x,max-y,tp-size是根据probe代码里获取设备树属性来确定的,drivers/input/touchscreen/gt9xx/gt9xx.c中probe部分代码如下:

static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
{s32 ret = -1;struct goodix_ts_data *ts;u16 version_info;struct device_node *np = client->dev.of_node;enum of_gpio_flags rst_flags, pwr_flags;u32 val;...if (of_property_read_u32(np, "tp-size", &val)) {dev_err(&client->dev, "no max-x defined\n");return -EINVAL;}ts->tp_regulator = devm_regulator_get(&client->dev, "tp");if (IS_ERR(ts->tp_regulator)) {dev_err(&client->dev, "failed to get regulator, %ld\n",PTR_ERR(ts->tp_regulator));return PTR_ERR(ts->tp_regulator);}ret = regulator_enable(ts->tp_regulator);if (ret < 0)GTP_ERROR("failed to enable tp regulator\n");msleep(20);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;...if (of_property_read_bool(np, "wakeup-source")){device_init_wakeup(&client->dev, 1);enable_irq_wake(ts->irq);}...
}

这里的max-x,max-y是屏幕尺寸对应触摸最大范围;touch-gpio,reset-gpio,分别表示对应的中断检测脚和复位脚;tp-size对应的是正反转的,我这里是直接在gt9xx.c修改全局变量所以tp-size根据需要来配置就可以了;
其次就是在deconfig文件中添加编译

CONFIG_TOUCHSCREEN_GT9XX=y

编译好后download到板子上,成功后的log:

[    1.129428] goodix_ts_probe() start
[    1.129483] Goodix-TS 1-0014: 1-0014 supply tp not found, using dummy regulator
[    1.129565] Goodix-TS 1-0014: Linked as a consumer to regulator.0
[    1.320703] input: goodix-ts as /devices/platform/fe5a0000.i2c/i2c-1/1-0014/input/input1

被注册成输入设备1了
或者使用命令 adb shell getevent 打开输入检测,触摸屏幕会在终端上打印触摸坐标信息,如:

vtlk:~$adb shell getevent
add device 1: /dev/input/event1name:     "goodix-ts"
add device 2: /dev/input/event3name:     "gpio-keys"
add device 3: /dev/input/event0name:     "rk805 pwrkey"
add device 4: /dev/input/event2name:     "adc-keys"
add device 5: /dev/input/event4name:     "rk-headset"
/dev/input/event1: 0001 014a 00000001
/dev/input/event1: 0003 0035 000002e8
/dev/input/event1: 0003 0036 0000021f
/dev/input/event1: 0003 0030 00000020
/dev/input/event1: 0003 0032 00000020
/dev/input/event1: 0003 0039 00000000
/dev/input/event1: 0000 0002 00000000
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0003 0035 000002e8

2.问题

对应的x和y轴的相反,可以修改drivers/input/touchscreen/gt9xx/gt9xx.c中的全局变量:

static u8 gtp_change_x2y = FALSE;

如果只是x左右相反或折y方向的上下相反可以修改如下量个变量

static u8 gtp_x_reverse = TRUE;
static u8 gtp_y_reverse = TRUE;

这篇关于触摸TP,gt9xx调试分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/2411

相关文章

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具