【f1c200s/f1c100s】FT5426触摸屏驱动适配
前言
- 嵌入式linux下的触摸屏驱动是基于input子系统的,当触摸发生时,内核上报触摸事件至用户层。
- 我使用的显示屏是正点原子的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;
//以下是添加的
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";
};
FT5426设备树配置
然后需要将FT5426的硬件信息添加至设备树。原理图中给出了FT5426的硬件连接
功能 | 引脚 |
---|
SDA | PE12 | SCL | PE11 | 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; //可选项,屏幕和触摸屏坐标反了则使能此项
};
};
至此,设备树编写完毕。
内核配置
-
首先是使能IIC控制器和设备树对i2c设备的支持; menuconfig中路径如下。至于为什么全志芯片使用的是marvell的i2c控制器,可以参考内核绑定文档:Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt 。 -
然后是使能FT5426的驱动。 -
结果
编译后拷贝内核和设备树至板子,不出意外在启动时会出现驱动加载成功的信息,如下图所示。 内核启动时,先后加载了i2c驱动和ft5x06的驱动。
进入系统后利用evtest工具进行测试,当手指接触触摸屏时,终端输出指针位置等信息。
|