平台 :

硬件CPU:imx8mini

操作系统 linux   imx-yocto-L4.14.98_2.0.0_ga


由于选用了rm67191的屏,屏上带的触摸芯片是gt1151,所以只能自己移植驱动上去,没得选。
1.拿资料
从屏厂商那儿要来屏资料,触摸驱动只有android的,去gt官网,gt1151基本没有信息了,估计厂家都不做支持了。只有网上找,找到一份1.4的版本,经仔细研究看样子还是很正规的,那就使用这个源码吧。再仔细深入研究文档,基本路数搞明白了。参考https://blog.csdn.net/cug_qiuwei/article/details/47862011


2.移植源码
根据拿到的文档,把源码搬到内核工程里面去,增加编译选择,这里面有许多项选择,由于我的qt还没有移植,暂不清楚哪些选项必须加,就只选择了基本选项。
设备表修改比较麻烦,原理图部分参考原来的引脚,换成现在的列表,中断号也要换成当前的。基本源码修改就差不多了。

3.调试程序
开机就报找不到vdd,reset引脚找不到,设备树里面没有配置,因为硬件引脚上根本没有这两引脚。
再阅读一下源码,发现vdd/reset就一个上电,和reset操作,别的地方根本不用。那就暂时不支持。就把源码改了。后面有问题再来增加。
改完再测试,报了一堆的错,default-config3 not found ,在设备树里,根本就没有这个配置项,那没法搞呀。网上去找也没有。
此处花了不少的精力。中间还有好多小错,能在程序改的就程序里改,设备树里也做了些修改。

最后到这种打印结果 :

[    1.684796] <<GTP-INF>>[gt1x_ts_init:821] GTP driver installing...
[    1.691127] gt1x_ts_probe.............bg
[    1.695077] <<GTP-INF>>[gt1x_ts_probe:551] GTP Driver Version: V1.6<2016/11/02>,slave addr:14h
[    1.703713] 1gt1x_int_gpio is :49 
[    1.707121] <<GTP-INF>>[gt1x_reset_guitar:890] GTP RESET!
[    1.831809] <<GTP-INF>>[gt1x_get_chip_type:1027] Chip Type: GT1X
[    1.837827] <<GTP-FUNC>> Func:gt1x_read_version@Line:942
[    1.860070] <<GTP-INF>>[gt1x_read_version:981] IC VERSION:GT1151_000801(Patch)_0101(Mask)_03(SensorID)
[    1.869390] <<GTP-ERR>>[gt1x_find_tp_config:649] Property goodix,default-config3 not found
[    1.877668] <<GTP-INF>>[gt1x_init_panel:756] X_MAX=0,Y_MAX=0,TRIGGER=0x00,WAKEUP_LEVEL=1
[    1.885768] <<GTP-DBG>>[gt1x_send_cfg:544]Driver send config, length:65534
[    1.892658] <<GTP-ERR>>[gt1x_send_cfg:548] Invalid config length
[    1.892662] <<GTP-ERR>>[gt1x_init:2470] Init panel failed.
[    1.892764] <<GTP-INF>>[gt1x_init_debug_node:73] Created proc entry /proc/gt1x_debug.
[    1.912036] <<GTP-INF>>[gt1x_init_tool_node:98] Created proc entry /proc/gmnode041498.
[    1.920072] input: goodix-ts as /devices/virtual/input/input1
[    1.925949] <<GTP-DBG>>[gt1x_request_irq:455]INT trigger type:0
[    1.931987] gt1x_ts_probe.............end

看到返回结果处是正常结束的,估计错误也不一定全改,准备测试一下数据有没有出来:
root@imx8mmevk:/# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="30370000.snvs:snvs-powerkey"
P: Phys=snvs-pwrkey/input0
S: Sysfs=/devices/platform/30370000.snvs/30370000.snvs:snvs-powerkey/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0018 Vendor=dead Product=beef Version=28bb
N: Name="goodix-ts"
P: Phys=input/ts
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=event1 
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=661800000000000

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio_ir_recv"
P: Phys=gpio_ir_recv/input0
S: Sysfs=/devices/platform/ir-receiver/rc/rc0/input2
U: Uniq=
H: Handlers=kbd event2 
B: PROP=0
B: EV=100013
B: KEY=1000000 0 0
B: MSC=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="MCE IR Keyboard/Mouse (gpio-rc-recv)"
P: Phys=/input0
S: Sysfs=/devices/virtual/input/input3
U: Uniq=
H: Handlers=sysrq kbd event3 
B: PROP=0
B: EV=100017
B: KEY=30000 7 ff87207ac14057ff febeffdfffefffff fffffffffffffffe
B: REL=3
B: MSC=10

看到input设备生成了,编号为event1,那就再看看数据能取得不:
root@imx8mmevk:/# hexdump /dev/input/event1
0000000 c1a8 5c6d 0000 0000 ad90 0002 0000 0000
0000010 0001 014a 0001 0000 c1a8 5c6d 0000 0000
0000020 ad90 0002 0000 0000 0003 0039 00fc 0000
0000030 c1a8 5c6d 0000 0000 ad90 0002 0000 0000
0000040 0003 0035 022c 0000 c1a8 5c6d 0000 0000
0000050 ad90 0002 0000 0000 0003 0036 03c0 0000
0000060 c1a8 5c6d 0000 0000 ad90 0002 0000 0000
0000070 0003 003a 0003 0000 c1a8 5c6d 0000 0000
0000080 ad90 0002 0000 0000 0003 0030 0003 0000
0000090 c1a8 5c6d 0000 0000 ad90 0002 0000 0000
00000a0 0000 0000 0000 0000 c1a8 5c6d 0000 0000
00000b0 7263 0003 0000 0000 0003 0035 0234 0000
00000c0 c1a8 5c6d 0000 0000 7263 0003 0000 0000
00000d0 0003 0036 03bf 0000 c1a8 5c6d 0000 0000
00000e0 7263 0003 0000 0000 0000 0000 0000 0000
00000f0 c1a8 5c6d 0000 0000 99b7 0003 0000 0000
0000100 0003 0035 0266 0000 c1a8 5c6d 0000 0000
0000110 99b7 0003 0000 0000 0003 0036 03b3 0000
0000120 c1a8 5c6d 0000 0000 99b7 0003 0000 0000
0000130 0000 0000 0000 0000 c1a8 5c6d 0000 0000
0000140 c135 0003 0000 0000 0001 014a 0000 0000
0000150 c1a8 5c6d 0000 0000 c135 0003 0000 0000
0000160 0003 0039 ffff ffff c1a8 5c6d 0000 0000
0000170 c135 0003 0000 0000 0000 0000 0000 0000
0000180 c1a9 5c6d 0000 0000 9c93 0003 0000 0000
0000190 0001 014a 0001 0000 c1a9 5c6d 0000 0000
00001a0 9c93 0003 0000 0000 0003 0039 00fd 0000
00001b0 c1a9 5c6d 0000 0000 9c93 0003 0000 0000
00001c0 0003 0035 020c 0000 c1a9 5c6d 0000 0000
00001d0 9c93 0003 0000 0000 0003 0036 0379 0000

划屏操作时,有数据输出了,这个驱动基本调试到这儿了,后面移植完qt后,才能完全确定数据是否正确和是否需要校正。
4.总结
触摸驱动原理比较简单,开始调试就报一堆错误,设备树参数也不知道对不对,这也是驱动开发比较难的地方,在小团队里,根本拿不到象样的技术支持,中间还有误导问题,差点去做固件更新去了。方向性的错误也很正常,但花的精力比较多。
 

Logo

更多推荐