Hi hotKoffy, thank you for your brilliant work!!
I had edited my dsdt and tried your 1.2 kext out on my notebook Asus L50VN. Before the kext installation, its backlight levels can only be adjusted at the Chameleon greeting screen stage. The same settings can be kept exactly to the next boot-up, despite the disability of being changed dynamically in the OS X. After the kext installation, the backlight adjustment buttons on my Apple wireless keyboard really worked fine!! Both the AC/BAT start-up backlight levels can all be kept to the correct preset 0x08 in the dsdt. Everything seemed fine except one little problem: the backlight intensity did not change actually...
I checked the logs and the following errors can be found:
Nov 23 13:28:58.000 kernel: ACPIBacklightPanel: Found Backlight Device: LCDD
Nov 23 13:28:58.000 kernel: ACPIBacklightPanel: ACPI Method _DOS found. Device path: _SB.PCI0.PEGP.GFX0
Nov 23 13:28:58.000 kernel: ACPIBacklightPanel: ACPI Methods _BCL _BCM _BQC found. Device path: _SB.PCI0.PEGP.GFX0.LCDD
Nov 23 13:28:58.000 kernel: ACPIBacklightPanel: getIndexForLevel(-250) not found in _BCL table !
Nov 23 13:28:58.000 kernel: ACPIBacklightPanel: Version 1.2
Here is my dsdt GFX0 and PNLF sections:
Device (GFX0)
{
Name (_ADR, Zero)
OperationRegion (VSID, PCI_Config, Zero, 0x04)
Field (VSID, ByteAcc, NoLock, Preserve)
{
REG0, 32
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x34)
{
"@0,AAPL,boot-display",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"@0,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@0,device_type",
Buffer (0x08)
{
"display"
},
"@0,name",
Buffer (0x0F)
{
"NVDA,Display-A"
},
"@0,backlight-control",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"@0,built-in",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"@0,display-cfg",
Buffer (0x04)
{
0x03, 0x01, 0x00, 0x00
},
"@1,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@1,device_type",
Buffer (0x08)
{
"display"
},
"@1,name",
Buffer (0x0F)
{
"NVDA,Display-B"
},
"@1,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@1,display-cfg",
Buffer (0x04)
{
0xFF, 0xFF, 0x00, 0x01
},
"AAPL,slot-name",
Buffer (0x08)
{
"PCI x16"
},
"NVPM",
Buffer (0x1C)
{
/* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0018 */ 0x00, 0x00, 0x00, 0x00
},
"NVCAP",
Buffer (0x18)
{
/* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
/* 0008 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},
"device-id",
Buffer (0x04)
{
0x40, 0x06, 0x00, 0x00
},
"VRAM,totalsize",
Buffer (0x04)
{
0x00, 0x00, 0x00, 0x40
},
"device_type",
Buffer (0x0C)
{
"NVDA,Parent"
},
"model",
Buffer (0x17)
{
"nVidia GeForce 9650 GT"
},
"rom-revision",
Buffer (0x25)
{
"nVidia GeForce 9650 GT OpenGL Engine"
},
"AAPL,HasLid",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"AAPL,aux-power-connected",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"AAPL,backlight-control",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"AAPL,BacklightRestore",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"AAPL,HasPanel",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Device (HDAU)
{
Name (_ADR, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Method (PRST, 0, NotSerialized)
{
If (LEqual (REG0, Ones))
{
Return (Zero)
}
Else
{
Return (One)
}
}
Name (UPDN, One)
Name (NXTD, One)
Name (LCDM, One)
Name (CRTM, 0x02)
Name (TVOM, 0x04)
Name (HDMM, 0x08)
Name (DVIM, 0x10)
Name (DONE, Zero)
Name (DOSF, One)
Name (BRNC, Zero)
Method (_INI, 0, NotSerialized)
{
GETD ()
}
Method (_DOS, 1, NotSerialized)
{
And (Arg0, 0x03, DOSF)
Store (ShiftRight (Arg0, 0x02), BRNC)
And (BRNC, One, BRNC)
}
Name (DODP, Package (0x03)
{
0x00010100,
0x00010110,
0x0220
})
Method (_DOD, 0, NotSerialized)
{
If (LEqual (VGAF, 0x02)) {}
Else
{
Store (0x0120, Index (DODP, 0x02))
}
Return (DODP)
}
Device (CRTD)
{
Name (_ADR, 0x0100)
Method (_DCS, 0, NotSerialized)
{
Store (AVLD, Local0)
If (Local0)
{
If (And (Local0, CRTM))
{
Return (0x1F)
}
}
Return (0x1D)
}
Method (_DGS, 0, NotSerialized)
{
And (NXTD, CRTM, Local0)
If (Local0)
{
Return (One)
}
Return (Zero)
}
Method (_DSS, 1, NotSerialized)
{
If (And (Arg0, 0x40000000))
{
If (And (Arg0, 0x80000000))
{
Store (One, DONE)
}
}
}
}
Device (DVID)
{
Method (_ADR, 0, NotSerialized)
{
If (LEqual (VGAF, 0x02))
{
Return (0x0210)
}
Else
{
Return (0x0120)
}
}
Method (_DCS, 0, NotSerialized)
{
Store (AVLD, Local0)
If (Local0)
{
If (And (Local0, DVIM))
{
Return (0x1F)
}
}
Return (0x1D)
}
Method (_DGS, 0, NotSerialized)
{
And (NXTD, DVIM, Local0)
If (Local0)
{
Return (One)
}
Return (Zero)
}
Method (_DSS, 1, NotSerialized)
{
If (And (Arg0, 0x40000000))
{
If (And (Arg0, 0x80000000))
{
Store (One, DONE)
}
}
}
}
Device (HDMI)
{
Method (_ADR, 0, NotSerialized)
{
If (LEqual (VGAF, 0x02))
{
Return (0x0220)
}
Else
{
Return (0x0120)
}
}
Method (_DCS, 0, NotSerialized)
{
Store (AVLD, Local0)
If (Local0)
{
If (And (Local0, HDMM))
{
Return (0x1F)
}
}
Return (0x1D)
}
Method (_DGS, 0, NotSerialized)
{
And (NXTD, HDMM, Local0)
If (Local0)
{
Return (One)
}
Return (Zero)
}
Method (_DSS, 1, NotSerialized)
{
If (And (Arg0, 0x40000000))
{
If (And (Arg0, 0x80000000))
{
Store (One, DONE)
}
}
}
}
Device (LCDD)
{
Name (_ADR, 0x0110)
Method (_DCS, 0, NotSerialized)
{
Store (AVLD, Local0)
If (Local0)
{
If (And (Local0, LCDM))
{
Return (0x1F)
}
}
Return (0x1D)
}
Method (_DGS, 0, NotSerialized)
{
And (NXTD, LCDM, Local0)
If (Local0)
{
Return (One)
}
Return (Zero)
}
Method (_DSS, 1, NotSerialized)
{
If (And (Arg0, 0x40000000))
{
If (And (Arg0, 0x80000000))
{
Store (One, DONE)
}
}
}
Method (_BCL, 0, NotSerialized)
{
Return (Package (0x12)
{
0x08,
0x08,
Zero,
One,
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08,
0x09,
0x0A,
0x0B,
0x0C,
0x0D,
0x0E,
0x0F
})
}
Name (BCBH, Zero)
Method (_BCM, 1, NotSerialized)
{
If (LGreaterEqual (OSFG, OSVT))
{
Store (Arg0, LBTN)
^^^^LPCB.EC.STBR ()
If (ATKP)
{
If (LEqual (BCBH, One))
{
Notify (ATKD, Add (LBTN, 0x10))
}
If (LEqual (BCBH, 0x02))
{
Notify (ATKD, Add (LBTN, 0x20))
}
}
Store (Zero, BCBH)
}
}
Method (_BQC, 0, NotSerialized)
{
Return (LBTN)
}
}
Method (SWHD, 1, Serialized)
{
Store (One, UPDN)
If (LEqual (DOSF, One))
{
Store (Arg0, SETD)
ISMI (0x94)
}
Else
{
Store (Zero, DONE)
Notify (GFX0, 0x80)
Store (0x01F4, Local0)
While (Local0)
{
If (DONE)
{
Store (Zero, Local0)
}
Else
{
Sleep (0x0A)
Decrement (Local0)
}
}
}
}
Method (GETD, 0, NotSerialized)
{
ISMI (0x95)
Return (ACTD)
}
Method (ADVD, 0, NotSerialized)
{
If (UPDN)
{
GETD ()
Store (ACTD, SETD)
Store (Zero, UPDN)
}
ISMI (0xA0)
Store (SETD, NXTD)
Return (SETD)
}
Method (NATK, 0, NotSerialized)
{
Return (One)
}
Method (UPBL, 0, NotSerialized)
{
Notify (LCDD, 0x86)
}
Method (DWBL, 0, NotSerialized)
{
Notify (LCDD, 0x87)
}
}
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
Can you tell me how to fix it? Thank you very much!!
Best regards
Leon
My ioreg: