正点原子gt9xx系列linux驱动移植

写这个博客的前景:

正点原子的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.

如下图,添加完成后保存退出。

正点原子gt9xx系列linux驱动移植_第1张图片

在Makefile里添加编译gt9xx驱动

vi drivers/input/touchscreen/Makefile

obj-$(CONFIG_TOUCHSCREEN_GT9XX)         += gt9xx.o

正点原子gt9xx系列linux驱动移植_第2张图片

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。)

正点原子gt9xx系列linux驱动移植_第3张图片

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的节点

正点原子gt9xx系列linux驱动移植_第4张图片

此时注意,需要看看gpio1 9这个管脚有没有在其他地方利用了!果不其然,在下面这个地方复用了。我们将它注释,如下图

正点原子gt9xx系列linux驱动移植_第5张图片

再添加复位管脚的pimux设置在如下位置添加以下内容

                ts_int_pin: ts_int_pin_mux {
                        fsl,pins = <
                                MX6UL_PAD_GPIO1_IO09__GPIO1_IO09        0x79
                        >;
                };

如下图位置

正点原子gt9xx系列linux驱动移植_第6张图片

再添加中断管脚的pinmux设置在如下位置添加以下内容

                ts_reset_pin: ts_reset_pin_mux {
                        fsl,pins = <
                                MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09     0x79
                        >;
                };

正点原子gt9xx系列linux驱动移植_第7张图片

配置完成pimux后,再检查一次,是否有管脚复用!果不其然在设备树下搜索到MX6UL_PAD_GPIO1_IO09__GPIO1_IO09这个管脚被复用了。所以我们要注释如下图位置的内容

正点原子gt9xx系列linux驱动移植_第8张图片

至此,设备树修改完成!重新编译设备树即可。替换到开发板的设备树。

4.测试触摸是否可用,使用如下指令查看触摸中断次数,及查看驱动是否正常加载

cat /proc/interrupts

如下,109是触摸屏的中断次数,用手触摸屏,中断次数在不断变化,说明驱动生效。

正点原子gt9xx系列linux驱动移植_第9张图片

可以使用hexdump来查看是否有上报坐标信息。坐标是16进制,我们读不懂,可以借助tslib工具测试触摸屏是否打印对的坐标!

请参考正点原子【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.x.pdf第64.5 章节tslib工具的使用进行测试。

 hexdump /dev/input/event1

正点原子gt9xx系列linux驱动移植_第10张图片

你可能感兴趣的:(驱动移植)