![Goodix tp 不支持 I2C](https://linux22.com/image/142991/Goodix%20tp%20%E4%B8%8D%E6%94%AF%E6%8C%81%20I2C.png)
我使用了Friendlyarm的Nanopi 2 Fire。我想使用GT911 Goodix触摸屏。它有 6 个引脚:1 个用于复位(我刚刚连接到 GPIO 之一),2 个用于 vdd3.3 伏,3 个用于 GND,4 个用于 irq(我将其连接到 gpioc11)以及 SDA 和 SCL(连接到引脚 3 和 5)如 I2C-0)。我用这个源代码下载Linux内核4.4.y来激活goodix触摸屏:
git clone https://github.com/friendlyarm/linux.git -b nanopi2-v4.4.y --depth 1
我在内核中激活goodix作为模块,并按照页编译内核,最后将文件复制到SD。(运行make命令,将zimage和dtb文件复制到启动SD)。当我运行这段代码时:
root@NanoPi2-Fire:/# find -iname goodix*
./sys/bus/i2c/drivers/Goodix-TS
./sys/firmware/devicetree/base/soc/i2c@c00a6000/goodix_ts@5d
./sys/firmware/devicetree/base/soc/i2c@c00a6000/goodix_ts@5d/goodix,irq-gpio
为了检测 i2c 我有:
root@NanoPi2-Fire:~# ls -l /sys/bus/i2c/devices/i2c*
lrwxrwxrwx 1 root root 0 Jan 1 1970 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/c0000000.soc/c00a4000.i2c/i2c-0
lrwxrwxrwx 1 root root 0 Jan 1 1970 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/c0000000.soc/c00a5000.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan 1 1970 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/c0000000.soc/c00a6000.i2c/i2c-2
lrwxrwxrwx 1 root root 0 Jan 1 1970 /sys/bus/i2c/devices/i2c-3 -> ../../../devices/platform/c0000000.soc/c0000000.soc:i2c@3/i2c-3
和 :
root@NanoPi2-Fire:/# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@NanoPi2-Fire:/# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@NanoPi2-Fire:/# i2cdetect -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@NanoPi2-Fire:/# i2cdetect -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
modprobe goodix_ts
modprobe: FATAL: Module goodix_ts not found in directory /lib/modules/4.4.49-s5p4418
如何在linux下使用gt911?
答案1
您需要将类似的内容添加到用于内核的设备树(dts)中:
&i2c1 { /* Use the correct name of the bus you're device is on */
- other dts code here -
gt911: touchscreen@14 {
compatible = "goodix,gt911";
reg = <0x14>;
interrupt-parent = <&gpioc>; /* Use the correct gpio controller here */
interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
irq-gpios = <&gpioc 11 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpioc ? GPIO_ACTIVE_LOW>; /* Use the correct gpio controller and pin */
};
- other dts code here -
};
请参阅此处的设备树绑定: https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/input/touchscreen/goodix.txt
当 IRQ 和 RESET 引脚都可以由驱动程序控制时,它将自动为您在设备树中提供的地址配置芯片。 (它通过使用正确的 INT 级别集重置 gt911 并将线路切换回输入来实现此目的)在上述情况下,其为 0x14,另一个可用地址为 0x5d。
注意:当您有单向 INT 线时:如果您只有单向信号(例如在信号之间使用缓冲区),则通过驱动程序使用复位线并不是硬性要求。只需确保 GT911 正确重置并提供您在重置期间配置的地址即可。