BIOS备忘录之IIC(touchpad)设备
简述BIOS中对IIC device的支持,以touchpad为例。
信息收集

收集平台的硬件信息:
1. IIC controller number(PCH一般包含多个controller,我们使用的是哪一个);
2. INT / Reset信号用的是哪个GPIO;
3. Enable信号用的是哪个GPIO(Enable信号一般由EC控制,这样可以通过Hotkey来Enable/Disable)
收集device的信息:
1. slave address;
2. hid descriptor address;
3. vendor ID, Product ID;
4. _HID(根据driver确定)
软件初始化
GPIO的配置:
1. SDA,SCL一般直接配置成native function就行了;
2. INT / Reset要配置成GPIO(并且需要在code里面显式的使用:使用GPIO的内存地址或int number)
在BIOS setup下面配置device的相关参数:
设备类型,中断模式,总线地址(controller number),HID地址,速度,SDL Hold Time等,这些参数会通过GNVS传给ASL code(可参考:
BIOS备忘录之ASL code常用知识点 里面的BIOS code与ASL code是如何传递数据的)


我们在系统下通过RW查看寄存器:

ASL code初始化
1. 根据GNVS的参数,赋值正确的_HID, HID2等;
2. 修改_CRS,配置device使用的系统资源,这里一般会把INT引脚的int number传进来(体现了GPIO的显式使用)



问题举例
1. device在DM下看不到:
>>> 检查controller是否已经enable;
>>> 检查device在_STA中有没有返回 1。
2. device不能正常工作:
>>> 测量时序,比如配置SDA Hold Time;
>>> 检查EC的使能信号;
>>> 尝试更改clock的频率;
>>> 检查中断信号的设置(中断方式,是否设置了反转等);
>>> 测量是否有漏电(添加code在合适的位置来拉RST/EN)。
support多种device
如果项目支持多种device,比如支持2种touchpad,这时需要BIOS能自动检测不同的device,然后在asl code里面赋值不同的_HID,以便在OS下能安装正确的driver(note:2种touchpad的slave address和hid address要一样)
一般来说,对IIC device,我们会在post过程中去读取IIC device的HID descriptor,从而得到device类型,厂商...,进而在ASL code里面为不同的device赋值不同的_HID,以便安装正确的driver。
BIOS C code IIC driver的作用:
1. 把IIC controller number,slave address,hid address,int(一般为内存地址(体现了GPIO的显式使用),BIOS根据输入判断是否有中断产生),reset传给BIOS;
2. BIOS根据IIC controller number,slave address,hid address获取device的hid descriptor;

3. 把hid descriptor里面的vendorID,productID通过GNVS告诉ASL code给device赋值不同的_HID


Enable/Disable TouchPad
在OS下我们可以通过Hotkey来Enable/Disable touchpad,常用做法:
1. EC 拉GPIO:EC检测到按键按下,直接把device的en信号拉低;
2. EC 发Q Event 告诉Driver:EC检测到按键按下,发Q Event告诉OS,OS调用ASL 来处理(这种方式需要自定义的driver配合)
BIOS备忘录之IIC(touchpad)设备的更多相关文章
- BIOS备忘录之SPI(fingerprint)设备
Reset和INT信号使用的是GPIO功能,需要显式的使用(INT信号使用了GPIO的int number,RST信号使用了GPIO的absolute number): 问题举例 漏电导致功能异常:在 ...
- RT-thread 设备驱动组件之IIC总线设备
本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱 ...
- BIOS备忘录之x86硬件编程(寄存器与IO)
SOC固件(BIOS)开发: 1.熟悉硬件原理图:要弄清楚pin脚的功能: 2.配置GPIO引脚,配置成Native功能还是GPIO功能(如果是配置成GPIO,需要在code里面显式的使用): 3.硬 ...
- BIOS备忘录之EC常用知识点
BIOS工程师眼中常用的EC知识点汇总: EC的硬件架构 EC硬件结构上主要分为两部分:Host Domain和EC Domain Host Domain就是通过LPC与CPU通信的部分(LPC部分需 ...
- Arduino IIC 主从设备连接通信
目的: 实现Arduino主从设备之间的互相IIC通信,掌握IIC通信协议的使用方法. 器材: Arduino UNO R3 一块 Arduino Nano 三块 面包板 导线 3K ...
- BIOS启动项中的设备都有哪些
Floppy 软式磁盘驱动器,简称FDD,也就是我们平时所说的软驱. CD-ROM 不用多说了,大家都知道,这是光盘驱动器,也就是我们平时说得光驱. SCSI SCSI的全名是:Small Compu ...
- BIOS备忘录之ASL code常用知识点
_HID:device唯一 _STA:决定device在不在(在DM下面能不能看到) _CRS:描述分配给device的资源 _INI:在OSPM加载描述表的时候运行一次(比如,如果要根据不同情况给d ...
- BIOS备忘录之通过Windbg来追踪ASL code的运行
通过Windbg来追踪ASL code的运行: 目标机的配置: 第一步: 在BIOS Setup下面 disable secure boot(不然下面debug on 命令会失败):关闭防火墙. 第二 ...
- IIC设备驱动程序
IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接 ...
随机推荐
- 135、JS和Android交互范例
很简单的直接上代码 <uses-permission android:name="android.permission.INTERNET" /> assets/web. ...
- VS 错误: 未找到与约束contractname Microsoft.VisualStudio.Utilities.IContentTypeRegistryService
今天突然停电,vs重启的时候就出现了问题,最开始是提示如图1所示的错误,开始觉得可能这提示不重要,也就关闭不在提醒了,结果,vs启动是启动了,项目也开启了,但是生成的时候,依旧就报了图1的错 图1 去 ...
- CF 1131C Birthday
C. Birthday time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- [转]MapReduce:详解Shuffle过程
Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑, ...
- springmvc中为我们做了什么
这应该是每个使用框架的人应该自问的.这就要从没有使用框架时说.在没用框架开发web应用时,自己是怎么开发的,就是写servlet,jsp. 使用springmvc后,使用Controller注解,其实 ...
- 七牛 OCR 接口调试 & 七牛鉴权 Token 应用
接口规约 PHP 实现 核心代码 执行结果 源代码 Java 实现 核心代码 执行结果 源代码 [现学现卖]图片内容审核接口 Python 实现 核心代码 执行结果 源代码 Go 实现 核心代码 执行 ...
- react引入方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python全栈开发 * 进程池,线程理论 ,threading模块 * 180727
一.进程池 (同步 异步 返回值) 缺点: 开启进程慢 几个CPU就能同时运行几个程序 进程的个数不是无线开启的 应用: 100个任务 进程池 如果必须用多个进程 且是高计算型 没有IO型的程序 希望 ...
- java-03-动手动脑
1. 问题:这两种方式定义的变量是一样的吗? 早期我们经常这样定义变量 int value=100;前面的示例中这样定义变量 MyClass obj = new MyClass(); 回答:一般情 ...
- 限时免费 | 12月6日,广州保利洲际酒店,ABC Summit 2018云智峰会来了!
随着科技的迅猛发展,人工智能技术也逐渐取得了各个突破.自20世纪70年代以来,作为计算机学科的一个分支,人工智能就被列为世界三大尖端技术之一.近年来,阿尔法狗战胜世界第一柯洁,使人工智能再度迎来新的热 ...