IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【f1c200s/f1c100s】FT5426触摸屏驱动适配 -> 正文阅读

[系统运维]【f1c200s/f1c100s】FT5426触摸屏驱动适配

【f1c200s/f1c100s】FT5426触摸屏驱动适配

前言

  1. 嵌入式linux下的触摸屏驱动是基于input子系统的,当触摸发生时,内核上报触摸事件至用户层。
  2. 我使用的显示屏是正点原子的7寸RGB接口显示屏,触摸芯片为FT5426。和其他很多外设一样,FT5426的驱动linux内核(5.2)也是自带的,FT5426的数据接口是IIC,因此我们只需要在设备树中配置IIC并且打开内核相关功能即可。

设备树配置

IIC控制器

我的板子的触摸屏IIC数据线接到了PE11、PE12引脚,因此需要首先配置引脚为IIC功能。
在这里插入图片描述

因为PE11、PE12可复用为i2c0,因此在pio: pinctrl@1c20800节点内添加i2c0子节点,将这俩复用为i2c0。

pio: pinctrl@1c20800 {
	compatible = "allwinner,suniv-f1c100s-pinctrl";
	reg = <0x01c20800 0x400>;
	interrupts = <38>, <39>, <40>;
	clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
	clock-names = "apb", "hosc", "losc";
	gpio-controller;
	interrupt-controller;
	#interrupt-cells = <3>;
	#gpio-cells = <3>;
	
	//以下是添加的
	i2c0_pins: i2c0_pins {
		pins = "PE11", "PE12";
		function = "i2c0";
	};
};

这里的IIC控制器是源码中自带的,为了方便整理何记录,将其复制过来。
其中的寄存器首地址、范围、中断号都是能够在f1c200s的参考手册中查询到的。

i2c0: i2c@1C27000 { //0x1C27000为I2C0的寄存器首地址
	compatible = "allwinner,sun6i-a31-i2c"; 
	reg = <0x01C27000 0x400>;//寄存器范围
	interrupts = <7>; //i2c0中断号
	clocks = <&ccu CLK_BUS_I2C0>;
	resets = <&ccu RST_BUS_I2C0>;
	pinctrl-names = "default";
	pinctrl-0 = <&i2c0_pins>; //i2c0引脚需要为pio中复用的引脚
	status = "disabled";
	#address-cells = <1>;
	#size-cells = <0>;
};

FT5426设备树配置

然后需要将FT5426的硬件信息添加至设备树。原理图中给出了FT5426的硬件连接
在这里插入图片描述在这里插入图片描述

功能引脚
SDAPE12
SCLPE11
RESET复位PE10
INT中断PE5

我们需要在设备树中添加以上信息,SDA、SCL在IIC控制器设备树配置中已经编写了,还需要配置剩余的两个引脚功能,其中RESET配置为输出,INT配置为输入,在pio节点中追加以下内容:

&pio {
    ts_reset_pin: ts_reset_pin {
        pins = "PE10";
        function = "gpio_out";
    };
    ts_int_pin: ts_int_pin {
        pins = "PE5";
        function = "gpio_in";
    };
 };

然后在i2c0节点中中追加如下内容:
关于ft5426的子节点如何编写,内核自带的绑定文档给出了详细的编写方法,可见Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt

&i2c0 {
    status = "okay";//使能i2c0驱动
    ft5426: touchscreen@38 { //38为设备地址(16进制)
        compatible = "edt,edt-ft5406"; //兼容性配置
        reg = <0x38>;//设备地址
        interrupt-parent = <&pio>;//gpio中断
        interrupts = <4 5 IRQ_TYPE_EDGE_FALLING>; //PE5为中断引脚,下降沿触发
        pinctrl-names = "default";
		pinctrl-0 = <&ts_int_pin>; //中断pinctrl
        reset-gpios = <&pio 4 10 GPIO_ACTIVE_LOW>; //PE510为复位引脚,低电平有效
		touchscreen-size-x = <800>; //屏幕分辨率
		touchscreen-size-y = <480>;
		touchscreen-swapped-x-y; //可选项,屏幕和触摸屏坐标反了则使能此项
    };
};

至此,设备树编写完毕。

内核配置

  1. 首先是使能IIC控制器和设备树对i2c设备的支持;
    menuconfig中路径如下。至于为什么全志芯片使用的是marvell的i2c控制器,可以参考内核绑定文档:Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
    在这里插入图片描述
    在这里插入图片描述

  2. 然后是使能FT5426的驱动。

  3. 在这里插入图片描述

结果

编译后拷贝内核和设备树至板子,不出意外在启动时会出现驱动加载成功的信息,如下图所示。
内核启动时,先后加载了i2c驱动和ft5x06的驱动。

在这里插入图片描述
进入系统后利用evtest工具进行测试,当手指接触触摸屏时,终端输出指针位置等信息。
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:29:48  更:2022-06-01 15:33:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:36:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码