|
楼主 |
发表于 2017-4-17 09:42:07
|
显示全部楼层
本帖最后由 @allen 于 2017-5-8 17:36 编辑
TP触摸调试
完整的工作流程如下:主控上电后,按照 TP 规格定义的上电时序给 TP 的power 和 reset 脚上电,当触摸 TP 后,TP 通过中断线产生中断,在中断处理(后半部)中,主控通过 i2c 接口与 TP 的 ic 通讯,读取点的坐标值并分析出键值,然后上报 input 子系统。
1. 上电测试
一般调试的话,可以先不加载驱动,手动上电,使用i2c-tools 的工具去扫i2c设备和读数据出来
通过查看原理图可知,LCD与TP供电源一样的,所以给LCD上电,就同时给TP上电了。
所以在LCD能显示的情况下,不用再给TP上电,直接使用工具测试
CubieScreen 是接到i2c1 且地址为 0x5c- root@cubieboard6:~# i2cdetect -y 1
复制代码- root@cubieboard6:~# i2cdump -y 1 0x5c
- No size specified (using byte-data access)
- 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
- 00: 00 0f 00 07 00 03 00 0c 00 00 00 06 00 00 00 04 .?.?.?.?...?...?
- 10: 00 07 00 02 00 0c 00 02 00 11 00 10 00 06 00 10 .?.?.?.?.?.?.?.?
- 20: 00 10 00 12 00 08 00 04 00 08 00 0c 00 00 00 e0 .?.?.?.?.?.?...?
- 30: e0 00 01 04 04 3c 53 78 78 00 01 00 00 0c 14 00 ?.???<Sxx.?..??.
- 40: 00 00 00 00 00 00 00 00 00 32 3c 7e 1b 00 00 00 .........2<~?...
- 50: 00 00 00 00 00 00 00 00 00 00 00 00 78 00 8c 00 ............x.?.
- 60: 00 00 00 00 00 00 00 64 64 00 00 00 00 00 0c 05 .......dd.....??
- 70: a0 01 02 00 00 00 00 00 00 11 23 50 13 01 00 00 ???......?#P??..
- 80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- 90: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- a0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- b0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- c0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- d0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- e0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
- f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
复制代码 能扫到,能读到,证明TP工作,可以开始移植驱动。
2. 驱动移植
拿到驱动不管怎么样,先编译成模块加载进去看看
TP 驱动直接拿A20上面的来用,虽然是3.4 的驱动,但问题不大
https://github.com/cubieboard/cu ... drivers/touchscreen
放置路径:
include/linux/ctp.h
drivers/input/touchscreen/FT5406/ft5x06.c
drivers/input/touchscreen/FT5406/ft5x06.h
在Makefile添加如下一行:
obj-m += ft5x_ts.o
编译,发现少了mach/system.h ,而且使用__devexit_p 编译不通过。
关于__devexit_p 解释:http://blog.sina.com.cn/s/blog_ba08e8e00101caig.html
http://www.tinylab.org/fixup-compile-error-with-devinit-devexit/
修改ft5x06.c,如下,编译通过- --- a/ft5x_ts.c
- +++ b/ft5x_ts.c
- @@ -42,7 +42,7 @@
- #include <asm/uaccess.h>
-
- #include <mach/irqs.h>
- -#include <mach/system.h>
- +//#include <mach/system.h>
- #include <mach/hardware.h>
- #include <mach/gpio.h>
- #include <linux/ctp.h>
- @@ -1516,9 +1516,8 @@ static int ft5x_ts_probe(struct i2c_client *client, const struct i2c_device_id *
- s_ft5x_ts = ft5x_ts;
- queue_delayed_work(ft5x_ts->ts_workqueue, &ft5x_ts->pen_event_work, CTP_CHECK_DELAY);
- #endif
- - dprintk(DEBUG_INIT,"reg clk: 0x%08x\n", readl(0xf1c20a18));
- + //dprintk(DEBUG_INIT,"reg clk: 0x%08x\n", readl(0xf1c20a18));
-
- -
- i2c_dev = get_free_i2c_dev(client->adapter);
- if (IS_ERR(i2c_dev)){
- err = PTR_ERR(i2c_dev);
- @@ -1555,7 +1554,7 @@ exit_check_functionality_failed:
- return err;
- }
-
- -static int __devexit ft5x_ts_remove(struct i2c_client *client)
- +static int ft5x_ts_remove(struct i2c_client *client)
- {
-
- struct ft5x_ts_data *ft5x_ts = i2c_get_clientdata(client);
- @@ -1591,7 +1590,7 @@ MODULE_DEVICE_TABLE(i2c, ft5x_ts_id);
- static struct i2c_driver ft5x_ts_driver = {
- .class = I2C_CLASS_HWMON,
- .probe = ft5x_ts_probe,
- - .remove = __devexit_p(ft5x_ts_remove),
- + .remove = ft5x_ts_remove,
- .id_table = ft5x_ts_id,
- .suspend = ft5x_ts_suspend,
- .resume = ft5x_ts_resume,
复制代码 将模块文件放入系统里面加载,就能触摸了。
为什么改这么点就能用起来?
查看源码,发现它是使用工作队列间隔地上传坐标的,而不是一般常见的中断上传,所以也没有GPIO中断申请。而上电部分就如之前说的,不需要再操作。I2C用的总线是一样的都是i2c-1 ,使用标准的函数读写。所以这个驱动移植全志3.4到炬力3.10内核,工作很少。
3. 灵敏优化
在驱动中有初始化TP寄存器的内容:
- ft5x_set_reg(103,100);//int enable,low,indicate mode
- ft5x_set_reg(104,100);//int enable,low,indicate mode
复制代码 查看A035VL01 V0_SPEC.pdf 的31 页
地址103和104分别X与Y灵敏度设置。现在设置为100,0是最灵敏,255 不灵敏
TP 驱动移植好后,再根据实际使用,调整下灵敏度
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|