0

0

DRV_06_I2C接口触摸屏驱动分析

看不見的法師

看不見的法師

发布时间:2025-06-27 13:44:01

|

824人浏览过

|

来源于php中文网

原创

资料下载

由于无法通过浏览器直接访问coding,您需要使用git工具进行下载:

git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

您可以观看百问网的驱动大全视频。

I2C接口触摸屏驱动分析参考资料

  • Linux 5.x内核

    • Documentation\devicetree\bindings\input\touchscreen\goodix.txt
    • drivers/input/touchscreen/goodix.c
  • Linux 4.x内核

    • Documentation\devicetree\bindings\input\touchscreen\goodix.txt
    • drivers/input/touchscreen/gt9xx/gt9xx.c
  • 设备树

    千问APP
    千问APP

    阿里最强大模型官方AI助手

    下载
    • IMX6ULL:Linux-4.9.88/arch/arm/boot/dts/100ask_imx6ull-14x14.dts
    • STM32MP157:Linux-5.4/arch/arm/boot/dts/stm32mp15xx-100ask.dtsi

驱动程序框架

DRV_06_I2C接口触摸屏驱动分析

设备树示例

设备树讲解示例

作为一个I2C设备,在某个I2C控制器节点下创建一个子节点。属性包括:

  • 必备,根据这个属性找到驱动程序:compatible = "xxxx";
  • 必备,I2C设备地址:reg = ;
  • 可选:中断、复位引脚
i2c@00000000 {/* ... */gt928@5d {compatible = "goodix,gt928";reg = ;interrupt-parent = ;interrupts = ;irq-gpios = ;reset-gpios = ;};/* ... */};

100ASK_IMX6ULL

&i2c2 {gt9xx@5d {compatible = "goodix,gt9xx";reg = ;status = "okay";interrupt-parent = ;interrupts = ;pinctrl-names = "default";pinctrl-0 = ;/*pinctrl-1 = ;*//* pinctrl-names = "default", "int-output-low", "int-output-high", "int-input"; pinctrl-0 = ; pinctrl-1 = ; pinctrl-2 = ; pinctrl-3 = ;*/reset-gpios = ;irq-gpios = ;irq-flags = ;                /*1:rising 2: falling*/touchscreen-max-id = ;touchscreen-size-x = ;touchscreen-size-y = ;touchscreen-max-w = ;touchscreen-max-p = ;/*touchscreen-key-map = , ;*/ /*KEY_HOMEPAGE, KEY_BACK*/goodix,type-a-report = ;goodix,driver-send-cfg = ;goodix,create-wr-node = ;goodix,wakeup-with-reset = ;goodix,resume-in-workqueue = ;goodix,int-sync = ;goodix,swap-x2y = ;goodix,esd-protect = ;goodix,pen-suppress-finger = ;goodix,auto-update = ;goodix,auto-update-cfg = ;goodix,power-off-sleep = ;/* ...... */};};

100ASK_STM32MP157

&i2c4 {    gt911@5d {compatible = "goodix,gt928";reg = ;interrupt-parent = ;interrupts = ;reset-gpios = ;irq-gpios = ;irq-flags = ;                /*1:rising 2: falling*/touchscreen-max-id = ;touchscreen-size-x = ;touchscreen-size-y = ;};};

驱动程序分析

分配/设置/注册input_dev

  • IMX6ULL Linux 4.x
gtp_proberet = gtp_request_input_dev(ts);ts->input_dev = input_allocate_device();......ret = input_register_device(ts->input_dev);ret = gtp_request_irq(ts);
  • STM32MP157 Linux 5.x
goodix_ts_probeerror = request_firmware_nowait(THIS_MODULE, true, ts->cfg_name,&client->dev, GFP_KERNEL, ts,goodix_config_cb);goodix_config_cbgoodix_configure_dev(ts);ts->input_dev = devm_input_allocate_device(&ts->client->dev);......error = input_register_device(ts->input_dev);error = goodix_request_irq(ts);

注册中断处理函数

  • IMX6ULL Linux 4.x
ret = request_threaded_irq(ts->client->irq, NULL,gtp_irq_handler,ts->pdata->irq_flags | IRQF_ONESHOT,ts->client->name,ts);
  • STM32MP157 Linux 5.x
static int goodix_request_irq(struct goodix_ts_data *ts){return devm_request_threaded_irq(&ts->client->dev, ts->client->irq, NULL, goodix_ts_irq_handler, ts->irq_flags, ts->client->name, ts);}

中断处理函数分析

通过I2C函数读取数据、上报数据。

  • IMX6ULL Linux 4.x
gtp_irq_handlergtp_work_func(ts);point_state = gtp_get_points(ts, points, &key_value);gtp_i2c_readi2c_transfergtp_mt_slot_report(ts, point_state & 0x0f, points);input_mt_slotinput_mt_report_slot_stateinput_report_abs
  • STM32MP157 Linux 5.x
goodix_ts_irq_handlergoodix_process_events(ts);touch_num = goodix_ts_read_input_report(ts, point_data);goodix_i2c_readi2c_transfergoodix_ts_report_touch_9binput_mt_slotinput_mt_report_slot_statetouchscreen_report_posinput_report_abs

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1023

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

442

2025.12.29

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2023.11.24

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

639

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

527

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

264

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

549

2024.04.09

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

3

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
c语言项目php解释器源码分析探索
c语言项目php解释器源码分析探索

共7课时 | 0.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号