1. 需要在board-mx6q_sabresd.c文件中去添加tsc2007的板级文件, #ifdef CONFIG_TOUCHSCREEN_TSC2007 { I2C_BOARD_INFO("tsc2007", 0x48), .type = "tsc2007", .irq=gpio_to_irq(SABRESD_TSC_INT), .platform_data = &tsc2007_info, }, #endif }; 原来把这个文件加载到了 i2c_board_info mxc_i2c1_board_info2,总是报出tsc2007挂载失败,i2c1不能识别到具体的tsc2007驱动。 tsc2007_info也的添加这个结构体。 等到加载到正确的2c_board_info mxc_i2c2_board_info后,在I2C_BOARD_INFO("tsc2007", 0x48),这行代码中的地址,需要报所有的i2c中的0x48地址都要屏蔽,不然的话在启动中会报出不能正确加载到相应地址中去,因为这个地址已经被占用。 2. SABRESD_TSC_INT这个引脚定义,早CPU的手册中可以查找到相应的引脚是gpio3_io20所以需要宏定义#define SABRESD_TSC_INT IMX_GPIO_NR(3, 20)。同时需要把这个gpio3_io20的其他的屏蔽掉,不然的话这个会提示不能使用。 3. 宏定义完了以后board-mx6q_sabresd..h文件中添加这个(3,20)的定义,不然的话会报IMX_GPIO_NR(3, 20)未定义,或者未申明。 其实以上配置完了以后板级文件中还缺少点东西。 4. 函数get_pendown_state用于运行时获取笔按压状态,也就是获取tsc2007引脚PENIRQ的状态,这个引脚当触摸屏有按压的情况下输出低电平,无按压时输出高电平。 static int tsc2007_get_pandown_state(void) { int dat; dat=gpio_get_value(SABRESD_TSC_INT); return (dat==0)?1:0; } 在驱动程序的probe函数内被调用,处理一些硬件相关的初始化。这个初始化主要是针对PENIRQ相连的引脚的初始化。gpio_request(SABRESD_TSC_INT,"tsc2007 irq"); 在驱动程序exit时调用。gpio_to_irq(SABRESD_TSC_INT); 发生中断后清除中断 gpio_free(SABRESD_TSC_INT);
|