#触摸屏调试
开发环境:ubuntu12.04LTS
Android核心板型号:Samsung6818
电阻触摸屏型号:tsc2007
作者:@happyguy96 && @ccxx0914
本篇文章以移植电阻触摸屏tsc2007为例,记录触摸屏驱动程序如何修改,以及调试触摸屏的思路和经验,希望对有需要的朋友所有帮助。
##修改触摸屏驱动
1. 修改触摸屏分辨率(\kernel\drivers\input\touchscreen\tsc2007.c)
保证触摸屏与显示屏分辨率相同,本例中为1024*768,修改如下:
#define LCD_SCREEN_X_PIXEL 1024
#define LCD_SCREEN_Y_PIXEL 768
2. 定义并注册I2c设备
触摸屏属于I2C设备,开机时需要注册到系统中。
首先在文件\kernel\arch\arm\plat-s5p6818\drone\device.c,添加tsc2007设备驱动的相关结构体。
#if defined(CONFIG_TOUCHSCREEN_TSC2007)
#include <linux/i2c/tsc2007.h>
static struct tsc2007_platform_data tsc2007_s5p6818_platform_data = {
.model = 2007,
.x_plate_ohms = 100,
.poll_period = 5,
};
static struct i2c_board_info tsc2007_i2c_board_info[] = {
{
I2C_BOARD_INFO("tsc2007", (0x90>>1)),
.platform_data = &tsc2007_s5p6818_platform_data,
.irq = CFG_TSC2007_IRQ_IO
},
};
#endif
其次,在函数nxp_board_devs_register()中将设备注册。
由设备注册函数可知,只有当显示屏型号和触摸屏类型同时满足的条件下,才能将tsc2007注册到I2c总线上。这里调试的时候需要注意,设备开机后,可以查看打印的注册信息,如果发现没有注册,可以查看当前显示屏型号在注册函数中是否包含;当前触摸屏类型是否为电阻屏,根据情况自行修改函数。
//设备注册nxp_board_devs_register()
#if defined(CONFIG_TOUCHSCREEN_TSC2007)
if(((screen_type == MAIN_DISPLAY_DEVICE_LCD7_800x480)
||(screen_type == MAIN_DISPLAY_DEVICE_LCD7_1024x600)
||(screen_type == MAIN_DISPLAY_DEVICE_LCD_CUSTOM))
||(screnn_type == MAIN_DISPLAY_DEVICE_LVDS10)
&& (screen_tp_type == 1)){
printk("plat: add device tsc2007\n");
i2c_register_board_info(2, tsc2007_i2c_board_info, 1);
}
#endif
- 修改触摸中断的引脚CFG_IO_TOUCH_PENDOWN_DETECT
开发板上触摸芯片的中断引脚所连的GPIO口、I2C设备注册时使用的中断引脚和触摸程序tsc2007.c中使用的中断引脚和这三者应该保持一致:
(1)开发板的引脚实际连接情况为,触摸芯片中断引脚连接到了CPU的GPIO_C25引脚上,在内核中该引脚可用宏定义IRQ_GPIO_C_START + 25来表示。
(2)在I2C设备注册中,tsc2007_i2c_board_info结构体里定义了中断信息irq=CFG_TSC2007_IRQ_IO,宏定义CFG_TSC2007_IRQ_IO所在的文件路径为\kernel\arch\arm\plat-s5p6818\drone\include\cfg_main.h