i just wanted to share my experience and solution for Intel GMA950 (Notebook: Lenovo Thinkpad R60).
Although I'm talking about Hardware that is quite old now (TP R60 is from 2007), the information may help some others.
First of all my system specs:
Lenovo Thinkpad R60
Core 2 Duo T5500 @1,66 Ghz
4 GB RAM (3 usable due to chipset limit)
Intel GMA950 w. 64 MB VRAM
Mac OS X Lion 10.7.3
GMA950 kext plist-patched (27A2) & Intel Framebuffer kext older Version (7.0.45)
I didn't have problems with backlight after sleep (was working).
Brightness slider & scroll lock / pause keys were also working properly (with a simple device pelf) inside the DSDT.
The only problem was the brightness control not working properly after sleep (display much too bright, fn-keys working, but brightness only 4 steps after sleep and these steps too small).
After trying a lot with dsdt and _bcm _bcl _bqc methods, i simply searched the web for the backlight register of the gma950.
Success: the register is at offset 0x00061254
To write to the register, you have to find your VGA's BAR0:
lspci -vv -> look for "Region 0"
"Region 0" in my case: 0xEE100000
Take Calculator (Hex-Mode), add 0x00061254 + 0xEE100000: voila, our address to write is 0xEE161254.
This address is NOT accessible in PCI-Memory, it must be accessed per physical memory.
And now the interesting thing:
Like i said, after sleep the brightness was always too high & couldn't be controlled anymore.
Take reggie_se as root and write some value to the address:
sudo /usr/bin/reggie_se -D PhysAddr -w 0x59be266c -a 0xEE161254 -B 32
And now: the brightness slider is working again! Working correctly, like on a fresh boot :-)
To get the correct values use the brightness slider and after every step do:
sudo /usr/bin/reggie_se -D PhysAddr -r -a 0xEE161254 -B 32
Or run Reggie SE.app and watch the register there (to see the PCI-Tab in Reggie SE i had to start it with sudo from the command line)
So this shows that somehow OS X (on standby) loses the correct table of values (defined in method _bcl) and is writing wrong value to the register.
If you correct that with the reggie_se command, the system gains control back.
Btw: i have method _wak with a write to the register (store 0x59be266c LEVL) - but it doesn't work.
I guess the method _wak isn't executed or fails on another reason.
The same write from dsdt works on boot (i put it in method _ini inside device PCI0).
So i decided do just put the reggie_se command in a shell script & execute it on wakeup (sleepwatcher: .wakeup file).
This brings the brightness control back working.
To restore to the same value as before sleep, i let my script write the current value to a file (/tmp/blvalue) and after sleep i read this value and write back to the register.
I do NOT use ACPIBacklight.kext, it isn't necessary on my system.
Hope this helps someone.