|
我所知道的EC====>LID ! J# j3 `* G0 [% {! R
$ ^3 t0 v; A4 r5 ~. U/ }1 G) m1.What’s lid?
& y4 X2 } o% L7 `9 c, o% t- C! [4 P. D1 {2 X6 g2 \
Lid是盖子的意思,在NB上其实就是指Panel打开和关闭的过程。不知道有没有人试过用磁石去碰NB的底边缘,试过就会发现一碰NB就会进S3、S4当然也可能什么动作都没有(取决于OS的配置)。其实这部分是因为大多NB都是通过一颗magnet switch IC控制lid。Lid有两种状态Open和Close HW的线路通常还会将它们用作背光的始能信号。
$ D; q( \( g% ^0 s/ H+ E/ l! `' i0 i# B- I: S8 D# H* S
9 F$ H- t9 T. i- j6 O2.Lid Open
- s; s/ P4 l3 G% n \7 N" S4 _
" z& J' T: R; J2 oLid 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的状态。
# L: l4 ?* [) r, I9 D3.Lid Close - m9 A9 K; s2 o4 n& N
/ x `' Q* c+ {8 @$ W
Lid Close指的是合盖,EC处理的过程和Lid Open基本一致,区别之处在于EC记录 Lid的状态有变化。另外在OS下有一个选项可以设置Lid Close时OS可以进行的动作。如下图所示: 1 m8 Y5 n( p5 e5 @$ T
* G9 p1 a/ i5 G* C2 R6 K
4 c$ `# E D l* w' |. Z$ m& m9 Z" V$ f; h) z0 P1 G$ e
# ~: K2 _& Y# f$ |- c3 H
+ c6 Y4 ~2 C1 f5 U# M! f如上图1所示close lid可以选择的action有三种
3 O5 }* @0 x/ b b
8 d& [# C" _7 f p" H* k; B1. Do nothing
) x0 y: Z& b; b. C! B" d ~2. Stand by ; R e4 k( p1 l" y7 S5 @- v( I
3. Hibernate - q! V! Y5 `8 ]1 y
这些功能是怎么实现的呢?完整的流程如下图所示: " }4 `$ ~7 f& R8 j: @' o
; b" ^- z5 C% j8 y8 L9 u) u3 l7 h
: R; T0 c- T4 J* d9 L3 M4 Y
5 B2 ?& R) s; G, c& K( t
" U- y+ X6 j6 V& Y
& V$ @$ |3 C; k图2就是完整的工作过程,步骤5是猜的。要知道真正的做法恐怕只有问了微软才知道J。 $ g8 E+ t$ o9 G/ K7 c
6 y% Q8 X! E0 `( _" p! l1 P3 M4 @
. X- A& T: y0 R2 T& B+ O- {4 q" h/ T3 T' A
Peter
% ^3 d+ P, Y5 A% W0 _ |