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调试完成。

文档更新时间: 2021-10-08 16:54   作者:Aeeditor