peterhu 发表于 2009-4-18 10:15:03

[原创]我所知道的EC====>Brightness

我所知道的EC====>Brightness

1.LCD Brightness



使用NB大家都会发现NB有一个亮度变化的功能,按下Fn+F4、F5,NB的亮度会随着变化。有些NB在AC插拔的时候也会有一个亮度变化,安装了Vista以后就更夸张了,可以设置不同的power theme。AC插拔变化多少阶在不同的power theme下的亮度阶数也都可以定制了。是不是很神奇?告诉你这一切最终都要通过EC去实现(因为NB上panel的亮度是由EC输出的DA或者PWM控制的)。


2.Brightness Table

Brightness Table是由power team提供的,EC将该table写到代码中在亮度变化时EC会索引该亮度值,把它转成DA或者PWM输出到LVDS,驱动亮度变化。

3.Fn+F4&F5

Fn+F4会暗一阶,Fn+F5会亮一阶。它们是如何实现的呢?听我慢慢道来J,NB的keyboard是内置的,而且Fn+F4、F5这些按键的Matrix Value是OEM可定制的。这样EC就可以Hook这两个按键去做些动作。EC在Hook到Fn+F4后,EC会先送scan code出去,然后判断当前工作是否ACPI mode,如果是非ACPI mode,EC通过DA或者PWN调整亮度并更新亮度的index。否则EC送QEVENT给System BIOS(至于什么是QEVENT,后续会详述),那么System BIOS收到后会干嘛呢?让我们来看看sample code:

   
1.
   Method(_Q**)
2.
      {
3.
            if (\_OSI("Windows vista"))                                    
4.
            {
5.
                  Notify(\_SB.LCD,**)
6.
            }
7.
      else
8.
      {                                                      
9.
                  if(LNotEqual(BRLV,0))
10.
                {            
11.
                   Store(BRLV, Local0)         
12.
                   Decrement(Local0)            
13.
                   Store(Local0, BRLV)         
14.
               }                                    
15.
      }
16.
      }

如果OS是vista那么通知driver,那么driver会做什么动作呢?不知道L,可是有一点可以肯定的是,driver最终会调用Method(_BCM,1),_BCM中它会发命令给EC调整亮度(有事实为证,我专门实验过)。XP,2K呢?代码很简单,大意就是看当前的亮度值如果非0,就降一阶送给EC,EC就会根据该值调整亮度。Fn+F5和Fn+F4差不多,稍有差异。



4.Auto Dim

Vista下的Auto Dim如下图所示,它的power scheme可以定义AC插拔的亮度策略。


那么AC插拔的时候Vista怎么做到定制亮度策略的呢?原因是AC插拔时EC会发标准scancode “0xEO 0x71”,“0xE0 0x72”vista收到以后最终会根据保存的power scheme的值调用ACPI Method(_BCM,1),而该方法最终又回去发命令给EC调整亮度。Sample code :

1.
Method(_BCM,1)   
2.
{            
3.
               
4.
   if(LEqual(Arg0,20))
5.
   {                  
6.
         Store(0x0, Local0)
7.
   }
8.
      
9.
   if(LEqual(Arg0,30)
10.
   {
11.
      Store(0x1, Local0)
12.
      }
13.
      ...
14.
      Store(local0, LCBF)
15.
}



Peter

jxlzs 发表于 2011-5-16 16:08:10

ok

ok:lol

bobdeg2007 发表于 2012-1-4 23:55:43

学习了。谢谢!
页: [1]
查看完整版本: [原创]我所知道的EC====>Brightness