【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的硬件连接
在这里插入图片描述在这里插入图片描述

功能 引脚
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; //可选项,屏幕和触摸屏坐标反了则使能此项
    };
};

至此,设备树编写完毕。

内核配置

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

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

  3. 在这里插入图片描述

结果

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

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

猜你喜欢

转载自blog.csdn.net/qq_27350133/article/details/124974526