rk3399调试gslX680(tp模块)--技巧分析&&程序源码分享

      一般来说,平台适配某款新硬件我们只需编译程序源码、配置然后将该款硬件的驱动加入系统就完成了适配工作。
不过,这过程往往会遇到一些问题。
     软件上的:平台差异(内核版本、电源管理部分、pin脚管理、平台特有机制),平台特有机制:一些特有api、特有消息机制、特有同步机制。
      硬件上的:电路走线是否正确、供电参数、新硬件的特殊初始化。



      当然了,这只是前期工作,它能保证平台和新硬件是适配的。如果有一些“优化、指定操作”的话就需要修改对应的驱动代码。
通常来说,驱动代码结构主要分三层:
1.一层--为上层提供ioctl、read、write、poll、sysfs、提交数据通道等特定api。
2.二层--驱动内部配合一层和三层实现一些逻辑。像同异步、irq、电源管理、内核某些子系统交互(input/audio)。
3.三层--驱动主动管理硬件。常有的是power pin、irq pin、rst pin等等引脚。高级点的就是i2c控制器、spi控制器、显存控制器。
我们把握这三层思路去理解代码,可以写出匹配原驱动的“指定操作”的代码了。

调试tp需要注意的:
i2c地址及控制命令,上电和en、rst引脚。

我们顺利加载tp驱动后,在板端:

#ls -l /dev/input/by-path/
lrwxrwxrwx    1 root     root             9 Jan 18 10:02 platform-adc-keys-event -> ../event1
lrwxrwxrwx    1 root     root             9 Jan 18 10:02 platform-ff110000.i2c-event -> ../event0
lrwxrwxrwx    1 root     root             9 Jan 18 10:02 platform-gpio-keys-event -> ../event2

      由于tp通过i2c通道进行数据传输,所以我们知道event0所对应的ff110000.i2c节点是我们要的(ff110000是i2cx的基地址)

打开设备树文件:arm64/boot/dts/rockchip/.rk3399-sapphire-excavator-linux.dtb.dts.tmp,因为我们选定设备树名为:rk3399-sapphire-excavator-linux.dts

查找ff110000:

 i2c1: i2c@ff110000 {
     compatible = "rockchip,rk3399-i2c";
     reg = <0x0 0xff110000 0x0 0x1000>;
     clocks = <&cru 65>, <&cru 341>;
     clock-names = "i2c", "pclk";
     interrupts = <0 59 4 0>;
     pinctrl-names = "default";
     pinctrl-0 = <&i2c1_xfer>;
     #address-cells = <1>;
     #size-cells = <0>;
     status = "disabled";
 };

gslX680设备树节点

&i2c1 {
	status = "okay";

	gslX680:gslX680@40 {
		compatible = "GSLX680";
		reg = <0x40>;
		screen_max_x = <1024>;
		screen_max_y = <600>;
		touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;
		reset-gpio = <&gpio0 13 GPIO_ACTIVE_HIGH>;
	};
}

我们对比下原理图:

知道了,原理图的tp i2c1和设备树的i2c1匹配,那么event0就为我们的input dev。

这时,我们可以:

#hexdump -C /dev/input/event0
00000000  d6 1f f9 50 00 00 00 00  f3 29 03 00 00 00 00 00  |...P.....)......|
00000010  03 00 00 00 d1 01 00 00  d6 1f f9 50 00 00 00 00  |...........P....|
00000020  f3 29 03 00 00 00 00 00  03 00 01 00 97 00 00 00  |.)..............|
00000030  d6 1f f9 50 00 00 00 00  f3 29 03 00 00 00 00 00  |...P.....)......|
00000040  01 00 4a 01 01 00 00 00  d6 1f f9 50 00 00 00 00  |..J........P....|
00000050  f3 29 03 00 00 00 00 00  00 00 00 00 00 00 00 00  |.)..............|
00000060  d6 1f f9 50 00 00 00 00  51 8f 04 00 00 00 00 00  |...P....Q.......|
00000070  01 00 4a 01 00 00 00 00  d6 1f f9 50 00 00 00 00  |..J........P....|
00000080  51 8f 04 00 00 00 00 00  00 00 00 00 00 00 00 00  |Q...............|

驱动走控制台打印:

[   32.243649] -----touches: 10 -----
[   32.243997] tp-gsl  finger_num = 10
[   32.244320] tp-gsl  before: x[0] = 175, y[0] = 440, id[0] = 0 
[   32.244895] tp-gsl  before: x[1] = 269, y[1] = 516, id[1] = 0 
[   32.245424] tp-gsl  before: x[2] = 411, y[2] = 438, id[2] = 0 
[   32.245987] tp-gsl  before: x[3] = 37, y[3] = 258, id[3] = 0 
[   32.246505] tp-gsl  before: x[4] = 560, y[4] = 338, id[4] = 0 
[   32.247058] tp-gsl  before: x[5] = 635, y[5] = 83, id[5] = 0 
[   32.247576] tp-gsl  before: x[6] = 667, y[6] = 539, id[6] = 0 
[   32.248128] tp-gsl  before: x[7] = 777, y[7] = 21, id[7] = 0 
[   32.248645] tp-gsl  before: x[8] = 865, y[8] = 520, id[8] = 0 
[   32.249196] tp-gsl  before: x[9] = 558, y[9] = 470, id[9] = 0 

      有这类信息的话,tp就起来了,剩下就是调偏移、精度了。
如果没有的话,tp没能起来。那么,我们耐心地一步一步查找问题。
读者可以参考我的博文《rk3399调试alc5651之操作方法》拉到最后,我提供了一些建议。

获取tp驱动源码

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值