本文主要描述如何在COM335X上定制电容式触摸屏接口,包括内核配置,驱动初始化。EAC公司提供给客户的电容触控芯片为FT5316DMAE,使用IIC总线,驱动为ft5x16_ts。本文以EVB335X-II为例,说明如何将电容式触摸屏从IIC1接口换到IIC2上。在EVB335X-II中,FT5316的中断引脚为gpio0_20,具体请参考EVB335X-II设计原理图。
一、内核配置增加驱动支持驱动配置
Device Drivers --->
Input device support --->
[*] Touchscreens --->
<*> FT5X06/FT5X16 based touchscreens
二、修改驱动初始化内容在EVB335X中,电容触摸屏的接口为IIC1,但在EVB335X-II上,推荐使用的接口为IIC2。打开板级初始化文件arch/arm/mach-omap2/board-com335x.c,做以下修改:
1、去掉FT5316在IIC1的所有相关部分,这里不做描述,具体可参考接下来的步骤;
2、在IIC2初始化函数之前,增加FT5136的中断引脚初始化,如下:
static struct pinmux_config ft5x16_irq_pin_mux[] = {
{"xdma_event_intr1.gpio0_20", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
{NULL, 0},
};
3、在结构体com335x_i2c2_boardinfo[]中增加FT5316的设备地址等基本信息:
static struct i2c_board_info __initdata com335x_i2c2_boardinfo[] = {
[0] = {
I2C_BOARD_INFO("ft5x16_ts", 0x38),
.irq = -EINVAL,
},
};
4、在IIC2的初始化函数中,添加FT5316中断初始化相关内容:
static void com335x_i2c2_init(void)
{
setup_pin_mux(i2c2_pin_mux);
/*Cap TS*/
setup_pin_mux(ft5x16_irq_pin_mux);
if(gpio_request(GPIO_TO_PIN(0, 20), "ft5x16_ts_irq") < 0)
{
printk("Can't request gpio for ft5x16_ts irq\n");
return;
}
gpio_direction_input(GPIO_TO_PIN(0, 20));
com335x_i2c2_boardinfo[0].irq = gpio_to_irq(GPIO_TO_PIN(0, 20));
omap_register_i2c_bus(3, 400, com335x_i2c2_boardinfo, ARRAY_SIZE(com335x_i2c2_boardinfo));
}
5、在com335x_init()函数中,添加IIC2的初始化:
static void __init com335x_init(void)
{
......
com335x_add_buzzer();
com335x_i2c2_init();
com335x_spi0_init();
......
}
6、修改完成后,保存退出,重新编译内核即可。