参考资料:

  • 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接口触摸屏驱动分析相关推荐

  1. Linux的I2C 设备驱动 -- mini2440 上i2c接口触摸屏驱动

    本篇记录在友善之臂 mini2440 平台上挂载I2C接口触摸屏的驱动开发过程. 内核版本linux-2.6.32.2, 平台是ARM9 S3C2440+I2C接口的触摸屏 如上篇 Linux的I2C ...

  2. Wince6.0 s3c6410触摸屏驱动分析

    http://blog.sina.com.cn/s/blog_4b4b54da01012gbz.html Wince6.0 s3c6410触摸屏驱动分析     一.wince 触摸屏驱动概述... ...

  3. android 触摸屏驱动分析,Android 触摸屏驱动代码分析(ADC 类型触摸屏 CPU:s3c

    Android 2.1 farsight version for s5pc100 File Name: s3c-ts.c 1           简介 1.1          本例基于s5pc100 ...

  4. linux 触摸屏驱动分析

    mini2440驱动分析系列之 ---------------------------------------Mini2440触摸屏程序分析 By JeefJiang July,8th,2009 这是 ...

  5. Linux3.4.2的触摸屏驱动分析与编写

    开发环境: 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT043TN24 参考文 ...

  6. 触摸屏驱动分析: (本机驱动)

    触摸屏驱动为本机驱动,由微软提供有通用层 MDD,我们只需要编写PDD层就可以了.触摸屏驱动由GWES 加载,GWES 通过MDD层的DDI设备驱动程序接口函数(Device Driver Inter ...

  7. 触摸屏驱动分析(eeti源码为例)

    module_init(egalax_i2c_ts_init)–>表示驱动加载时首先执行的函数是egalax_i2c_ts_init,下面看egalax_i2c_ts_init函数源码: sta ...

  8. usb 接口触摸屏驱动

    以前写的 USB 接口的触摸屏驱动,那段时间简单的看了下 USB 协议的一些东西,主要是 HID 相关的,代码记录: /*Created by_fire 2012.2.13 */ #include & ...

  9. android平台的s5pc110触摸屏驱动分析

    内核linux2.6.35 andorid2.3 触摸屏型号ft5xo6 首先给出该触摸屏的一些结构体---->drivers/input/touchscreen/ft5x06_ts.h 点击( ...

  10. 基于i2c子系统的驱动分析

    https://blog.csdn.net/qq_28992301/article/details/52467766

最新文章

  1. 疫情来袭,远程办公,敏捷团队怎么办?
  2. 【周末阅读】10年内,19个关键技术将改变世界
  3. PhantomJS快速入门教程(转)
  4. eclipse下的tomcat内存设置大小
  5. linux面试题中的简答题,[计算机]linux面试题简答题部分.doc
  6. Linux : 文件处理命令
  7. left join 大表放前面_带娃时,走在孩子前面与跟在孩子身后区别很大,很多父母都做错了...
  8. TCP模块的断开操作
  9. pandas-pandas.Categorical
  10. 以前收集到的PHP总结笔记
  11. aw36515闪光灯驱动ic调试
  12. ECMAScript 变量
  13. 微信PC端浏览器内置浏览器
  14. SegeX MemDialog:封装好的内存对话框(非资源对话框)说明
  15. 一代宗师威廉·欧奈尔的选股法则详解
  16. 【智能优化算法-闪电算法】基于闪电算法求解多目标优化问题附matlab代码
  17. STM32与RC522简单公交卡系统的设计
  18. 【惊】Spring源码的秘密|一起看看Spring启动时究竟做了什么惊天动地的事情?
  19. 【文献阅读】翻译王军武老师的文献--《稠密气固流的连续理论现状回顾》二、第一节 引言
  20. 两轮市场红海,利尔达芯智行如何乘风破浪?

热门文章

  1. ghost网络克隆功能实现【批量】计算机操作【系统的安装】,网克(诚龙网维全自动PXE网刻工具)批量使用GHOST方法...
  2. SmartPhone和PPC手机的区别
  3. android电源管理白名单,刷BIOS工具分享(白名单,高级菜单,电源管理)
  4. web打印POS小票机代码
  5. 使用jmeter快速生成测试报告
  6. Visio2003 下载
  7. IOS APP Store下载链接
  8. 软件we端压力测试,软件压力测试报告
  9. 实时渲染学习(六)延迟渲染(Deferred Rendering)
  10. 惠普战99安装deepin20.2.4并驱动NVIDIA显卡