TP
从TP的驱动IC的外观可以了解到,驱动IC型号为GT911:
很幸运,这并不是一个罕见的型号,内核已经自带驱动:
从原理图得知,I2C使用了GPIO1、GPIO2、GPIO3和GPIO13:
有了以上信息,我们就可以开始调试这个TP了。
- DTS的配置
根据SSD201 HW Checklist V6.xlsx,GPIO2和GPIO3该组I2C为I2C1,且MODE为1,因此I2C部分DTS作如下修改:
# cd kernel/arch/arm/boot/dts
# vi infinity2m-ssc011a-s01a-display.dtsi
# vi infinity2m-ssc011a-s01a-padmux-display.dtsi
- kernel config 的配置
kernel需要配置加载GT911的驱动:
# cd kernel
# ARCH=arm make menuconfig
每次修改需要保存一下配置
# cp .config ./arch/arm/configs/infinity2m_spinand_ssc011a_s01a_minigui_defconfig -f
# cd ..
配置完后,重新编译并更新kernel:
# cd ..
# ./Release_to_customer.sh -f nand -p ssd201
系统起来后,可以看到/dev/input下有一个event0:
# ls /dev/input
并且可以肯定它就是GT911的设备节点:
# dmesg | grep Good
并且在cat它的时候,点击TP,会输出信息:
# cat /dev/input/event0
- 测试程序
# mkdir -p test/tp
# cd test/tp
# vi tp_test.c
交叉编译tp_test.c:
# arm-linux-gnueabihf-gcc tp_test.c -o tp_test
将tp_test拷贝到板子上并运行:
# ./tp_test
点击TP,可以看到上报了坐标的值:
- TSLIB的移植
刚才我们通过tp_test.c来测试TP,已经知道TP功能是正常的。接下来我们通过TSLIB更加直观地测试。
和许多工具一样,TSLIB也可以从buildroot获得:
# cd buildroot-2020.05/
# ARCH=arm make menuconfig
配置完后,保存配置文件:
# cp .config ./configs/ssd20x_defconfig -f
开始编译(编译时间较久,大约需要2小时,如果网络卡住了请退出重新编译):
# make BR2_JLEVEL=4
编译完成后,将看到output/target/usr/bin/下生产TSLIB相关的测试工具:
# ls output/target/usr/bin/ts*
以及配置文件output/target/etc/ts.conf:
# cat output/target/etc/ts.conf
接下来就是和以前做的一样,把output/image/rootfs.tar 替换 project/image/rootfs/rootfs.tar.gz:
# cd ../project/image/rootfs
# rm rootfs/* -rf
# cp ../../../buildroot-2020.05/output/images/rootfs.tar ./ -f
# tar -xvf rootfs.tar -C ./rootfs/
# tar -cvf rootfs.tar.gz ./rootfs
# cd ../../../
重新编译并更新rootfs:
# ./Release_to_customer.sh -f nand -p ssd201
系统起来后,执行ts_test_mt:
# ts_test_mt
发现屏幕没有正常显示,原因是屏幕还没有初始化,因此需要先编译初始化程序。回想下前面的点屏demo,它先进行屏幕初始化,再将图片显示出来,所以,现在我们要做的是修改点屏demo,只进行屏幕初始化,而不显示图片:
# cp sdk/verify/application/jpeg2disp/ sdk/verify/application/disp_init/ -rf
# cd sdk/verify/application/disp_init/
# cd src/
# mv logo.c disp_init.c
# vi disp_init.c
# vi makefile
把jpeg2disp改为disp_init:
# vi ../image.mk
# vi ../run.sh
当然,要使disp_init默认编译,需要修改app.mk:
# vi ../../app.mk
为了维持默认的规则,我添加了verify_disp_init控制变量,并在nvr_i2m_display_glibc_tailor.mk中将其赋值enable:
# vi ../../../../../project/release/customer_tailor/nvr_i2m_display_glibc_tailor.mk
这样,屏幕初始化程序就修改完成,重新编译并更新customer:
# cd ../../../../..
# ./Release_to_customer.sh -f nand -p ssd201
# cat images/scripts/\[\[customer.es
系统起来后,再执行ts_test_mt:
# ts_test_mt
可以看到,能够正常显示了。
并且划线测试也是通过的,我把修改好的disp_init/打包并保存在IDO-SSD20x/开发板/IDO-SBC2D07/开发文档/panel下,把tp_test.c保存在IDO-SSD20x/开发板/IDO-SBC2D07/开发文档/test/TP下。
至此,TP调试完成。