210android 平台电容触摸屏驱动
210 开发平台使用 goodix 的驱动 IC G801,支持五点触摸。在驱动中,充分的利用了 linux
的输入子系统模型,I2C 模型,定时器模型以及工作队列模型。
首先了解下硬件接口:
电容屏采用 I2C 通信方式,外加一个 reset 口,一个中断口,即可将触摸的数据有效的采集回来。
这里 CAP_WAKE 为 GPJ2_6,CAP_INT 为 EINT8,I2C 通道使用通道 1。
驱动文件路径:kernel/drivers/input/touchscreen/goodix_touch.c
驱动加载后,在 goodix_ts_init 函数中初始化 GPIO,同时注册平台设备和平台驱动:
static int __init goodix_ts_init(void)
{
int res;
if(have_cap_touchscreen != 0)
return 0;
printk("Initial Goodix Touch Driver");
/*
* set cap touchscreen's shutdown pin to low level
*/
s3c_gpio_setpull(S5PV210_GPJ2(6), S3C_GPIO_PULL_DOWN);
s3c_gpio_cfgpin(S5PV210_GPJ2(6), S3C_GPIO_SFN(1));
gpio_set_value(S5PV210_GPJ2(6), 0);
/* wait a moment */
mdelay(50);
res = platform_device_register(&goodix_ts_device);
if(res)
{
printk("failed to register platform device");
}
res = platform_driver_register(&goodix_ts_driver);
if(res != 0)
{
printk("fail to register platform driver");
return res;
}
return 0;
}
第一句 have_cap_touchscreen 是一个全局变量,因为开发板同时支持 goodix 和索罗门的触摸屏,
故在这里加了一个变量判断,确保只加载一个电容触摸屏驱动。接着初始化 GPIO,使电容屏进入正常工作状
态,然后注册平台设备和平台驱动,在 goodix_ts_driver 结构中,探测函数 goodix_ts_probe 得到执
行。
static int goodix_ts_probe(struct platform_device * pdev)
{
struct i2c_adapter * adapter;
struct i2c_client * client;
struct i2c_board_info info;
int ret;