最近在调试正点原子Mini Linux开发板的4.3寸800x480触摸屏时,遇到了GT115x驱动适配的问题。这块屏幕在市面上很常见,但官方内核中并没有直接支持GT115x的驱动配置。经过一番折腾,终于成功让触摸屏正常工作,现在把完整的配置过程记录下来,希望能帮到遇到同样问题的朋友。
这个方案基于NXP官方的imx6ull内核(Linux 4.1.15),主要解决了三个关键问题:
GT115x是一款常见的电容式触摸控制器,通过I2C接口与主控通信。在我们的开发板上,它连接到了i.MX6ULL的I2C2总线,具体引脚连接如下:
提示:不同开发板的引脚定义可能不同,务必参考原理图确认连接关系
Linux输入子系统对触摸屏设备的支持分为几个层次:
GT115x驱动采用中断工作模式,当触摸事件发生时,芯片会通过INT引脚触发中断,然后主控通过I2C读取触摸数据。
首先需要确保I2C2控制器已启用,并配置正确的时钟频率和引脚复用:
c复制&i2c2 {
clock_frequency = <100000>; // I2C标准模式(100kHz)
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
在I2C2节点下添加GT115x的设备节点:
c复制goodix_ts@14 {
compatible = "goodix,gt115x";
reg = <0x14>; // I2C设备地址
status = "okay";
// 中断配置
interrupt-parent = <&gpio1>;
interrupts = <9 IRQ_TYPE_EDGE_RISING>;
// GPIO配置
reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
irq-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
// 屏幕分辨率
touchscreen-size-x = <800>;
touchscreen-size-y = <480>;
};
关键参数说明:
interrupts = <9 IRQ_TYPE_EDGE_RISING>: 使用GPIO1_9作为中断引脚,上升沿触发reset-gpios: 复位引脚低电平有效touchscreen-size-x/y: 必须与实际屏幕分辨率一致Linux内核自带的goodix驱动默认不支持GT115x,需要修改drivers/input/touchscreen/goodix.c,在goodix_of_match数组中添加我们的设备:
c复制static const struct of_device_id goodix_of_match[] = {
{ .compatible = "goodix,gt911" },
// ...其他已有设备...
{ .compatible = "goodix,gt115x" }, // 添加这一行
{ }
};
确保内核配置中启用了Goodix触摸驱动:
bash复制Device Drivers --->
Input device support --->
[*] Touchscreens --->
<*> Goodix I2C touchscreen
建议编译为内置驱动(<*>)而非模块,避免启动时加载问题。
bash复制make zImage dtbs -j4
zImage和.dtb文件部署到开发板系统启动后,可以通过以下命令检查触摸设备:
bash复制# 查看输入设备
ls /dev/input/
cat /proc/bus/input/devices
# 实时查看触摸事件
hexdump /dev/input/event1
正常触摸屏幕时,应该能看到类似以下的输出:
code复制0000000 6b4f 685f 3511 0008 0003 0039 0000 0000
0000010 6b4f 685f 3511 0008 0003 0035 01fb 0000
0000020 6b4f 685f 3511 0008 0003 0036 0086 0000
0000030 6b4f 685f 3511 0008 0003 0030 0040 0000
可能原因及排查步骤:
i2cdetect -y 2 应能看到0x14设备cat /proc/interrupts 查看中断计数是否增加解决方法:
touchscreen-size-x/y设置正确排查步骤:
dmesg | grep goodix调整I2C时钟频率:对于高刷新率需求,可尝试提高至400kHz
c复制clock_frequency = <400000>; // I2C快速模式
中断优化:根据实际需求选择中断触发方式
IRQ_TYPE_EDGE_RISING:上升沿IRQ_TYPE_LEVEL_HIGH:高电平电源管理:添加合理的电源配置可降低功耗
c复制vdd-supply = <®_3v3>;
在实际项目中,我发现GT115x的驱动稳定性很大程度上取决于中断处理的可靠性。建议在量产前进行长时间的压力测试,模拟连续触摸操作,确保不会出现中断丢失或坐标漂移的情况。