|
我所知道的EC====>LID
, j2 O5 Q& F3 ]: N# Y1 E" U3 q: d* _) a. f8 Y! n! R
1.What’s lid?
# w$ Q2 }! k7 O8 b# b7 W N0 Q9 |) `1 o6 ]
Lid是盖子的意思,在NB上其实就是指Panel打开和关闭的过程。不知道有没有人试过用磁石去碰NB的底边缘,试过就会发现一碰NB就会进S3、S4当然也可能什么动作都没有(取决于OS的配置)。其实这部分是因为大多NB都是通过一颗magnet switch IC控制lid。Lid有两种状态Open和Close HW的线路通常还会将它们用作背光的始能信号。
, @9 \0 \& p" B2 l! x
3 j" X/ r3 j/ V6 W, n
) Y. C' {9 X: R4 o. E2.Lid Open
$ j( u' U6 e/ n# L, ]' L. ~4 q
" A, w; L+ }+ T: ?( |: ^Lid 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的状态。 5 }* a6 e) l$ j7 P" q0 `
3.Lid Close : y) G7 ^3 m- h3 N
; C( @4 V8 U( w: Q, {Lid Close指的是合盖,EC处理的过程和Lid Open基本一致,区别之处在于EC记录 Lid的状态有变化。另外在OS下有一个选项可以设置Lid Close时OS可以进行的动作。如下图所示:
& s- d5 h) t% L
& X. M' |2 _. w U* p8 |0 y; n# a 4 W' A' Q' o& U. E" I2 q2 D9 c
* e( @) U4 V% H0 M- M
8 e& \' Z& v3 | L+ W) `6 F) A6 z8 X
2 `. Z9 m; T% Q4 V
如上图1所示close lid可以选择的action有三种' p5 J. L$ k) P$ V8 f, u# x$ ^- f
1 N) q3 t! z; C* [! V
1. Do nothing
( {6 l9 ], r3 s* f2. Stand by
) q6 k$ ^ `& V' B5 ~% S* g, C3. Hibernate & N B& @- A( H6 L/ f
这些功能是怎么实现的呢?完整的流程如下图所示:
7 K9 ?7 b5 w- S; u5 I4 n+ @" [2 N) Q
# r: `8 j6 j( `
; i' x8 j4 F* k4 C9 J% M
0 u" w5 U- J: `( K
! F4 T2 X1 z6 T s0 u图2就是完整的工作过程,步骤5是猜的。要知道真正的做法恐怕只有问了微软才知道J。 ( n3 C4 K5 t; H
# }' u, q3 ^2 N4 j
& Y, v. B/ j% s9 E8 ~+ K# h8 H9 y
. N4 R- I% u* r' `Peter ; |! n ?, W' h& f
|