Ctp驱动的移植修改 v1.0

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4. 驱动与硬件的联系
4.1 触摸驱动与硬件的联系 触摸驱动,作为整个内核中的一部分,它使用内核提供的服务,与自己的硬件交互, 从 而抽象了硬件,为内核提供服务;触摸驱动为了能与触摸硬件交互,必然要使用内核提供的 服务,其在系统的层次如图**所示,表明了与内核其他部分的联系。
struc t a w _pla tf or m _o p s
5. 驱动移植
5.1 基于 A10 平台的驱动移植
驱动中,与硬件交互的部分,主要有:获取 sysconfig 信息,配置 io, int,配置 i2c 信息, 通过 i2c 与硬件通讯等。 Ctp driver 在内核中的层次,如下图所示:
Ctp driver
Linux kernel
Ctp hardware A10 s o c
5.2
基于 A10 平台的 ctp 驱动移植
பைடு நூலகம்
事实上,在 a10 平台上,为了便于触摸驱动的移植,在 bsp 上封装了平台相关的代码 操作集 aw_platform_ops,用于获取 sysconfig 信息,配置 io,int 信息;
I 2 c
Ctp driver
A w _p la tf o r m_o p s
注意: reset 信号并没有预先分配, 在各方案中, 可以将主控的 TP-WAKEUP 分配为 Reset 信号,具体需要查看触控的 datasheet,并理解触控的功耗管理模式,进行具体的配置, 各电容触摸方案略有不同,此处无法一一说明。 3.3 Sysconfig 及其配置 范例: ctp_int_port ;ctp_wakeup ctp_reset ctp_io_port
= port:PH21<6><default> = port:PB13<1><default><default><1> = port:PH20<1><default> = port:PH21<0><default>
在 sysconfig 中的 ctp 子健 reset, wakeup 的作用对象,因为不属于主控模块,其在语义 上是对模块的操作,配置应根据对外挂模块的操作决定; sysconfig 中的配置,要求 reset 配置,与触控 ic reset 连接的主控引脚对应; 要求 wakeup 配置,与触控 ic wakeup 连接的主控引脚对应;
建议:在触摸方案移植过程中,所有与平台相关的,可以被其他触摸驱动复用的代码, 都尽量封装成函数,并成为 aw_platform_ops 中的一个成员; 5.2.2 参考代码及范例 参见 platform_ops.rar; 另外,可参考我们的移植范例,包含了原始文件,second step, third step 的快照,各位 可以用后面的比较前面的,就能清晰知道在一次移植中做的工作了。 Sysconfig 的使用 5.2.3 5.2.3S
Linux kernel
Ctp hardware A10 s o c
同时,配置 i2c 信息也在 i2c 驱动中完成了,因而,在移植驱动时,通常只需使 用 aw_platform_ops 和 i2c 提供的接口即可; 5.2.1 平台相关代码操作集 struct aw_platform_ops { int irq; bool pendown; int (*get_pendown_state)(void); void (*clear_penirq)(void); int (*set_irq_mode)(void); int (*set_gpio_mode)(void); int (*judge_int_occur)(void); int (*init_platform_resource)(void); void (*free_platform_resource)(void); int (*fetch_sysconfig_para)(void); void (*ts_reset)(void); void (*ts_wakeup)(void); };
下面分别讲述,在 a10 平台上,为驱动移植,所提供的一些建议; 5.1.1. 获取 sysconfig 信息 首先,触控硬件平台,是如何与主控连接的,其本身的一些特性参数,及其占用主控的 资源,需在 sysconfig 中统一描述,并在 tp driver 初始化时,获取;故需在 sysconfig 中,正 确配置 ctp 子健; 在程序中,通过 gpio 接口,获得这些信息,具体使用方式,请参考 gpio 配置的相关文 档; 5.1.2. 配置 io,int 信息
3. Reset,Wakeup 信号的配置
3.1 主控与触控 ic 的连接
3.2
主控用于触摸模块的 io 端口分配
PB13 PH21 PH20
TP-WAKEUP TP-INT LS-INT
Used for wake up external TP controller External TP input signal Light sensor input interrupt interrupt
通过 gpio 接口完成; 5.1.3. 配置 i2c 信息 这部分信息,是为了用于 i2c 通讯的,作为挂在 i2c 总线上的设备,都需要配置这些信 息,并通过 i2c_register_board_info 注册,这些信息在调用 i2c_add_driver 时,将注册的信息, 与 driver 的信息比较,如果 match,将执行 probe 例程; A10 bsp 中,i2c 信息配置部分,已经通过 sysconfig 获得,并注册了,移植时,可不用 关心,不过要求保证:sysconfig 中的 name 应与 tp driver 中的 name 一致; 5.1.4. 通过 i2c 与硬件通讯 这部分内容,请参考 include\linux\i2c.h;
Eg: 对于将触控 ic reset 连接到主控 wakeup 的情况,要求配置为: ctp_reset = port:PB13<1><default><default><1>
建议: 1。不建议两个引脚都配置; 2。对于 ft 系列,建议采用触控 ic 的 reset 引脚; 不建议两个引脚都配置,出于两个方面的考虑: 1. 影响唤醒的时间; 2. 操作两个引脚,可能扰乱模块的时序,模块有可能挂死;
;---------------------------------------------------------------------------------;capacitor tp configuration ;external int function ;wakeup output function ;notice --tp_int_port & tp_io_port use the same port ;name should be compatible with the corresponding ctp driver. ;at present, only "ft5x_ts" and "Goodix-TS" is supported. ;---------------------------------------------------------------------------------[ctp_para] ctp_used =1 ctp_name = "ft5x_ts" ctp_twi_id =2 ctp_twi_addr =0x38 ctp_screen_max_x = 800 ctp_screen_max_y = 600 ctp_revert_x_flag =1 ctp_revert_y_flag =0 ctp_int_port ;ctp_wakeup ctp_reset ctp_io_port = port:PH21<6><default> = port:PB13<1><default><default><1> = port:PH20<1><default> = port:PH21<0><default>
Ctp 驱动的移植
1. 前言
触摸作为重要的输入设备,在人机交互中,有着重要作用。在完成一个方案时,应尽早 完成触摸驱动的移植,有利于后期其他模块的调试和测试。然而,触摸驱动的移植,并不是 越早开始越好,我们建议,应在 linux 核心系统稳定及屏幕点亮后,开始进行,这样在触摸 移植后,就能顺利进入 android 系统,并能在 android 层对触摸驱动进行充分测试,保证良 好的触控效果。 Ctp:configurable touch panel 的简称;本文档,讲述外挂触控驱动的移植,包含环境准备, 硬件连接,软件,调试等部分; � 在移植之前,搭建良好的开发环境是必要的,这将有利于后期调试时 bug 的定位, 及 时地获取相关人员的支持,从而更快速的完成移植; � 硬件连接,请先确定硬件连接是否正确,正确的硬件连接,请参考 Reset,Wakeup 信 号的配置, 并确定其他信号,电源电位正常; � 软件,是驱动移植要实现的代码部分;就触摸驱动而言,就是要实现向内核上报用户 操作信息;包含从硬件获取用户操作信息和上报两个部分;上报部分,每个驱动都是 类似的,通常,原厂提供的 demo 已经实现了,可需略作修改即可;从硬件获取用户 操作信息是触摸移植过程中,要达到的主要目的,触摸驱动中,我们要关心的,也主 要是这部分代码;文中,先介绍触摸驱动在系统中的层次,介绍其应该实现的功能, 以及在 a10 bsp 上如何实现驱动,最后,介绍了我们提取的平台相关操作集,它在 bsp 上,针对 ctp 驱动移植的实际场景,简化了移植过程,提高了效率,代码风格也更为 一致,这是我们推荐的 ctp 驱动移植的方法; � 调试,是驱动移植过程中,解决问题的必要手段,因为遇到的问题,我们不可能完全 预见,因而,仅能提供调试方法介绍,并就常见的问题提出建议;
2. 环境准备
为加快外挂触控 ic 的移植速度,规范研发流程,请先确保以下调试环境和工具可用: 硬件: � 串口可以正常打印; 软件: � 开发环境要求能生成可在开发平台上运行的固件; � 在 linux kernel 目录下,有对应生成该固件的.config 文件; � Adb 可用; � 文件系统可写 � 串口打印相关的 loglevel>7; � 打开 i2c 通讯相关的打印; 如何做到以上要求,参见调试一节,若不清楚,可咨询系统整合相关人员;
I2c interface
arch
Tp driver
I2c driver
Linux kernel 2 g p io soc in t in t reset c tp
C tp controller
1
tx rx
I2c-adapter
Tp hardware Sysconfig 描 述
图中,tp driver 使用系统提供的接口,使用 int, io 等资源,从而获得硬件的信息,或者 控制硬件;通过 i2c 通讯,获取硬件上报的数据; 因而,tp 与硬件的接口分为两个部分:体系结构相关部分,i2c 部分; � 体系结构相关部分:我们针对触摸驱动的实际,封装了 aw_platform_ops 操作集, 经过若干驱动的开发,这组操作集,是可以满足需求的,若不能满足需求,应扩

展操作集,通过这组操作集,获得与体系结构相关的资源; I2c 通讯部分:直接使用内核提供的接口即可;
4.2 触摸驱动的工作流程 A.硬件部分 � 确保硬件各个管脚的连接顺序正确; � 上电,测试各个管脚信号的电压正常,只有在保证硬件正常的情况下,进行软件 驱动调试,方可保证驱动能够正常工作(该处最容易被很多软件开发人员忽视, 务必注意,方可节省大部分时间) B. 依据上图,简述触摸驱动的工作流程: � 初始化:经由 1,完成初始化硬件的过程,另外,还需处理缓冲区,上报事件等, 通常,这部分代码,原厂已经提供了范例,与具体的 soc 关系不大,可暂不关心; � 工作:经由 2,通知 driver,等待的事件发生了,此时,driver 需经由 1,通过 i2c 通讯获取硬件得到的数据等信息; 可见,触摸驱动的移植过程中,要先保证 1 的通路正确,后保证通路 2 正确,当以上两 个通路,都能正常工作时,触摸驱动的移植就告一个段落了。
相关文档
最新文档