在本章中,我们将介绍如何对Nano添加GT911触摸屏适配,以及LVGL的移植。
一、修改设备树
GT911需要6个接口,即:VDD、GND;SDA、SCK;IRQ、RST。这里使用PE11、PE12作为i2c接口;使用PE10作为中断,PE9作为Reset。首先我们需要在dtsi
文件中添加我们使用的i2c接口的定义。首先在soc->pio
节点下添加如下内容:
i2c0_pins: i2c0 {
pins = "PE11", "PE12";
function = "i2c0";
};
然后在soc
节点下添加:
i2c0: i2c@1C27000 {
compatible = "allwinner,sun6i-a31-i2c";
reg = <0x01C27000 0x400>;
interrupts = <7>;
clocks = <&ccu CLK_BUS_I2C0>;
resets = <&ccu RST_BUS_I2C0>;
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
接下来在dts
文件中添加GT911的描述内容。直接在后面追加如下内容:
/* GT911 */
&i2c0 {
pinctrl-0 = <&i2c0_pins>;
pinctrl-names = "default";
status = "okay";
gt911: touchscreen@5d {
compatible = "goodix,gt911";
reg = <0x5d>;
interrupt-parent = <&pio>;
interrupts = <4 10 IRQ_TYPE_EDGE_FALLING>; /* (PE10) */
pinctrl-names = "default";
// pinctrl-0 = <&ts_reset_pin>;
irq-gpios = <&pio 4 10 GPIO_ACTIVE_HIGH>; /* (PE10) */
reset-gpios = <&pio 4 9 GPIO_ACTIVE_HIGH>; /* RST (PE9) */
max-x = <800>;
max-y = <480>;
/* touchscreen-swapped-x-y */
};
};
// gt911 pio
&pio {
gt911_int_pin: gt911_int_pin@0{
pins = "PE10";
function = "gpio_in";
};
ts_reset_pin: ts_reset_pin@0 {
pins = "PE9";
function = "gpio_out";
};
值得注意的是,这里的GT911的地址需要对应手册查看为0x14
还是0x5d
;同时,pinctrl需要注释,否则会报错pin already request
。这里是完整的dsti文件和dts文件。
二、编译内核
在确保/drivers/input/touchscreen/
下有goodix.c存在,之后编译内核,这里选择将gooidx编译到内核当中(采用模块的方式可能会遇到缺少bin文件的情况)。完成后进入启动荔枝派,进入/dev/
目录,确认input文件夹的存在。我们可以通过ts_calibrate
或者直接dumpinput/event0
文件来确认触摸屏已经生效。
值得注意的是,荔枝派的板子上没有上拉电阻,所以需要单独外接上拉电阻。对于I2C来说,接的电阻1k-2k左右;中断需要外接10k电阻。
三、LVGL的移植
LVGL使用lv_port_linux_frame_buffer版本,这里我稍作修改,使用Cmake来管理项目,具体内容如下。
.
├── CMakeLists.txt
├── lv_conf.h
├── lv_drivers
│ ├── CMakeLists.txt
│ ├── display
│ ├── docs
│ ├── gtkdrv
│ ├── indev
│ ├── library.json
│ ├── LICENSE
│ ├── lv_drivers.mk
│ ├── lv_drv_conf_template.h
│ ├── README.md
│ ├── sdl
│ ├── wayland
│ ├── win32drv
│ ├── win_drv.c
│ └── win_drv.h
├── lv_drv_conf.h
├── lvgl
│ ├── CMakeLists.txt
│ ├── component.mk
│ ├── env_support
│ ├── idf_component.yml
│ ├── Kconfig
│ ├── library.json
│ ├── library.properties
│ ├── LICENCE.txt
│ ├── lv_conf_template.h
│ ├── lvgl.h
│ ├── lvgl.mk
│ ├── README.md
│ ├── README_pt_BR.md
│ ├── README_zh.md
│ ├── SConscript
│ ├── scripts
│ └── src
├── main.c
└── mouse_cursor_icon.c
这里需要自行更改一些配置参数,evdev在lv_drv_conf.h
中配置,屏幕分辨率、缓存大小等在main.c当中设置。