S5PV210 Android FT5406触摸驱动

本文详细介绍了在S5PV210平台上针对FT5406触摸屏的驱动开发,包括FT5406的基本电路接口分析,I2C从地址确认,以及驱动编写的关键步骤,如设置中断口、配置I2C_board_info、注册i2c设备和input子系统。此外,还讨论了多点触摸的上报流程和字符设备注册,以及Android的睡眠唤醒功能。
摘要由CSDN通过智能技术生成

1.  首先,分析下 FT5406 的基本电路接口:
基本都是通用的接口,如 I2C 接口,INT,WAKE,RST。如图:

以上可知,我们在驱动中必须定义一个中断口,来启动接收触摸数据,一个gpio脚来复位FT5406。
wake:主要靠cpu发送一个唤醒指令给FT5406。

#define pin_irq     S5PV210_GPH0(1)
#define pin_rst     S5PV210_GPB(1)


2. 再次,需确认FT5406的从地址,以便于I2C访问得到。这个可以根据FT5406数据手册查找到.

可知从地址高位必须为:3,低位必须根据i2ccon设定的值来确定,这点很奇怪。
我这边找到的从地址为:0x38

3. 基本的东西确认好后,剩下的就是根据FT5406数据手册上的指令,开始写驱动了。
在此之前,我们先了解下驱动如何实现电容屏的多点触摸,其实很简单,主要需要
触摸屏IC FT5406 能够捕获多点数据,这点电容屏基本多能支持到捕获2点以上,而
FT5406 可以捕获5个触摸点,编写驱动时,只要去获取这几个点的数据,然后上报
就行。格式如图:




解释:
02h : 捕获的触摸点个数
03h- 1eh :对应每个点的x,y坐标数值。

----------------------------------------------------------------------------------------------------------------------------------------------

首先配置 i2c_board_info,把从地址提供过去。

//arch/arm/mach-s5pv210/mach-smdk110.c

//i2c_board_info用于构建信息表来列出存在的I2C设备。这一信息用于增长新型I2C驱动的驱动模型树。对于主板,它使用i2c_register_board_info()来静态创建。对于子板,利用已知的适配器使用i2c_new_device()动态创建。

//I2C 设备创建模板
 struct i2c_board_info {
     char type[I2C_NAME_SIZE];  //芯片类型,用于初始化i2c_client.name
     unsigned short flags;  //用于初始化i2c_client.flags
     unsigned short addr;  //存储于i2c_client.addr
     void *platform_data;  //存储于i2c_client.dev.platform_data
 
    struct dev_archdata *archdata;  //拷贝至i2c_client.dev.archdata
     int irq;  //存储于i2c_client.irq
 };
 
 static struct i2c_board_info i2c_devs0[] __initdata = {
 #ifdef CONFIG_TOUCHSCREEN_CDTLCD
 {
 I2C_BOARD_INFO("ft5x0x_ts", 0x38),
 .irq = IRQ_EINT1,
 },
 #endif 
 };

//使用Linux I2C驱动栈,系统可以在初始化时宣告板载信息表。这些应该在靠近arch_initcall()时的板子相关的初始化代码或同等情况时,在I2C适配器驱动被注册之前被执行。例如,主板初始化代码可以定义几个设备,也可以在叠板的每个子板初始化代码中定义。
//I2C
设备会在相关的总线适配器被注册后创建。此后,标准驱动模型工具通常绑定新型I2C驱动至I2C设备。对于使用这一函数宣告的设备,在动态分配的情况下总线号是不可用的。
//
传递的板子信息可以安全的是__initdata,但是由于不能拷贝,要小心嵌入式指针(如platform_data,functions等)
//
静态的宣告I2C设备
int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len);
@busnum:
指定这些设备属于哪个总线
@info: I2C
设备描述符向量
@len:
向量中描述符的数量;为了预留特定的总线号,可以是0

i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));

在你对应的machine配置里会执行“i2c_register_board_info”一个函数,它会将一个i2c_board_info的结构体注册进系统,

可以发现,在目录/sys

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值