这个敦泰tp芯片的调试,没什么大问题,但也做一些记录。
1.这个芯片理论上可以支持10手指,但为了兼容他们之前的做法,现在只是汇报了第一个手指的坐标点,相当于只是单点。
2.这个芯片提供三种工作模式,通过设置寄存器0,可以在不一样的工作模式下工作;默认寄存器0的值为0,即正常操作模式,在这个模式下可以读取按键坐标;
通过内核API i2c_transfer,可以一次性读取多个寄存器。
static int ft5316_i2c_read(struct i2c_client *client,u8 addr,u8 *data, int length)
{
struct i2c_msg msgs[] = {
{
.addr = client->addr,
.flags = 0,
.len = 1,
.buf = &addr,
},
{
.addr = client->addr,
.flags = I2C_M_RD,
.len = length,
.buf = data,
},
};
return i2c_transfer(client->adapter, msgs, 2);
}
3.刚开始调试完之后用tslib 库进行校准,测试,没有反应;
触摸屏有三种工作方式,down touch up;当down 和 touch的时候需要汇报一个完整的数据包,包括sync;
当up的时候,不用汇报坐标点,只需汇报
input_report_key(input, BTN_TOUCH, 0);
input_report_abs(input, ABS_PRESSURE, 0);
input_sync(input);
只需汇报这三个值就行。
通过查看代码,发现没有处理当手指为0(up);
通过修改,当手指大于0时候(down touch),汇报完成数据;
当手指为0时候,只汇报input_report_key(input, BTN_TOUCH, 0);
input_report_abs(input, ABS_PRESSURE, 0);
input_sync(input);
修改之后,可以用tslib工具正常测试。
4.正确加载驱动之后,
在/sys/class/input/ 下生成 input0
cat /sys/class/input/input0/event0/uevent 可以看到主次设备号,以及设备名字,也就是在/dev下面的名字
MAJOR=13
MINOR=64
DEVNAME=input/event0
在/dev下面,确实可以看到ls -l /dev/input/event0
5.移植tslib,正确设置环境变量,测试ok