這個敦泰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