tmacyunn 发表于 2011-10-5 13:24

比较完美的亮度驱动 ACPI Backlight Driver (更新: V1.2)

本帖最后由 tmacyunn 于 2011-10-22 20:17 编辑

原址:http://www.insanelymac.com/forum/index.php?showtopic=268219&st=0
更新:
New version 1.1:
Added : look at power supply status at start up
Code correction : more checks on pointers and function return
适用类型:此驱动适用于显示器亮度由ACPI控制的笔记本,在dsdt有以下的控制方法,如:_DOS _BCL _BCM _BQC

我的此部分代码是在\_SB.PCI0.PEGP.VGA.LCD下面,如:/* 切勿直接拷贝粘贴此部分代码,用自己的dsdt里面的才可以。*/
                   Method (_DOS, 1, NotSerialized)
                  {
                        Store (And (Arg0, 0x03), SWIT)
                  }
                  Method (_BCL, 0, NotSerialized)
                        {
                            Return (Package (0x0D)
                            {
                              0x46,
                              0x28,
                              Zero,
                              0x0A,
                              0x14,
                              0x1E,
                              0x28,
                              0x32,
                              0x3C,
                              0x46,
                              0x50,
                              0x5A,
                              0x64
                            })
                        }
                        Method (_BCM, 1, NotSerialized)
                        {
                            Divide (Arg0, 0x0A, Local0, Local1)
                            Store (Local1, ^^^^LPCB.EC.BRTS)
                        }
                        Method (_BQC, 0, NotSerialized)
                        {
                            Multiply (^^^^LPCB.EC.BRTS, 0x0A, Local0)
                            Return (Local0)
                        }优点:
   1,可以保存亮度值,重启后不会自动最大亮度值。
   2,在不使用电脑或者卸下电源时会开启Auto dim,即时显示器自动变暗。
   3,可以在SL(之前版本没测试如果没有升级的可以试试) 10.6.7 10.6.8 and Lion 10.7.0 10.7.1下正常使用。

安装要求及方法:
   1,确保你的电脑加载了AppleBacklightDisplay.kext。(可以用命令或者kext wizard 查看)
   2,在dsdt中的显卡部分加入如下代码(如果已经有_DSM的可以直接复制”Store (Package ()“下的部分代码):
               Method (_DSM, 4, NotSerialized)
                {
                  Store (Package ()
                        {
                        "AAPL,HasPanel",
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        },

                        "AAPL,Haslid",
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        },

                        "AAPL,backlight-control",
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        },
                                                
                        "@0,backlight-control",
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        },

                         "@0,AAPL,boot-display",
                        Buffer (0x04)
                        {
                            0x01, 0x00, 0x00, 0x00
                        },
                                                
                        "@0,built-in",
                        Buffer ()
                        {
                            One
                        }      
                  }, Local0)
                  DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
3,在\_SB scope下面加入PNLF Device,如:Scope (\_SB)
{
    //省去
    Device (PNLF)
    {
      Name (_HID, EisaId ("APP0002"))
      Name (_CID, "backlight")
      Name (_UID, 0x0A)
      Name (_STA, 0x0B)
    }
    //省去
}4,安装附件的kext,用kext wizard 或其他的工具。

   最后如果顺利的话在内核日志会看到以下日志:ACPIBacklightPanel: Found Backlight Device: LCDD
ACPIBacklightPanel: ACPI Method _DOS found. Device path: _SB.PCI0.IXVE.IGPU
ACPIBacklightPanel: ACPI Methods _BCL _BCM _BQC found. Device path: _SB.PCI0.IXVE.IGPU.LCDD
ACPIBacklightPanel: Version 1.0如果你没看到,那么修改你的dsdt下的显卡代码。            

   送上附件 :   
kext:
源代码:   

一点发现:
      关于亮度值的保存问题,我的亮度值有10档,如果我在滑块那里选择第8档或低于8档的,重启后滑块的位置没有变化,亮度值是一样的。但是如果我用滑块设置的值大于了8,然后重启。滑块会自动滚到最大值,但是真实的亮度值是没有变的。我的机型设置了macbook3,1,在查看macbook3,1的IO发现它只有8个档亮度,这也可以解释了为什么设置超过8档那个值会变到最大,所以大家在使用的,注意下机型的差异。驱动本身没问题。

masterfoxzone 发表于 2011-10-5 13:47

台式机能用不?

TOXOMO 发表于 2011-10-5 13:50

没戏,一直都是appledisplay{:9_382:}

oroge 发表于 2011-10-5 13:51

masterfoxzone 发表于 2011-10-5 13:47 static/image/common/back.gif
台式机能用不?

当然不能用了

你见过哪台台式机可以用ACPI调整显示屏亮度?

或者说你在Windows下都不能通过系统来调整显示屏亮度,Mac下就更不要指望了

oroge 发表于 2011-10-5 13:52

TOXOMO 发表于 2011-10-5 13:50 static/image/common/back.gif
没戏,一直都是appledisplay

你有AppleDisplay{:9_368:}

TOXOMO 发表于 2011-10-5 13:54

oroge 发表于 2011-10-5 13:52 static/image/common/back.gif
你有AppleDisplay

appledisplay人人都有吧
缼的是applebacklightdisplay{:9_380:}

RealGold 发表于 2011-10-5 13:57

在新的DSDT上試試!謝謝了,

oroge 发表于 2011-10-5 14:00

本帖最后由 oroge 于 2011-10-5 14:01 编辑

TOXOMO 发表于 2011-10-5 13:54 static/image/common/back.gif
appledisplay人人都有吧
缼的是applebacklightdisplay
.....
我以为你说的是Apple显示屏{:7_432:}打住打住,在这里歪楼太不给作者面子了{:9_356:}

siriusalive 发表于 2011-10-5 14:11

楼主,我没有applebacklightdisplay这个驱动啊

TOXOMO 发表于 2011-10-5 14:15

siriusalive 发表于 2011-10-5 14:11 static/image/common/back.gif
楼主,我没有applebacklightdisplay这个驱动啊

这不是驱动,打开ioregistryexplorer,搜索display0,
看下面显示的是appledisplay,还是applebacklightdisplay{:9_382:}

siriusalive 发表于 2011-10-5 14:21

TOXOMO 发表于 2011-10-5 14:15 static/image/common/back.gif
这不是驱动,打开ioregistryexplorer,搜索display0,
看下面显示的是appledisplay,还是applebacklight ...

悲剧啊,是appledisplay是不是就没戏了呢 - -

tmacyunn 发表于 2011-10-5 14:24

TOXOMO 发表于 2011-10-5 14:15 static/image/common/back.gif
这不是驱动,打开ioregistryexplorer,搜索display0,
看下面显示的是appledisplay,还是applebacklight ...

查看那个kext加载与否可以用这个命令查看:kextstat | grep Backlight有返回值表明加载。

TOXOMO 发表于 2011-10-5 14:24

N卡应该不太容易悲剧吧
在dsdt中放入楼主的第二段代码,这个的作用就是加载applebacklightdisplay的{:9_380:}

siriusalive 发表于 2011-10-5 14:26

tmacyunn 发表于 2011-10-5 14:24 static/image/common/back.gif
查看那个kext加载与否可以用这个命令查看:有返回值表明加载。

我的没有返回值。。。要肿么办呢?

sekikaga 发表于 2011-10-5 14:27

nice 3x{:5_284:}

tmacyunn 发表于 2011-10-5 14:35

siriusalive 发表于 2011-10-5 14:26 static/image/common/back.gif
我的没有返回值。。。要肿么办呢?

你可以先试试把代码和kext都装上,看看。我发现有时候不加载那个kext也是可以的。

allok2003 发表于 2011-10-5 14:36

謝謝但是看不懂

siriusalive 发表于 2011-10-5 15:53

tmacyunn 发表于 2011-10-5 14:35 static/image/common/back.gif
你可以先试试把代码和kext都装上,看看。我发现有时候不加载那个kext也是可以的。

我将楼主提供的代码加入了dsdt中,装了驱动到S/L/E,还是不能实现电池屏幕变暗。
有个问题请教楼主,\_SB.PCI0.PEGP.VGA.LCD下的控制方法是不是只要楼主提供的以前的都删掉呢
比如我在\_SB.PCI0.PEGP.VGA.LCD下面原来 没有_DOS 有_BCL _BCM _BQC
原来 还有_ADR _DCS _DGS _DSS,这些需不需要删除呢?这是我改过之后的,不知道对不对,楼主有时间的话能帮看下嘛?


siriusalive 发表于 2011-10-5 15:55

内核日志已经有楼主提到的那段文字了

xiaobangdelei 发表于 2011-10-5 16:14

本帖最后由 xiaobangdelei 于 2011-10-5 16:30 编辑

看来和以前那个亮度调节是不同的,以前可以调亮度的也需要重新修改dsdt!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 比较完美的亮度驱动 ACPI Backlight Driver (更新: V1.2)