我所知道的EC====>LID
* M I( q: N* J- t0 q( J4 o. t$ a0 \, u# f% Z! {
1.What’s lid?
& g S) k3 J- Y/ ^2 J' |+ N# \9 P& P; f
Lid是盖子的意思,在NB上其实就是指Panel打开和关闭的过程。不知道有没有人试过用磁石去碰NB的底边缘,试过就会发现一碰NB就会进S3、S4当然也可能什么动作都没有(取决于OS的配置)。其实这部分是因为大多NB都是通过一颗magnet switch IC控制lid。Lid有两种状态Open和Close HW的线路通常还会将它们用作背光的始能信号。
8 \4 s4 ]' U# h( L# x
- e% v9 O0 E, B; s) L& |
' ^. E) P/ M( Z4 S# X2.Lid Open
1 E3 Z/ E$ X+ Y
3 p+ G* L0 B2 d& D* nLid Open就是通常上讲的开盖,HW会将这支信号拉到EC一根GPIO pin上,也就是说一旦Lid状态有变化EC这端就会收到中断, EC收到中断后会发SCI通知host,host再去做其他的动作。可是通常第一次开机的时候Panel是打开的,NB并没有供电所以EC没法更新lid的状态,这时EC就会在进入S0的时候根据lid这根GPIO的状态(H&L)去更新lid的状态。在OS装载的过程中会主动去call BIOS中的asl code去更新Lid的状态。 7 i" n2 ^0 S y
3.Lid Close 9 G8 g* L* `4 Z# y) {
/ b/ B" y( E1 S4 q- S- p4 ZLid Close指的是合盖,EC处理的过程和Lid Open基本一致,区别之处在于EC记录 Lid的状态有变化。另外在OS下有一个选项可以设置Lid Close时OS可以进行的动作。如下图所示: - b# s$ H6 M( x# x1 ?( Z4 I) G
& n) ~; i/ e$ n
2 C$ m: Y5 h/ E4 y/ H2 | Q. v2 j: j
6 f/ S' r+ [0 o, X, _' P5 P
- d5 ~9 v9 ^( t y: l
0 Z) ]9 G$ q& [/ l" A5 V! P( G如上图1所示close lid可以选择的action有三种
5 l4 n; P* D# E" \: K/ y
7 G ^/ f3 F7 f. P/ W1. Do nothing ( x2 P% K* P: M6 z
2. Stand by
$ x0 z9 J4 P* ?) v! P/ ?3. Hibernate $ p6 {8 D& I( u# s' J7 H
这些功能是怎么实现的呢?完整的流程如下图所示:
/ A7 Z- \4 J$ A' k. F7 c Q& e/ n: S. h3 z
# [' e% Z2 o; m8 X6 c2 t# w8 r1 I' _
5 e9 S- h( t! c$ h
2 r& A& [5 [5 F ]9 R" H& [- F- F' i2 P- t: b }2 p* A. P
图2就是完整的工作过程,步骤5是猜的。要知道真正的做法恐怕只有问了微软才知道J。 ' n/ U2 f0 Y; l& ^
) g: V- c. t3 \% n3 |( e9 a7 H" s
; {# f( F6 N+ X) n' w8 x4 F
8 m' r! Q5 g/ a; z( G: H3 `- D
Peter 4 t: u4 a- i* U7 ^9 n2 r) ?
|