I2C接口触摸屏驱动分析
参考资料:
- Documentation\devicetree\bindings\input\touchscreen\goodix.txt
- drivers/input/touchscreen/gt9xx/gt9xx.c
设备树:
- IMX6ULL:
Linux-4.9.88/arch/arm/boot/dts/100ask_imx6ull-14x14.dts
- STM32MP157:
Linux-5.4/arch/arm/boot/dts/stm32mp15xx-100ask.dtsi
一、设备树示例
1.1 设备树学习
示例:
i2c@00000000 { //位于某个I2C总线下/* ... */gt928@5d {compatible = "goodix,gt928"; //用来匹配驱动程序reg = <0x5d>; //I2C设备地址interrupt-parent = <&gpio>;interrupts = <0 0>; irq-gpios = <&gpio1 0 0>; //中断引脚reset-gpios = <&gpio1 1 0>; //复位引脚};/* ... */
};
100ASK_IMX6ULL
&i2c2 {gt9xx@5d {compatible = "goodix,gt9xx";reg = <0x5d>;status = "okay";interrupt-parent = <&gpio1>;interrupts = <5 IRQ_TYPE_EDGE_FALLING>;pinctrl-names = "default";pinctrl-0 = <&pinctrl_tsc_reset &pinctrl_touchscreen_int>;/*pinctrl-1 = <&pinctrl_tsc_irq>;*//*pinctrl-names = "default", "int-output-low", "int-output-high", "int-input";pinctrl-0 = <&ts_int_default>;pinctrl-1 = <&ts_int_output_low>;pinctrl-2 = <&ts_int_output_high>;pinctrl-3 = <&ts_int_input>;*/reset-gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;irq-gpios = <&gpio1 5 IRQ_TYPE_EDGE_FALLING>;irq-flags = <2>; /*1:rising 2: falling*/touchscreen-max-id = <5>;touchscreen-size-x = <800>;touchscreen-size-y = <480>;touchscreen-max-w = <1024>;touchscreen-max-p = <1024>;/*touchscreen-key-map = <172>, <158>;*/ /*KEY_HOMEPAGE, KEY_BACK*/goodix,type-a-report = <0>; //下面的都是芯片相关的属性值goodix,driver-send-cfg = <0>;goodix,create-wr-node = <1>;goodix,wakeup-with-reset = <0>;goodix,resume-in-workqueue = <0>;goodix,int-sync = <0>;goodix,swap-x2y = <0>;goodix,esd-protect = <0>;goodix,pen-suppress-finger = <0>;goodix,auto-update = <0>;goodix,auto-update-cfg = <0>;goodix,power-off-sleep = <0>;/* ...... */};
};
100ask_STM32MP157
&i2c4 {gt911@5d {compatible = "goodix,gt928";reg = <0x5d>;interrupt-parent = <&gpioe>;interrupts = <4 IRQ_TYPE_EDGE_FALLING>;reset-gpios = <&gpioe 12 GPIO_ACTIVE_LOW>; //复位引脚irq-gpios = <&gpioe 4 IRQ_TYPE_EDGE_FALLING>; //中断引脚irq-flags = <2>; /*1:rising 2: falling*/touchscreen-max-id = <5>;touchscreen-size-x = <1024>;touchscreen-size-y = <600>;};
};
二、驱动程序分析
2.1 分配/设置/注册input_dev
- IMX6ULL Linux 4.x
gtp_probe:ret = gtp_request_input_dev(ts); //注册input_devts->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);
2.2 注册中断处理函数
- 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);
}
2.3 中断处理函数分析
通过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
I2C接口触摸屏驱动分析相关推荐
- Linux的I2C 设备驱动 -- mini2440 上i2c接口触摸屏驱动
本篇记录在友善之臂 mini2440 平台上挂载I2C接口触摸屏的驱动开发过程. 内核版本linux-2.6.32.2, 平台是ARM9 S3C2440+I2C接口的触摸屏 如上篇 Linux的I2C ...
- Wince6.0 s3c6410触摸屏驱动分析
http://blog.sina.com.cn/s/blog_4b4b54da01012gbz.html Wince6.0 s3c6410触摸屏驱动分析 一.wince 触摸屏驱动概述... ...
- android 触摸屏驱动分析,Android 触摸屏驱动代码分析(ADC 类型触摸屏 CPU:s3c
Android 2.1 farsight version for s5pc100 File Name: s3c-ts.c 1 简介 1.1 本例基于s5pc100 ...
- linux 触摸屏驱动分析
mini2440驱动分析系列之 ---------------------------------------Mini2440触摸屏程序分析 By JeefJiang July,8th,2009 这是 ...
- Linux3.4.2的触摸屏驱动分析与编写
开发环境: 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT043TN24 参考文 ...
- 触摸屏驱动分析: (本机驱动)
触摸屏驱动为本机驱动,由微软提供有通用层 MDD,我们只需要编写PDD层就可以了.触摸屏驱动由GWES 加载,GWES 通过MDD层的DDI设备驱动程序接口函数(Device Driver Inter ...
- 触摸屏驱动分析(eeti源码为例)
module_init(egalax_i2c_ts_init)–>表示驱动加载时首先执行的函数是egalax_i2c_ts_init,下面看egalax_i2c_ts_init函数源码: sta ...
- usb 接口触摸屏驱动
以前写的 USB 接口的触摸屏驱动,那段时间简单的看了下 USB 协议的一些东西,主要是 HID 相关的,代码记录: /*Created by_fire 2012.2.13 */ #include & ...
- android平台的s5pc110触摸屏驱动分析
内核linux2.6.35 andorid2.3 触摸屏型号ft5xo6 首先给出该触摸屏的一些结构体---->drivers/input/touchscreen/ft5x06_ts.h 点击( ...
- 基于i2c子系统的驱动分析
https://blog.csdn.net/qq_28992301/article/details/52467766
最新文章
- 疫情来袭,远程办公,敏捷团队怎么办?
- 【周末阅读】10年内,19个关键技术将改变世界
- PhantomJS快速入门教程(转)
- eclipse下的tomcat内存设置大小
- linux面试题中的简答题,[计算机]linux面试题简答题部分.doc
- Linux : 文件处理命令
- left join 大表放前面_带娃时,走在孩子前面与跟在孩子身后区别很大,很多父母都做错了...
- TCP模块的断开操作
- pandas-pandas.Categorical
- 以前收集到的PHP总结笔记
- aw36515闪光灯驱动ic调试
- ECMAScript 变量
- 微信PC端浏览器内置浏览器
- SegeX MemDialog:封装好的内存对话框(非资源对话框)说明
- 一代宗师威廉·欧奈尔的选股法则详解
- 【智能优化算法-闪电算法】基于闪电算法求解多目标优化问题附matlab代码
- STM32与RC522简单公交卡系统的设计
- 【惊】Spring源码的秘密|一起看看Spring启动时究竟做了什么惊天动地的事情?
- 【文献阅读】翻译王军武老师的文献--《稠密气固流的连续理论现状回顾》二、第一节 引言
- 两轮市场红海,利尔达芯智行如何乘风破浪?
热门文章
- ghost网络克隆功能实现【批量】计算机操作【系统的安装】,网克(诚龙网维全自动PXE网刻工具)批量使用GHOST方法...
- SmartPhone和PPC手机的区别
- android电源管理白名单,刷BIOS工具分享(白名单,高级菜单,电源管理)
- web打印POS小票机代码
- 使用jmeter快速生成测试报告
- Visio2003 下载
- IOS APP Store下载链接
- 软件we端压力测试,软件压力测试报告
- 实时渲染学习(六)延迟渲染(Deferred Rendering)
- 惠普战99安装deepin20.2.4并驱动NVIDIA显卡