写这个博客的前景:
正点原子的RGB电容触摸屏触摸芯片系列:
4.3 寸屏 480x272分辨率 使用的触摸芯片是gt9xx系列
4.3寸屏 800x480分辨率 使用的触摸芯片是gt9xx系列
7寸屏 800x480分辨率 使用的是edt-ft5x06系列
7寸屏1024x600分辨率 使用的是edt-ft5x06系列
10.1寸屏 1280x800分辨率使用的是gt9xx系列
正点原子ALPHA开发板,因为驱动开发指南里使用的触摸屏是edt-ft5x06的触摸IC。教程只介绍了移植edt-ft5x06的移植。并未介绍gt9xx系列的移植。希望作者补上。下面就介绍怎么将驱动gt9xx驱动移植到正点原子教程源码中。
1.首先我们要获取驱动文件,可以在正点原子出厂源码(正点原子提供了2套源码,一个是出厂源码,另一个是教程源码),也就是正点原子已经移植好的出厂源码中找驱动文件,路径为drivers/input/touchscreen/gt9xx.c和drivers/input/touchscreen/gt9xx.h。这两个文件。驱动已经上传到github。链接为https://github.com/dzm2018/gt9xx_driver。可以从github去下载gt9xx.c和gt9xx.h这两个文件。
2.将t9xx.c和gt9xx.h放至正点原子教程源码drivers/input/touchscreen/路径下。然后我们去编辑Kconfig文件。把驱动加到内核菜单中。
vi drivers/input/touchscreen/Kconfig
在第350行添加以下内容
config TOUCHSCREEN_GT9XX
tristate "GT9XX I2C touchscreen"
depends on I2C
help
Say Y here if you have the GT9XX touchscreen connected to your
system.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called gt9xx.
如下图,添加完成后保存退出。
在Makefile里添加编译gt9xx驱动
vi drivers/input/touchscreen/Makefile
obj-$(CONFIG_TOUCHSCREEN_GT9XX) += gt9xx.o
3.在内核菜单中去配置gt9xx的驱动,把它编译进内核。要显示menuconfig菜单,首先得安装一些库
sudo apt-get install libncurses5-dev
然后执行mx6ull_alientek_emmc.sh脚本,此时就会显示一个菜单配置界面如下图,找到如下路径,将gt9xx选上。“*”代表编译进内核,m代表编译成模块。选上后保存退出。然后mx6ull_alientek_emmc.sh脚本会继续编译内核。直到编译成功。得出的zImage,替换到开发板系统的zImage。(记住这里先替换内核!因为每次执行mx6ull_alientek_emmc.sh需要重新打开菜单勾选GT9xx I2C touchscreen。)
3.修改设备树。在arch/arm/boot/dts/imx6ull-alientek-emmc.dts设备树i2c2节点下添加gt9xx的节点。
goodix_ts@5d {
compatible = "goodix,gt9xx";
reg = <0x5d>;
status = "okay";
interrupt-parent = <&gpio1>;
interrupts = <9 0>;
pinctrl-0 = <&ts_int_pin
&ts_reset_pin>;
goodix,rst-gpio = <&gpio5 9 GPIO_ACTIVE_LOW>;
goodix,irq-gpio = <&gpio1 9 GPIO_ACTIVE_LOW>;
};
如下图位置添加gt9xx的节点
此时注意,需要看看gpio1 9这个管脚有没有在其他地方利用了!果不其然,在下面这个地方复用了。我们将它注释,如下图
再添加复位管脚的pimux设置在如下位置添加以下内容
ts_int_pin: ts_int_pin_mux {
fsl,pins = <
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x79
>;
};
如下图位置
再添加中断管脚的pinmux设置在如下位置添加以下内容
ts_reset_pin: ts_reset_pin_mux {
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x79
>;
};
配置完成pimux后,再检查一次,是否有管脚复用!果不其然在设备树下搜索到MX6UL_PAD_GPIO1_IO09__GPIO1_IO09这个管脚被复用了。所以我们要注释如下图位置的内容
至此,设备树修改完成!重新编译设备树即可。替换到开发板的设备树。
4.测试触摸是否可用,使用如下指令查看触摸中断次数,及查看驱动是否正常加载
cat /proc/interrupts
如下,109是触摸屏的中断次数,用手触摸屏,中断次数在不断变化,说明驱动生效。
可以使用hexdump来查看是否有上报坐标信息。坐标是16进制,我们读不懂,可以借助tslib工具测试触摸屏是否打印对的坐标!
请参考正点原子【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.x.pdf第64.5 章节tslib工具的使用进行测试。
hexdump /dev/input/event1