微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AM335x(TQ335x)学习笔记——触摸屏驱动编写

AM335x(TQ335x)学习笔记——触摸屏驱动编写

时间:11-28 来源:互联网 点击:
前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题。由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱动源码,单纯的配置DTS是无法完成TQ335x的触摸驱动移植工作的,因此,本文参考内核中原有的pixcir_i2c_ts驱动编写TQ335x的触摸屏(TN92)驱动。

在之前移植TQ210时,我已经编写过TQ210的触摸屏驱动,我的TQ335x还是使用的TQ210的屏,因此,难度不是很大。这里需要说明一点,在TQ210驱动移植时对多点触摸协议的理解还不够深入,当时编写的驱动单点触摸是可以正常使用的,但是多点触摸不对(这次编写TQ335x的触摸驱动是才意识到的)。但是编写的TQ210驱动多点触摸实际上使用的多点触摸的A协议,但是用错了一些地方,本文基于TQ335x的重新编写的触摸驱动是按照多点触摸B协议编写,使用tslib测试正常,文章末尾有效果图。

TN92触摸屏使用的触控芯片是GT811,下面我们来分析下触摸屏驱动的编写。

(1) 查看原理图

从触摸屏原理图中可以看到,GT811与开发板相连的引脚有四条,分别是SDA、SDL、INT和RESET。其中,I2C_SDA和I2C_SDL是连接到AM335x的I2C1端口上的,用来与SoC通信;INT引脚是连接在GPIO1的27号引脚上的,在检测到触摸时GT811通过该引脚向SoC发起中断请求;RESET引脚接到SoC的GPIO1的26号引脚上的,是用来接收SoC复位操作,对于本文,SoC就是AM335x。

其中,GT811与SoC的管脚连接信息可以从底板原理图中找到,SDA和SCL的我就不往外贴了,INT和RESET的连接关系如下:

YP连接到了GT811的RESET脚上,然后通过短路帽与GPIO1_26链接,YM连接到GT811的INT脚上,通过短路帽与GPIO1_27链接,因此,需要将GPIO1_27配置为终端输入引脚,GPIO1_26配置为输出引脚。此外,查看GT811的芯片手册可获得INT和RESET的操作信息:

  1. 1.GT811检测到触摸时会拉低中断引脚,因此,GPIO1_27需要配置为下降沿触发。
  2. 2.GT811的RESET脚为低电平有效,因此,上电时需要拉低RESET引脚。
  3. 3.GT811的RESET引脚自带上拉,因此,使用GPIO1_26将GT811的RESET拉低复位后切换为悬浮输入太即可。

了解这些信息后我们就可以开始分析驱动结构了。

(2) DTS配置Platform信息

通过前面的分析,我们知道需要配置AM335x的四条引脚才能使GT811正常工作。其中,GT811通过I2C接口连接到AM335x的I2C1上,因此,需要配置AM335x的I2C1的两条引脚为I2C功能;GPIO1_27需要配置为中断输入、下降沿触发,中断号也可以确定下来了,就是GPIO1的27号角(内核能将引脚转换为中断号);最后就是RESET脚,驱动初始化GT811时需要操作RESET引脚,且GT811为拉低复位,故可将GPIO1的26角设为输出电平状态。通过前面几篇文章的学习,我们知道DTS可以配置pinmux,然后分析内核自带的DTS文件可以,DTS也可以将连接信息传递给内核。经过分析及参考,我最TQ335x.dts文件做了如下修改:

Step1. 检查I2C引脚的pinmux配置

查找i2c1可以找到i2c1节点,该节点的pinctrl-0只想的phandler对i2c1的两个引脚进行了相关的配置,因此,不需任何修改。

Step2. 配置INT和RESET引脚

在am33xx_pinmux节点内添加引脚配置信息,具体内容如下:

  1. gt811_ts_pins:gt811_ts_pins{
  2. pinctrl-single,pins=
  3. 0x68(PIN_INPUT_PULLUP|MUX_MODE7)
  4. 0x6c(PIN_INPUT_PULLUP|MUX_MODE7)
  5. >;
  6. };

Step3. 在i2c1节点内添加GT811设备信息

GT811的设备节点内需要提供以下信息,i2c设备地址、pinmux配置、中断信息、屏幕大小等,具体如下(这里就不细说了,有什么不清楚的可以留言讨论)。

  1. gt811_ts@5d{
  2. compatible="gt811,gt811_ts";
  3. pinctrl-names="default";
  4. pinctrl-0=<>811_ts_pins>;
  5. reg=<0x5d>;
  6. interrupt-parent=<&gpio1>;
  7. interrupts=<272>;
  8. gpios=<&gpio1260>;
  9. touchscreen-size-x=<800>;
  10. touchscreen-size-y=<480>;
  11. touchscreen-swap=<1>;
  12. touchscreen-revert-x=<1>;
  13. touchscreen-revert-y=<1>;
  14. };

至此,DTS的配置工作就完成了,下面就是GT811的驱动编写。
(3)驱动编写

驱动编写根之前TQ210相比,没有多少变化,都是采用的新式I2C设备驱动架构,重要的区别在于支持了多点触摸,驱动的详细分析我就不多说了,具体可以参考韦东山老师的视频教程(绝对物有所值)。下面是GT811的多点触摸驱动源码。从GT811设备节点中获取坐标信息的部分我直接贴出来了,完整的代码还是请到资源里下载,还是有点贵哈,不过这个驱动可以直接拿去使用了,不需要任何修改。下面是不完整的代码,可以打印出触摸点坐标,该代码已经把本驱动的核心的部分都写出来了。其实很多朋友不需要下载源码就可以补充完善这个

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top