Touchpad 移植经验分享

bin 3月前 157

  1. I2C Touchpad

             

TP线路示例

             

Touchpad Spec Pin信号定义

I2C接口的touchpad主要由VDD、GND、CLK、DAT、INT、LID_CLOSE这几个信号组成,VDD和GND主要是为Touchpad提供电源,CLK、DAT、INT负责通讯部分,LID_CLOSE信号在LID关闭是需要被(EC)拉低,可能是一个节能的设计。

 

CLK即Clock,DAT即Data,INT表示interrupt,一个可以产生GEvent的GPIO。Touchpad的工作流程:进OS后,OS下相关的driver会发命令去初始化Touchpad,当Touchpad初始化成功后会给OS响应指令,此时Touchpad才正式被启用。当被触摸时,INT信号将产生一个GEvent,OS收到这个GEvent后会去读取I2C接口即Touchpad的数据,所以,在非OS环境下,CLK、DAT和INT这个三个信号是测不到任何数据的,除非POST阶段BIOS有去读写TP。

 

I2C设备通讯数据的抓取,需要用到逻辑分析仪,它的作用是将抓取的数据流转换为可被阅读的数据形式,不同的协议需要不同的分析仪,所以购买时尽量选择支持多种协议的分析仪。

 

             

逻辑分析仪抓取的部分数据

 

要使Touchpad能工作,BIOS主要有两个工作要做。

 

I2C Port Configuration

配置I2C接口,主要检查Touchpad对应的I2C端口及Touchpad support是否Enable

 

I2C Interrupt Pin Configuration

配置I2C中断Pin为GEVENT类型

 

Report a device to PnP manager

这是ASL code需要实现的部分,代码如下:     

  

2.PS2 Touchpad

             

PS2的Touchpad使用的是EC的PS2接口,线路稍微比I2C的简单,除了VDD跟GND,用于通讯的就只有CLK和DAT。

 

通讯方面,使用的是PS2协议。POST阶段,BIOS会通过60/64端口下command给EC,EC收到后根据收到的command在去执行相应的操作,去初始化KBC设备(Keyboard or Mouse),ITE的EC code在CORE_PS2.c中有详细的实现过程。使用逻辑分析仪可抓取BIOS与EC之间的通讯指令,如下附件为Trace PS2 Mouse的数据。     

 

要使TP可以工作,首先,EC需要配置相应的PS2端口:

              

以及Serial IRQ:

             

一般情况下,EC code都会都会把功能做好的,只需打开.h上定义好的宏即可,如若还是不能工作,就要仔细检查这两部分的配置参数了。主要有两个地方需要确认:


Interrupt mode,这个中断模式需要跟BIOS中ASL code设置的保持一致。需要注意的是,EC只支持两种形式的触发方式,即Level Low及Edge High。

             

所以当EC设置为Level时,ASL需要设置为:IRQ(Level, ActiveLow, Exclusive) {12}

当EC设置为Edge时,ASL需要设置为:IRQ(Edge, ActiveHigh, Exclusive) {12}

 

BIOS方面需配合EC的配置,然后将该设备上报给PnP Manager,ASL code如下:

      

 

最新回复 (0)
返回