TouchPanel在MSM7X27上的移植

       调试TouchPanel也有一段时间了,今天总结一下,平台是MSM7x27android2.2TP主要就是I2C了,这里不介绍I2C,不清楚的自己search,主要介绍TP在这个平台上的移植内容。需要注意的是平台采用的是硬件I2C而非GPIO模拟。

.设备和驱动的文件节点

在目录/sys/bus/i2c/devices下的设备就是这个i2c_board_info结构体里所描述的I2C设备,

/sys/bus/i2c/devices下的设备名字就是根据i2c_board_info结构体中定义的I2CAddress来命名的。

# ls

i2c-0

0-0038 //I2C_BOARD_INFO("ft5xxx",0x70>>1),/*这个是I2C设备的从机地址*/

0-005c //I2C_BOARD_INFO("ssd2531",0x53),/*这个是I2C设备的从机地址*/

0-000a //I2C_BOARD_INFO("bma200",0x0A),/*这个是I2C设备的从机地址*/

0-001e //I2C_BOARD_INFO("hmc5883",0x3c>>1),/*这个是I2C设备的从机地址*/

0-003c //I2C_BOARD_INFO("ov2655",0x60>>1)

0-0030

0-0010 //I2C_BOARD_INFO("rda5802",0x20>>1),

0-001c //I2C_BOARD_INFO("ltr600",0x38>>1),/*这个是I2C设备的从机地址*/

i2c-1


<6>[ 1.107875] input: ft5xxxas /devices/i2c-0/0-0038/input/input3

# cd sys/devices/i2c-0

# ls

uevent

name

new_device

delete_device

subsystem

power

0-0038

0-005c

0-000a

0-001e

0-003c

0-0030

0-0010

0-001c

i2c-dev


# cd 0-005c

# ls

uevent

name

modalias

subsystem

power

#

# cd 0-0038

# ls

uevent

name

modalias

subsystem

power

driver

input

# cat name

ft5xxx

#

.调试方法

adb shell dmesg>dmesg.log

或者可以实时查看cat /proc/kmsg,如触摸时返回坐标是否正确;

input设备实时查看还可以进入shell后:getevent,会列出所有的event设备,进行相应的操作会输出信息。贴写log,如下

<3>[ 1.095116] [FT5XXX]entermutitouch_init

<3>[ 1.095168] [FT5XXX]entermutitouch_probe

<3>[ 1.095183][FT5XXX]mutitouch_chip->pdata->gpio_rst =41

<3>[ 1.107221] [FT5XXX]entermutitouch_read_devid

<3>[ 1.107238] [FT5XXX]entermutitouch_write

<3>[ 1.107356] [FT5XXX]entermutitouch_read

<6>[ 1.107440] read Ft5302 ID= 0x79

<3>[ 1.107451] [FT5XXX]entermutitouch_write

<3>[ 1.107558] [FT5XXX]entermutitouch_write

<6>[ 1.107638] select ctpFt5302

<6>[ 1.108021]input: ft5xxx as /devices/i2c-0/0-0038/input/input3

<3>[ 1.108341] [FT5XXX]leavemutitouch_probe


三、修改的文件:

1.kernel/arch/arm/mach-msm/board-msm7x27-qrd.c

msm7x2x_init开机初始化,配置INTRSTPin 对应的GPIO,I2C设备的地址等

#ifdef CONFIG_TOUCHSCREEN_FT5XXX

i2c_register_board_info(0,ft5xxx_i2c_board_info, ARRAY_SIZE(ft5xxx_i2c_board_info));

ts_ft5xxx_config_gpio( );

#endif

其中关键I2C地址是在ft5xxx_i2c_board_info

static struct i2c_board_infoft5xxx_i2c_board_info[] = {

{

I2C_BOARD_INFO("ft5xxx",0x70 >> 1),

.irq =MSM_GPIO_TO_INT(TS_FT5XXX_GPIO_INT),

.platform_data = &ft5xxx_ts_data,

},

};

这个地址是7bit形式,不包括读写位,通常从datasheet得到的地址要右移1位,读写时系统会自己再做处理,从文件系统中读到driver名字是移位后的,就是从这里传入的值,但波形图设备地址仍然是没有移过位的。当hostslave无法通讯时,可以尝试左移一位操作。

2.kernel/drivers/input/touchscreen/ft5xxx.c

这个就是驱动文件了,两个主要的函数是mutitouch_probemutitouch_ts_work

mutitouch_probe完成读取设备ID,设置设备属性参数(可以接受的事件类型,xy坐标范围,设备名字(必须和driverName一致),总线类型等),注册input设备创建设备节点/dev/input/eventX,创建相应的work及注册休眠函数

mutitouch_ts_work就是中断触发调用相应的work后的关联函数了,主要就是读取坐标信息并上报给上层,完成这个函数要对IC很熟悉,包括读写命令,数据包的格式等。

3.kernel/arch/arm/configs/msm7627-perf-qrd_defconfig

就是配置一下宏了CONFIG_TOUCHSCREEN_FT5XXX=y

4.kernel/drivers/input/touchscreen/Makefile

根据宏来编译相关的driver文件

obj-$(CONFIG_TOUCHSCREEN_FT5XXX) += ft5xxx.o

5.kernel/drivers/input/touchscreen/Kconfig

config TOUCHSCREEN_FT5XXX

tristate "FT5XXX Capacitive TouchPanel"

depends on I2C


四、补充

1.SDA SCL 在哪里设置的?

board-msm7x27-qrd.cmsm_i2c_gpio_config()

gpio_scl = 60;

gpio_sda = 61;

2.复位持续时间为低电平持续时间

gpio_set_value(tc_chip->pdata->gpio_rst , IO_LOW);

mdelay( 200 );

gpio_set_value(tc_chip->pdata->gpio_rst,IO_HIGHT);

mdelay( 2 );

3.其他涉及的相关文件

i2c-msm.c

4.针对一款TP除了熟悉datasheet外,就是要知道linux提供的系统接口了

比如如何申请中断,如何创建work queue。

5.参考 

linux子系统分析及触摸屏驱动浅析:有加input设备的最简单例子

http://blog.csdn.net/Ralph_sqd/article/details/5933388


Linux设备驱动的分层设计思想:inputdev

http://www.linuxidc.com/Linux/2010-06/26812p2.htm


基于I2C的嵌入式多点触摸屏幕驱动设计:对driver流程的说明

http://www.dzsc.com/data/html/2011-3-11/89104.html


   linux多点触摸接口:对input设备各个参数有详细的说明

 http://tanatseng.blog.163.com/blog/static/174991629201132561941518/


Android多点触摸:从driverframework到应用有说明

http://wenku.baidu.com/view/a6a0ee0b79563c1ec5da7119.html




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值