Touch panel 移植说明
TP 一般采用 I2C 作为数据读写的接口,所以TP 驱动也可以归类为I2C 驱动。
设备树
根据产品获取当前使用TP的 初始化脚和中断脚。然后在响应 I2C中添加 对应设备树。
如下例:
sitronix@55 {
compatible = "sitronix_ts";
reg = <0x55>;
...
rst-gpio = <&msmgpio 16 0x00>;
irq-gpio = <&msmgpio 17 0x00>;
}
Makefile
严格意义来说TP应属于Input设备,所以TP源码应放在kernel/drivers/input/touchscreen目录下。
编写Makefile,如下例:
obj-m += sitronix-ts.o
sitronix-ts-objs = sitronix_ts.o sitronix_ts_i2c.o sitronix_ts_utility.o sitronix_ts_mt.o sitronix_ts_nodes.o sitronix_ts_upgrade.o
源码调试
几乎每个linux驱动都有个module_init(与module_exit的定义在Init.h (/include/linux) 中)。
没错,驱动的加载就靠它。
通过module_init将模块初始化函数统一别名为init_module,这样以后insmod时候,就会加载对应的驱动。
module_init(sitronix_ts_init);
module_exit(sitronix_ts_exit);
of_match_table表中的厂商和设备树中条目compatible(包含供应商字符串) 的厂商必须匹配。
否则TP加载必然失败,如果匹配,则调用驱动里边实现的probe函数。
parse_dt(struct device *dev,
struct sitronix_i2c_touch_platform_data *pdata)
{
reset_gpio = of_get_named_gpio_flags(np, "rst-gpio",0,&pdata->reset_gpio_flags);
stinf("%s,pdata->reset_gpio=%d\n",__FUNCTION__,pdata->reset_gpio);