新手入门
- 积分
- 18
- 金钱
- 18
- 注册时间
- 2020-4-19
- 在线时间
- 4 小时
|
在我将正点原子提供的gt9147.c编译进内核并运行ts_test_mt测试后,发现触摸屏上显示的位置与我手指触碰的位置正好成斜对称。
检查该驱动文件后,经过一系列调试,最终完美运行的方法是调整gt9147_irq_handler中的部分代码为
if(id == 0) {
input_y = touch_data[1] | (touch_data[2] << 8);
input_x = touch_data[3] | (touch_data[4] << 8);
input_mt_slot(dev->input, id);
input_mt_report_slot_state(dev->input, MT_TOOL_FINGER, true);
input_report_abs(dev->input, ABS_MT_POSITION_X, 480-input_x);
input_report_abs(dev->input, ABS_MT_POSITION_Y, 800-input_y);
}
在上方代码中,修改了inpu_x、input_y所读取的寄存器,上传时将其进行了反转。
随后触摸屏可正常运行。
在该驱动中发现如下代码:
input_set_abs_params(gt9147.input, ABS_X, 0, 480, 0, 0);
input_set_abs_params(gt9147.input, ABS_Y, 0, 272, 0, 0);
input_set_abs_params(gt9147.input, ABS_MT_POSITION_X,0, 480, 0, 0);
input_set_abs_params(gt9147.input, ABS_MT_POSITION_Y,0, 272, 0, 0);
因此我怀疑该驱动适用于480x270的屏幕,且该屏幕与800x480屏幕的方向不同,在配置时应当作出修改。因此正点原子提供的驱动不能匹配800x480屏幕,在匹配时应该修改某一寄存器。
如果是这样,希望官方在驱动开发指南中进行说明,以便更多人学习时不在此受阻。
ps:
如果直接在drivers/input/touchscreen 目录下的 Makefile中添加obj-y += gt9147.o 。那么编译出来的zimage可能无法正常初始化,我的方法是注释掉配置文件中的其它两个触摸屏驱动,使其变成
# CONFIG_TOUCHSCREEN_EDT_FT5X06=y
# CONFIG_TOUCHSCREEN_GT9XX=y
然后zimage就可以正常运行了。
|
|