View Full Version : Various DSDT mods.
pentiumpc
01-19-2009, 06:09 AM
There are many threads on installing OS X with DSDT override, if you do that you can mod it to fix and activate some features.
Things you can do/fix.
1. Activate the PWRB - Power button.
2. fix the blank display on System Wake.
3. Activate Clamshell sleep with Clamshell.kext. (superhai depreciating it)
4. Activate the ASUS Hotkeys.
Unconfirmed fix.
1. USB sleep issue. (works on my 1000H but not on my DS3L.)
that is generally what I found out last weekend, if you have more to share please feel free to chip in.
All these tested working on my systems, you will have to try if you don't have the same specs as me.
You can use this finds as a reference for your own fix.
pentiumpc
01-19-2009, 06:18 AM
change _HID to _CID
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C"))
Name (_UID, 0xAA)
Name (_STA, 0x0B)
}
This one I got it off some site, cannot remember where. (credit goes to him/her)
This will activate your power button to bring up the shutdown menu.
http://www.infinitemac.com/attachment.php?attachmentid=148&stc=1&d=1232342192
pentiumpc
01-19-2009, 06:38 AM
On the 1000H, the screen is blank on wake, you will need to press the brightness key to turn it on. Current fix is to use Sleep watcher and Reggie to write direct to turn it on.
By modding the DSDT to set brightness, you can fix this issue.
Method (WAK, 1, NotSerialized) //WAKE up
{
\_SB.PCI0.SBRG.EC0.EC0W (Arg0)
\_SB.PCI0.NWAK (Arg0)
\_SB.PCI0.SBRG.SWAK (Arg0)
LPWK (Arg0)
Store(\_SB.ATKD.PBLG(),local0) //---> Get Brightness level from NVS
\_SB.ATKD.PBLS(local0) //---> Set Brightness level.
}
Add the 2 red lines to reset the brightness on wake.
Your Method name might be different on your system, look for something similar.
you also need to find out which method to get and set brightness.
can be used for some other issue.
pentiumpc
01-19-2009, 06:53 AM
Most portable system don't sleep on closing the LID, I tried to find a DSDT fix for it but cannot find it. (google is my best friend.) so I wrote 1 to fix my own.
If you have a better or alternative method, please let me know. Thanks.
Device (LID0)
{
Name (_HID, EisaId ("PNP0C0D")) //LID detection
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
Name (LIDS, One)
Method (_LID, 0, NotSerialized)
{
Store (^^PCI0.SBRG.EC0.SF13, LIDS) //LID register
XOr (LIDS, One, Local0)
IF (Local0) //if LID is closed
{
Notify (SLPB, 0x80) //Set system to sleep
}
Return (LIDS)
}
LID device should be easy to find, just need to add a line to notify the system to sleep.
On most system, (I think) depends on the OS to set the system to sleep bit OS X don't understand the notification sent by the LID device, so I did it in the hardware instead.
pentiumpc
01-19-2009, 07:18 AM
if you look at your IOreg tree and you can see "ASUS010" or "ATKD" that mean you have a Asus hotkey device, you FN+Fx buttons will work.
you will have to find out what keys send what ACPI notifications, I made a KEXt to log and analyze the Notification code, then I look at the _GPE scope to find the corresponding interrupt. once all that is mapped out, I added codes to to toggle functions to turn on and off.
now I can turn on and off , Backlight, WIFI, Bluetooth, Card reader, Webcam, adjust brightness etc. Still figuring out some functions, key switching to ext monitor, setting FSB etc.
Sample code..
Method (CAMS, 1, Serialized) //Camera Set
{
Return (OCMS (Arg0))
}
Method (CAMR, 0, Serialized) //Camera toggle : added
{
Store (OCMG (), Local0)
XOr (Local0, One, Local0)
Return (OCMS (Local0))
}
Method (CAMG, 0, Serialized) //Camera Set
{
Return (OCMG ())
}
The code above is very tell tale, it is for switching the Camera on and off.
Method (_Q2A, 0, NotSerialized) //Camera
{
^^^^ATKD.CAMR() //Toggle Camera
ATKN (0x1D) //notify ATKD
}
the interrupt handler to service the event.
pentiumpc
01-19-2009, 07:28 AM
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (_CID, EisaId ("PNP0C01"))
Name (CRS, ResourceTemplate ()
{
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y03)
})
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Giving the HPET status a 0x0F seems to fix my USB sleep issue, loosing USB after sleep and no Hot plug on USB ports.
This is not verified, as I did not try to reproduce the problem, not on my piriority list, but my system run 10.5.6 vanilla, with Decrypter, AnV SMBIOS, PS2nub and Controller and openhalt.
No IOUSB fixes. ( it crash my system.)
Update -- this is fixed by DSDT Patcher with -newHPET option. no need Disabler after the patch.
Slither2008
03-03-2009, 04:29 AM
Hi pentiumpc,
I've been looking through my Asus EeePC 1000H dsdt.aml and am trying to understand the _SB methods better.
Does this sound right ?
Method - Description
PBL (S/G) = BackLight
CAM (S/G) = Camera
CRD (S/G)= Card Reader
WLD (S/G) = Wireless Lan Set / Get
CFV (S/G) = FSB Speed & Voltage Set / Get
CAM (S/G) = Camera Set / Get
BTH (S/G) = BlueTooth Set / Get
SDSP = Switch/Swap Display
CRD (S/G) = Card Reader Set / Get
HDPS = ???
PBP (S/G) =
M3G (S/G) = Mobile 3G
HWCF = ??
GNVS = Get Volume (I'm sure this is wrong. Probably gets and sets memory references???)
SNVS = Set Volume (I'm sure this is wrong. Probably gets and sets memory references???)
I've managed to get the Camera, Bluetooth to turn of using the spare Fn key (0x1d). I tried to get the wifi working but I noticed the method call is a little more complex than a simple ATKN(value).
It appears to have some logic in it to determine which value to pass 0x11 or 0x10. I can only get it to turn off and then it will not turn on (my logic is missing probably).
I can also confirm that the Asus Test kext you made registers all buttons correctly except the Wifi Off Fn key says something about an unmapped method and then I get messages about either the Bluetooth of Wifi failing to go into powersave state. As soon as I press the Wifi Fn key again the messages stop.
What are your thoughts on this?
Regards,
Steve.
Slither2008
03-03-2009, 04:36 AM
Here are a copy of the event codes I'm going off.
# Silver buttons
KEY_SILVER1="0000001a" # Blank
KEY_SILVER2="0000001b" # Change resolution
KEY_SILVER3="0000001c" # User 1
KEY_SILVER4="0000001d" # User 2
# Fn+F? combination
KEY_Fn_F1="00000080" # Sleep
KEY_Fn_F2=("00000010" "00000011") # Wifi toggle
KEY_Fn_F5="0000002*" # Brightness down
KEY_Fn_F6="0000002*" # Brightness up
KEY_Fn_F7="00000016" # Backlight off
KEY_Fn_F8=("00000030" "00000031" "00000032") # XRandR
KEY_Fn_F9="00000012" # Task Manager
KEY_Fn_F10="00000013" # Mute
KEY_Fn_F11="00000014" # Volume Down
KEY_Fn_F12="00000015" # Volume Up
# Other ACPI events
POWER_AC="00000001"
POWER_BAT="00000000"
If you wanted to try and make custom FN keys out of F3 and F4 I think acpi_listen in linux might be the best bet to get those codes.
I'm still trying to understand why the Volume keys functions aren't as easy to spot in the dsdt.
pentiumpc
03-03-2009, 02:24 PM
FN+F1 don't return any code.. notify SLPB 0x80 will put the system to sleep.
FN+F5,FN+F6 will return between 0x20 to 0x2F = 15 steps of brightness.
FN+F8 return the next display code, LCD, EXT VGA or both spanning.
AC power return 0x50
Batt return 0x51
most of these keys needs a driver to drive it.
I am swamped with my day job, thus have to stop development of the driver I am working on.
I have 1 on beta, feel free to try it.
ASUS hotkey enabler. (http://www.mediafire.com/download.php?4lnemnhjnzt)
this package consist of various solution to enable the hotkeys, removes the need for sleepwatcher, sets FN+F1 to deep sleep and lid to doze.
you can customize most of the Keys to run scripts by changing the values in the plist. have been using it for a while on my system, works reasonably well.
Please backup your "DSDT.aml" before you install it.
pentiumpc
03-03-2009, 02:35 PM
Method - Description
CFV (S/G) = FSB Speed & Voltage Set / Get
SDSP = Switch/Swap Display
HDPS = ???
PBP (S/G) =
HWCF = ??
GNVS = Get Volume (I'm sure this is wrong. Probably gets and sets memory references???)
SNVS = Set Volume (I'm sure this is wrong. Probably gets and sets memory references???)
.
CFV = Set FSB only.. nothing to do with Voltage.
HDP/PBP = set LCD, ext monitor or both. can set but need to refresh mac resolution to get to work. very messy.
HWCF unknown.
G/S NVS .. Get or set NVS =Non Volatile SRAM.. (BIOS I think)
BIOS method return the current bios ver.
INIT intialised the ATKD (must excute to get keycode returns)
Hope this helps..
IPIS is logging me out from my internet at home have not time to do it in the office,so can't post there. please help the repost my pkg there if you can.. thanks.
Slither2008
03-03-2009, 11:43 PM
Hi pentiumpc,
Thanks for the information and sharing your beta fn key driver.
I'll go and post some information/guide up on ipis about all this.
Regards,
Steve.
Slither2008
03-04-2009, 12:59 AM
Thread for applying your fixes :
http://ipis-osx.wikidot.com/forum/t-135417/enabling-function-keys-by-modifying-your-dsdt#post-403326
Thread for your exprimental kext :
http://ipis-osx.wikidot.com/forum/t-135405/experimental-asus-hotkey-enabler-kext-driver#post-403338
Slither2008
03-04-2009, 03:45 AM
Hi pentiumpc,
I'd be intersted in trying to offer my programing skills towards your kext.
Would you be willing to share your source for your experimental kext please?
Regards,
Steve.
Slither2008
03-05-2009, 12:35 PM
I've made up a skeleton kext that has a basic WorkLoop.
The kext inits, probes, finds and matches the ATKD device nub and then enters my start()
I'm having issues adding an IOInterruptEventSource.
I've declared it in the start() like so :
interruptSrc = IOInterruptEventSource::interruptEventSource(
(OSObject*)this,
OSMemberFunctionCast( IOInterruptEventAction,
this,
&com_ipis_driver_AsusFNKeys::interruptOccurred ),
(IOService*)provider,
(int)0);
I have a test in place to report an error if it's not added to the WorkLoop but as soon as I start up the kext I get KP.
I've tested that it is the interrupt event source causing the issue by removing the above code reducing the kext to a really bare template/skeleton and this allows the driver to load correctly.
If you could point me in the right direction I'd appreciate it.
Alexaar
04-13-2009, 11:15 AM
Hi! How the things going?
I want to make some more improvements to 1000H DSDT and need assistance.
The first question is about PS2 controller(doublepost on http://www.insanelymac.com/forum/index.php?showtopic=90505&st=1540&gopid=1131277&#entry1131277 ):
We all using the code
Device (PS2K)
{
Name (_HID, EisaId ("PNP0303"))
Name (_CID, 0x0B03D041)
Method (_STA, 0, NotSerialized)
{
ShiftLeft (One, 0x0A, Local0)
If (And (IOST, Local0))
{
Return (0x0F)
}
Return (Zero)
}
Name (_CRS, ResourceTemplate ()
{
IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
IRQNoFlags () {1}
})
}
Device (PS2M)
{
Name (_HID, EisaId ("SYN0A04"))
Name (_CID, Package (0x03)
{
0x000A2E4F,
0x02002E4F,
0x130FD041
})
Method (_STA, 0, NotSerialized)
{
ShiftLeft (One, 0x0C, Local0)
If (And (IOST, Local0))
{
Return (0x0F)
}
Return (Zero)
}
Name (_CRS, ResourceTemplate ()
{
IRQNoFlags () {12}
})
}
and it makes doubling in ioreg
http://www.insanelymac.com/forum/uploads/monthly_04_2009/post-342445-1239605847.jpg
and another info - log from open bsd booting
ichpcib0 at pci0 dev 31 function 0 "Intel 82801GBM LPC" rev 0x02: PM disabled
isa0 at ichpcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbc0: using irq 1 for kbd slot
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pmsi0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pmsi0 mux 0
This code works well, but its better to fix this doubling. Any ideas?
And the second question concern the Wakeup on clamshell open function. Any1 try to made it?
Alexaar
04-29-2009, 05:48 AM
Still no answers, very sad.
Meanwhile i'll make my own DSDT based on the fixes above and my own fixes. Now, my system works and sleeps perfect under 10.5.6. But, Fn key fixes still works buggy for me.
I'm still looking for more improvements for 1000H DSDT. For instance, i dreaming about clamshell wakeup. Any ideas?
Thireus
05-07-2009, 01:06 PM
Hi,
I would like to know where and how can I set the FSB to run these settings:
FSB=54
PCIE=176
That's to get a frequency of 1,9Mhz on my 1000h eeepc, and thus to overclock it the same way as I do under XP with eeectl.
Thanks a lot. :)
Thireus
05-12-2009, 06:08 PM
Someone here?
candykane
05-13-2009, 09:57 AM
got some stuff from insanely , but i think it would look nice in this collection
fixing sleep mode with the _WAK method
information about the _WAK method.
Arguments:
0 The value of the sleeping state (1 for S1, 2 for S2, and so on).
Result Code (2 DWORD package):
Status Bit field of defined conditions that occurred during sleep.
0x00000000 Wake was signaled and was successful
0x00000001 Wake was signaled but failed due to lack of power.
0x00000002 Wake was signaled but failed due to thermal condition.
Other Reserved
PSS If non-zero, the effective S-state the power supply really entered.
This value is used to detect when the targeted S-state was not entered
because of too much current being drawn from the power supply.
OK, so the _WAK method accepts one argument, which is the number of the sleep state that was requested. It returns its result as a package of 2 DWORDs. The first value is a code that tells whether the wake was successful (0 on success, nonzero on failure) and, if not, why. The second value is also zero on success and on failure returns the value of the sleep state that was actually entered. So basically, it's a success/failure code.
The first argument of the package declaration specifies the number of elements in the package, and the second is the package itself. So, the declaration above simply defines a two element package, where each of the elements is zero. This is necessary because the spec requires that the _WAK method return two values.
So, what this really boils down to is a dummy return value that satisfies the spec (thus eliminating the warnings), but doesn't really do anything. It just always returns a success condition.
Fixing sleep mode.
Look for: _WAK
CODE
Method (_WAK, 1, NotSerialized)
{
Store (0xFF, DBG1)
If (LEqual (Arg0, 0x03))
{
Store (0x8F, SCP)
}
If (LEqual (Arg0, 0x04))
{
If (LEqual (OSFL, Zero))
{
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
Else
{
Store (0x58, SMIP)
}
}
If (LEqual (OSFL, One))
{
Store (0x56, SMIP)
}
If (LEqual (OSFL, 0x02))
{
Store (0x57, SMIP)
}
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
}
If (LEqual (Arg0, One)) {}
If (OSFL)
{
Notify (\_SB.PWRB, 0x02)
}
Else
{
If (LEqual (RTCW, Zero))
{
Notify (\_SB.PWRB, 0x02)
}
}
Notify (\_SB.PCI0.USB0, Zero)
Notify (\_SB.PCI0.USB1, Zero)
Notify (\_SB.PCI0.USB2, Zero)
Notify (\_SB.PCI0.USB3, Zero)
Notify (\_SB.PCI0.USB4, Zero)
Notify (\_SB.PCI0.USB5, Zero)
Return(Package(0x02){0x00, 0x00}) <------ Add here. Edit dsdt_fixed.txt before compiling
}
candykane
05-13-2009, 11:55 AM
Backlight control
Another nice thing to add in your laptop DSDT: (Under _SB)
CODE
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
Might help you in loading the backlight control
Thireus
05-13-2009, 12:02 PM
Hum... none of you guys can reply to my question?
candykane
05-13-2009, 01:04 PM
Fixing sleep and usb after wake up
I finally fixed sleep on my lappie!
The problem was on USB....
The fix is simple, same as for WAK method:
If u look on DSDT under all USB entry u will see:
QUOTE
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0xYZ, 0xYZ))
}
Now search for Method (GPRW.... and change on the end that: Return (PRWP or whatever u have) to:
CODE
Return (Package (0x02)
{
Zero,
Zero
})
Still i have to use modded kexts for ehci/uhci w/o them my lappie still sleep fine but on wake I lose UHCI devices(BT and fingerprint sensor)
About EHCI kext fixed, I really hate those ownership debug message, dunno why most of the dev's like to add that crap debug on kexts, imo is easy to do 2 ver. normal/debug or to add a bolean in plist to enable/disable that feature...
L.E. Thanks a lot Slice for the edited versions of the kexts me and my system log are very happy
BTW I'm still waiting for some answers about those USB fixes, since your sources are not available dunno what really does your kexts, maybe we can add those fixes on DSDT, or at least we can try...
L.L.E Last night I forgot(tired) to tell about: Device (PWRB)...e.g PoWeRButton I noticed that is missing on my DSDT so I add it b/c on MB DSDT there are also other entry on USB devices that point to it.
So if you don't have it search for : Device (SLPB) and add it over/under it, should look like this:
CODE
Scope (_SB)
{
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C"))
}
Device (SLPB)
{
Name (_HID, EisaId ("PNP0C0E"))
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
}
}
Now search for Method (_Lxy....) you will see all USB devices there, then under each UHCI one add Notify (\_SB.PWRB, 0x02), as for EHCI entry I prted entire entry from MB, should look like this:
CODE
Scope (_GPE)
{
Method (_L03, 0, Serialized)
{
Notify (\_SB.PCI0.UHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L04, 0, Serialized)
{
Notify (\_SB.PCI0.UHC2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0C, 0, Serialized)
{
Notify (\_SB.PCI0.UHC3, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0E, 0, Serialized)
{
Notify (\_SB.PCI0.UHC4, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L05, 0, Serialized)
{
Notify (\_SB.PCI0.UHC5, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0D, 0, Serialized)
{
If (\_SB.PCI0.EHC1.PMES)
{
Store (0x01, \_SB.PCI0.EHC1.PMES)
Notify (\_SB.PCI0.EHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
If (\_SB.PCI0.EHC2.PMES)
{
Store (0x01, \_SB.PCI0.EHC2.PMES)
Notify (\_SB.PCI0.EHC2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
}
The entry on EHCI one seems to fix sleep on it so no more need for ehcisleepenabler, at least for me.
BTW if you have HDEF on those methods remove it, or it could broke your sleep!
Another tip, if you like as example to wake your notebook/desktop using mouse or keyboard, identify what USB port it use(from ioreg) and on DSDT change on that USB entry PWRB to SLPB
Enjoy!
candykane
05-13-2009, 01:06 PM
I just got my power button to show logout box when pressed:
CODE
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C"))
}
I just changed _HID to _CID.
candykane
05-13-2009, 01:13 PM
A guide on how to fix audio via dsdt
Audio should not be so complicated, having to use another extension to load information into the system makes no sense when most of you are already using a device-property string for graphics or using a modified DSDT so you may as well save resources.
HDAEnabler.kext and/or ALCinject.kext are not required to make audio work properly.
What is needed is AlainTox714's AppleHDA.kext and the following 3 peices of information:
layout-id
codec-id
PinConfigurations
You can do it through a device-property string or through DSDT (this can yield a better result).
I've tried both methods and they yielded working audio, but the DSDT solution seems to be more ACPI compliant.
You can make the PinConfigurations data if you have the ConfigData in the /System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist file.
(you only need the last bite from each segment)
<00a71c1f 00a71d40 00a71e21 00a71f02 00b71c40 00b71d90 00b71ea1 00b71f02 00c71c2e 00c71d30 00c71e81 00c71f01 00d71c10 00d71d40 00d71e11 00d71f01 00e71c20 00e71d90 00e71ea1 00e71f01 00f71c12 00f71d10 00f71e11 00f71f01 01071c11 01071d70 01071e11 01071f01 02171c50 02171d21 02171e45 02171f01>
Another solution is to search the codec file for lines that contain [Jack], take the hex values and reverse the order, order them by their node number.
CODE
Codec: SigmaTel STAC9274D
Address: 2
Vendor Id: 0x83847621
Subsystem Id: 0x80860419
Revision Id: 0x100201
Default PCM: rates 0x7e0, bits 0x0e, types 0x1
Default Amp-In caps: ofs=0x00, nsteps=0x0e, stepsize=0x05, mute=0
Default Amp-Out caps: ofs=0x7f, nsteps=0x7f, stepsize=0x02, mute=1
Node 0x0a [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x0221401f: [Jack] HP Out at Ext Front
Conn = 1/8, Color = Green
becomes 1f402101
00a71c1f 00a71d40 00a71e21 00a71f02
Node 0x0b [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x02a19040: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink
becomes 4090a102
00b71c40 00b71d90 00b71ea1 00b71f02
Node 0x0c [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x0181302e: [Jack] Line In at Ext Rear
Conn = 1/8, Color = Blue
becomes 2e308101
00c71c2e 00c71d30 00c71e81 00c71f01
Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01114010: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Green
becomes 10401101
00d71c10 00d71d40 00d71e11 00d71f01
Node 0x0e [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01a19020: [Jack] Mic at Ext Rear
Conn = 1/8, Color = Pink
becomes 2090a101
00e71c20 00e71d90 00e71ea1 00e71f01
Node 0x0f [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01111012: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Black
becomes 12101101
00f71c12 00f71d10 00f71e11 00f71f01
Node 0x10 [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01117011: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Yellow
becomes 11701101
01071c11 01071d70 01071e11 01071f01
Node 0x21 [Pin Complex] wcaps 0x400301: Stereo Digital
Pin Default 0x01452150: [Jack] SPDIF Out at Ext Rear
Conn = Optical, Color = Grey
becomes 50214501
02171c50 02171d21 02171e45 02171f01
Using the PinConfigurations data you can convert it for your device-property string XML file using the following command:
CODE
echo "1f4021014090a1022e308101104011012090a1011210110111 70110150214501" | xxd -r -p | openssl enc -base64
This gave me
CODE
H0AhAUCQoQIuMIEBEEARASCQoQESEBEBEXARAVAhRQE= for my BadAxe2 (STAC9274D)
Find the slot holding the audio hardware
CODE
gfxutil -f HDEF; # if that fails try AZAL in place of HDEF
For the BadAxe2 that gave me
CODE
DevicePath = PciRoot(0x0)/Pci(0x1b,0x0)
I added the following to my XML file and then regenerated my string using gfxutil: (gfxutil -s -v -n -i xml -o hex in.plist out.hex)
CODE
<key>PciRoot(0x0)/Pci(0x1b,0x0)</key>
<dict>
<key>PinConfigurations</key>
<data>
H0AhAUCQoQIuMIEBEEARASCQoQESEBEBEXARAVAhRQE=
</data>
<key>codec-id</key>
<string>0x83847683</string>
<key>layout-id</key>
<string>0x04000000</string>
</dict>
What would be nice is a script or program that gives you the PinConfigurations data by dropping the codec on it.
In the end I chose to do my BadAxe2 in DSDT only because I'm already doing so much in it that the few extra bytes didn't hurt and saved me loading another kext that isn't really needed.
You can achieve this if you meet the following criteria
you currently use HDAEnabler.kext or ALCinject.kext
you use AppleHDA.kext
you have (or can get) the three pieces of required information about your audio hardware and the modified AppleHDA.kext it needs
You can do it in a device-property string or in DSDT, the DSDT method is by far better, here's the PinConfigurations details for the BadAxe1 which uses the STAC9221D A2 (what I cam currently working on) so I can finish off my DSDT work and release the DSDT's or at least the relevant sections.
BadAxe1:
CODE
| | +-o HDEF@1B <class IOPCIDevice, registered, matched, active, busy 0, retain 8>
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0","IOPCIMessagedInterruptController")
| | | | "IOName" = "pci8086,27d8"
| | | | "subsystem-id" = <17040000>
| | | | "IODeviceMemory" = (({"address"=18446744073225109504,"length"=16384}))
| | | | "class-code" = <00030400>
| | | | "revision-id" = <01000000>
| | | | "assigned-addresses" = <10d8008200000000000020e30000000000400000>
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "name" = "pci8086,27d8"
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/HDEF@1b0000"
| | | | "subsystem-vendor-id" = <86800000>
| | | | "reg" = <00d800000000000000000000000000000000000010d8000200 00000000000000000000000040
000>
| | | | "compatible" = <"pci8086,417","pci8086,27d8","pciclass,040300">
| | | | "PinConfigurations" = <104021021010010120308101104001012190a1011160010130 214501>
| | | | "layout-id" = 2
| | | | "IOPCIExpressLinkCapabilities" = 0
| | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | "IOInterruptSpecifiers" = (<1600000007000000>,<0400000000000100>)
| | | | "device-id" = <d8270000>
| | | | "vendor-id" = <86800000>
| | | | "device_type" = <"STAC9221A2">
| | | | "codec-id" = 2206496387
| | | | "IOPCIExpressLinkStatus" = 0
| | | | }
BadAxe2:
CODE
| | +-o HDEF@1B <class IOPCIDevice, registered, matched, active, busy 0, retain 8>
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0","IOPCIMessagedInterruptController")
| | | | "IOName" = "pci8086,27d8"
| | | | "layout-id" = <04000000>
| | | | "subsystem-id" = <19040000>
| | | | "IOPCIExpressLinkCapabilities" = 0
| | | | "IODeviceMemory" = (({"address"=18446744073226158080,"length"=16384}))
| | | | "class-code" = <00030400>
| | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | "revision-id" = <01000000>
| | | | "IOInterruptSpecifiers" = (<1600000007000000>,<0200000000000100>)
| | | | "assigned-addresses" = <10d8008200000000000030e30000000000400000>
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "device-id" = <d8270000>
| | | | "vendor-id" = <86800000>
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/HDEF@1b0000"
| | | | "subsystem-vendor-id" = <86800000>
| | | | "name" = "pci8086,27d8"
| | | | "IOPCIExpressLinkStatus" = 0
| | | | "reg" = <00d800000000000000000000000000000000000010d8000200 00000000000000000000000040
000>
| | | | "compatible" = <"pci8086,419","pci8086,27d8","pciclass,040300">
| | | | "PinConfigurations" = <1f4021014090a1022e308101104011012090a1011210110111 70110150214501>
| | | | "codec-id" = 2206496289
| | | | }
You don't believe audio can work without HDAEnabler.kext or ALCinject.kext, do it as a device-property string or better, do it in DSDT.
candykane
05-13-2009, 01:14 PM
Here's the basic code, I provide two example sections of code, one for the BadAxe1 and the second for the BadAxe2, don't use both sections.
AUDIO IN DSDT:
CODE
__________________________________________________ ____________
// this goes near the beginning of your DSDT (right after Method (_WAK, 1, Serialized)
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
__________________________________________________ ____________
// change all occurrences of AZAL to HDEF
__________________________________________________ ____________
// example for BadAxe1 (with comments)
__________________________________________________ ____________
// this goes at end of Device (HDEF)
// BadAxe1 (D975XBXLKR)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"codec-id",
Buffer (0x04)
{
0x83, 0x76, 0x84, 0x83 // the hex codec ID (reverse order)
},
"layout-id",
Buffer (0x04)
{
0x02, 0x00, 0x00, 0x00 // the hex layout ID (reverse order)
},
"device_type",
Buffer (0x16) // the hex count + 1 for null terminated ascii string
{
"SigmaTel STAC9221D A2" // the string identifier
},
"PinConfigurations",
Buffer (0x1C) // the actual hex count
{
/* the PinConfigurations data as it appears.
/* 0000 */ 0x10, 0x40, 0x21, 0x02, 0x10, 0x10, 0x01, 0x01,
/* 0008 */ 0x20, 0x30, 0x81, 0x01, 0x10, 0x40, 0x01, 0x01,
/* 0010 */ 0x21, 0x90, 0xa1, 0x01, 0x11, 0x60, 0x01, 0x01,
/* 0018 */ 0x30, 0x21, 0x45, 0x01 /* one entry seems missing */
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
__________________________________________________ ____________
// example for BadAxe2
__________________________________________________ ____________
// this goes at end of Device (HDEF)
// BadAxe2 (D975XBX2KR)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"codec-id",
Buffer (0x04)
{
0x21, 0x76, 0x84, 0x83 // the hex codec ID (reverse order)
},
"layout-id",
Buffer (0x02)
{
0x04, 0x00, 0x00, 0x00 // the hex layout ID (reverse order)
},
"device_type",
Buffer (0x13)
{
"SigmaTel STAC9274D"
},
"PinConfigurations",
Buffer (0x20)
{
/* 0000 */ 0x1f, 0x40, 0x21, 0x02, 0x40, 0x90, 0xa1, 0x02,
/* 0008 */ 0x2e, 0x30, 0x81, 0x01, 0x10, 0x40, 0x11, 0x01,
/* 0010 */ 0x20, 0x90, 0xa1, 0x01, 0x12, 0x10, 0x11, 0x01,
/* 0018 */ 0x11, 0x70, 0x11, 0x01, 0x50, 0x21, 0x45, 0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
__________________________________________________ ____________
kizwan
06-01-2009, 04:09 AM
FN+F1 don't return any code.. notify SLPB 0x80 will put the system to sleep.
FN+F5,FN+F6 will return between 0x20 to 0x2F = 15 steps of brightness.
FN+F8 return the next display code, LCD, EXT VGA or both spanning.
AC power return 0x50
Batt return 0x51
most of these keys needs a driver to drive it.
I am swamped with my day job, thus have to stop development of the driver I am working on.
I have 1 on beta, feel free to try it.
ASUS hotkey enabler. (http://www.mediafire.com/download.php?4lnemnhjnzt)
this package consist of various solution to enable the hotkeys, removes the need for sleepwatcher, sets FN+F1 to deep sleep and lid to doze.
you can customize most of the Keys to run scripts by changing the values in the plist. have been using it for a while on my system, works reasonably well.
Please backup your "DSDT.aml" before you install it.
Hi pentiumpc,
I need your help. I want to enable a couple of hotkey in OS X. These hot keys require application called "launch manager" in windows & "acer-acpi" in linux to make it operational. It control (on/off) two critical devices; wireless card & bluetooth. Fortunately, wireless card automatically turned on when my laptop boot-up. Unfortunately bluetooth is not turned on making it is not recognized or working in OS X. I hope you can help me porting "acer-acpi" to OS X. I don't have experience in driver or kernel extensions programming but I'm a quick learner.
Thank you in advance. :D
kizwan
Hi pentiumpc,
I hope you can help me porting "acer-acpi" to OS X. I don't have experience in driver or kernel extensions programming but I'm a quick learner.
kizwan
Hi kizwan, nice to see you here instead of just insanelymac. I used to be there until my account got deleted when they changed the board over to the new system...
Re: acer_acpi. My son has an acer laptop-- IIRC, same as yours-- but its hard drive is dying so I can't test it now. Anyways, the best starting place (as pentiumpc found) is superhai's AMW0.kext. But :( superhai has deleted the source from his main download page. I can't find a copy anywhere, so you'll have to PM him.
-u
It may be possible to do this in the DSDT. I noticed that on my Gateway, there are a bunch of control registers defined that (I suspect) interface with hotkeys to turn on/off various functions like wireless.
Take a look at the Notify methods and see if you can spot anything that gets notified on resume from sleep. Since bluetooth will be turned off when sleeping, it will need to be turned back on if it was already on. So you miht see some logic to that effect, testing the state of a register.
kizwan:
You should see an AMW0 device in your DSDT (see this post (http://strangeworlds.co.uk/2007/11/24/amw0-later-models-aka-version-2-notes/) by Carlos, the writer of the acer_acpi implementation).
My guess (without looking at your DSDT) is that the device control function keys may be implemented in DSDT block that checks whether the OS is Windows. Does your DSDT have calls that only do things if the OSI is Windows? Mine does.
If so, then it may be *possible* that you can enable the Windows-specific parts, and then call into the AMW0 device defined in the DSDT from a simple kext. Perhaps that is what superhai was doing.
kizwan
06-03-2009, 06:08 AM
Hi uman,
Sorry for late reply. I did not get any notification when somebody post a reply. :)
You're right. This is what I found in my dsdt.dsl file:-
Device (AMW0)
{
Name (_HID, "pnp0c14")
Name (_UID, Zero)
Name (WLMP, Zero)
Name (WMID, Zero)
Name (B0ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateDWordField (B0ED, Zero, WLID)
Name (B1ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
Name (B2ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateDWordField (B2ED, Zero, BUID)
Name (_WDG, Buffer (0x0118)
Also this:-
Scope (_SB)
{
Method (_INI, 0, NotSerialized)
{
Store (0x07D0, OSYS)
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Linux"))
{
Store (One, LINX)
}
If (_OSI ("Windows 2001"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP1"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP2"))
{
Store (0x07D2, OSYS)
}
If (_OSI ("Windows 2006"))
{
Store (0x07D6, OSYS)
}
}
I have trying several days looking on how to solve the issue with DSDT modification but no luck. I will try to ask superhai about AMW0.kext. Even in windows (XP & Vista) bluetooth & wireless button is not operational until an application called "Launch Manager" is installed.
I will look to my DSDT & try to modify it if possible.
Thank you for your reply. :)
kizwan
You can ignore the _INI code. That's just setting the OS version so that other methods can test it and do different logic.
All you need to do is ensure that in the Device(ANW0) there isn't any Windows-specific logic going on. That way the device gets fully defined, and will be inserted into the ioreg. Using superhai's kext, you should be able to (a) hard-code the behavior you want, or (b) create a GUI like the Launch Manager for OSX that uses one of several methods for communicating with an in-kernel object (kext).
If superhai's AMW0 is based off IOKIT, you can use the device interface (see here: http://gemma.apple.com/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html#//apple_ref/doc/uid/TP30000380-BAJDAJDJ).
I can try to help, but since I don't have access to an Acer now, I'm afraid I can't be of much use. If pentiumpc had released source, you could see what s/he had done, since the ASUS "ASUS010" or "ATKD" devices might be similar to Acer's AMW0 in that they are all likely based off of Microsft's WMI interface.
The best guideline will be Carlos's work on acer_acpi in the Linux world. Good luck!
THeKiNG
06-03-2009, 11:24 PM
Hi,
I'm an (un)happy user of Asus M50SV notebook.
I have same problems with Fn stuff...
For me works ootb wifi/BT F2, Sleep F1, brightness F5+F6(ambient light sensor must be disabled in win first), LCD on/off F7, on LCD/VGA switch F8 i got instant reboot and the rest of Fn/Buttons are not workimg.
I tried Pentiumpc kext(pkg) but does nothing and IMO is normal since i dont have ASUS010 in my DSDT, instead i have ATK0100 under ATKD device. I modded the kext plist to match mne still no luck. :(
I found a great app for win only(sad) ASUS Notebook Keys (http://forum.notebookreview.com/showthread.php?t=150016) that allows you to remap Media and Fn keys, so I was able to catch those events for not working Media Buttons and Fn keys, also the SOURCE (http://rapidshare.com/files/74365305/AsusNbKeys_v1.3_SRC.zip) is available maybe in combination with this ACPID - acpi event daemon (http://acpid.sourceforge.net/) (for linux if someone can port it for osx) we can get them working as it should...
Multimedia trackpad functions/actions still cant be catched even with this app that make me think is covered only by Synaptys driver, still a weird thing if i set on win trackpad always on multimedia mode(when external mouse is detected) light remain open on trackpad even on OS X but dosent turn off when i take out the external mouse, somehow that driver function set up an ACPI flag... I must investigate this more.
Here is the list of captured events:
Media player arrows keys, dosen't work:
Fn +"":
->: Event: 0x41 - Fast forward
<-: Event: 0x40 - Rewind
^ : Event: 0x43 - Stop
v : Event: 0x45 - Play/Pause
Functions (Fn + F1-F12):
Fn +"":
F1: Event: works - Can't capture it since it goes to sleep
F2: Event: 0x5D works - WiFi/BTt switch
F3: Event: 0x50 - Mail App
F4: Event: 0x51 - Launch browser
F5: Event: 0x2D works - Brightness control down
F6: Event: 0x1E works - Brightness control up
F7: Event: 0x34 works - LCD on/off
F8: Event: 0x61 - LCD/VGA switch(I got instant restart when I use it)
F9: Event: 0x68 - Unknown
F10: Event: 0x32 - Mute
F11: Event: 0x31 - Volume down
F12: Event: 0x30 - Volume up
Keyboard keys that dosent work (+Fn):
Fn +"":
T: Event: 0x99 - Modem on/off
A: Event: 0x7A - Ambient light sensor
C: Event: 0x8A - Unknown
V: Event: 0x82 - Screen capture(I guess)
Space: Event: 0x5C - Launch Power4Gear
Media button key:
Button 1: Event: 0x5C - same function as Fn+Space=Launch Power4Gear
Button 2: Event: 0x6B - Unknown
Button 3: Event: 0x5C - Unknown
Button 4: Event: 0x95 - Unknown
So any idea on how can I fix the remaining Fn that dosen't work?
I will take a look at acpid.
Since I don't have and am not familiar with ASUS, I don't have any good advice, other than:
1. Look to Linux-- they're way ahead of the OSX scene.
2. I think you are right. They way to solve this beast is a general solution, like Linux has tried to do, with laptop/desktop-specific code in libraries that use the general solution. All too often this is solved by very laptop/desktop-sepcific code. The Dell Mini guys have completely hacked ApplePS2Keyboard.cpp, fixing bugs that plague other computers, but making it so Dell Mini-specific, it's useless for others.
3. Perhaps if we can get a small group of developers together that have different laptops/desktops, we can do a generic ACPI/WMI device that can be customized by different plugins, and/or user-space GUIs.
THeKiNG
06-04-2009, 01:08 AM
I will take a look at acpid.
Since I don't have and am not familiar with ASUS, I don't have any good advice, other than:
1. Look to Linux-- they're way ahead of the OSX scene.
2. I think you are right. They way to solve this beast is a general solution, like Linux has tried to do, with laptop/desktop-specific code in libraries that use the general solution. All too often this is solved by very laptop/desktop-sepcific code. The Dell Mini guys have completely hacked ApplePS2Keyboard.cpp, fixing bugs that plague other computers, but making it so Dell Mini-specific, it's useless for others.
3. Perhaps if we can get a small group of developers together that have different laptops/desktops, we can do a generic ACPI/WMI device that can be customized by different plugins, and/or user-space GUIs.
WOW
Fast reply! :)
I just remember, Superhai told me once that ACPID has no use on OSX(smth is missing) so dont bother with it...
Trust me I looked on all I found about this lappie and linux, but no help for OS X since they use diff stuff.
About ApplePS2 did u tried VoodooPS2? I use it for a long time with no major bugs.
I think Superhai's AMW0 is a good start, and yes it must be generic with maybe plugins for each vendor/specific stuff.
AFAIK I'm not a developer, I dunno any programming language, i'm just messing with all stuff I can found using logic and deep search :P
kizwan
06-05-2009, 02:29 PM
You can ignore the _INI code. That's just setting the OS version so that other methods can test it and do different logic.
All you need to do is ensure that in the Device(ANW0) there isn't any Windows-specific logic going on. That way the device gets fully defined, and will be inserted into the ioreg. Using superhai's kext, you should be able to (a) hard-code the behavior you want, or (b) create a GUI like the Launch Manager for OSX that uses one of several methods for communicating with an in-kernel object (kext).
If superhai's AMW0 is based off IOKIT, you can use the device interface (see here: http://gemma.apple.com/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html#//apple_ref/doc/uid/TP30000380-BAJDAJDJ).
I can try to help, but since I don't have access to an Acer now, I'm afraid I can't be of much use. If pentiumpc had released source, you could see what s/he had done, since the ASUS "ASUS010" or "ATKD" devices might be similar to Acer's AMW0 in that they are all likely based off of Microsft's WMI interface.
The best guideline will be Carlos's work on acer_acpi in the Linux world. Good luck!
I will study the document. It will take sometime to understand it. :)
Meanwhile I did try to change the AMW0.kext source code according to the Name/Method exist on my dsdt.dsl. Even though after that there are new entry for AMW0 in ioreg, the hotkey buttons still not operational.
http://img268.imageshack.us/img268/3329/ioreg9420amw0.jpg
AMW0.kext still need a lot of work to be done. Maybe I can learn more from ACPI4ASUS.kext source code.
Can you give me any tip on how to locate which Name/Method in dsdt.dsl that handle the operation of the hotkey buttons? I tried to compare my dsdt with MacBook3,1 dsdt but still can't figure it out yet. Am I right if I said that this function tell the wireless device to turn ON at POST?
Method (LAMN, 1, NotSerialized)
{
If (\_SB.AMW0.WLMP)
{
Store (Arg0, \_SB.AMW0.WLID)
Notify (\_SB.AMW0, 0xB0)
}
Else
{
PHSR (0x1F, Arg0)
}
}kizwan
Unfortunately, I'm also learning the DSDT myself. And most manufacturers don't document anything about the devices or their methods. It's mainly error and trial, I'm afraid.
Could you send me the AMW0.kext? I could play around with it after I finish my SD card driver-- assuming my son's Acer gets fixed.
Umm. The source of the AMW0 kext. Thanks.
kizwan
06-09-2009, 04:29 AM
Umm. The source of the AMW0 kext. Thanks.
You can download the AMW0.kext & source code here:-
http://www.superhai.com/xdarwin.html
So, you're working on driver for SD card reader. That is interesting. :) Is there any chances that Texas Instrument SD card reader supported by your driver?
You still have problem with GMA950 (artifacts)? Have you try Natit.kext or EFI string?
kizwan
You can download the AMW0.kext & source code here:-
http://www.superhai.com/xdarwin.html
[forehead slap] I missed that page. Thanks for the link! If the Acer comes back in the next week or so, I'll try getting something going with that.
So, you're working on driver for SD card reader. That is interesting. :) Is there any chances that Texas Instrument SD card reader supported by your driver?
Yep, for TI-- that's what I have in the Gateway and Acer. It's mainly to get my feet wet in IOKit/kernel drivers. I have some other things I want to do, but wanted a small-ish project to get started with.
You still have problem with GMA950 (artifacts)? Have you try Natit.kext or EFI string?
I'm using the two? kexts that I found in iPC. I didn't really pay much attention to what they do. The artifacts are minor enough that I haven't bothered to track them down. I may try the DSDT approach, since I want to get better at DSDT mods, but it's so time-consuming, as you've no doubt found out!
-u
So, you're working on driver for SD card reader. That is interesting. :) Is there any chances that Texas Instrument SD card reader supported by your driver?
I've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
THeKiNG
06-10-2009, 01:53 PM
I've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
For sure they use USB SD Reader i bet on that...
Wonder where did PentiumPC go... :(
Maybe he can release the source for ACPI4Asus.kext to help us understand what he did and maybe someone can continue his work, if he has no time for that, for the rest of the custom "OEM" stuff that make our life's so PITA.
kizwan
06-10-2009, 05:35 PM
I'm using the two? kexts that I found in iPC. I didn't really pay much attention to what they do. The artifacts are minor enough that I haven't bothered to track them down. I may try the DSDT approach, since I want to get better at DSDT mods, but it's so time-consuming, as you've no doubt found out!
-u
I was using Natit.kext for GMA950 on Acer Aspire 3680. No artifacts....that I can confirm. Right now I'm using EFI string. Don't forget to restore vanilla AppleIntelIntegratedFramebuffer.kext. Don't get excited yet, dual monitor only works with mirror mode.
I still unable to get display working with DSDT yet except for nVidia Go 7300 on Aspire 9420.
kizwan
kizwan
06-10-2009, 05:45 PM
I've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
I only heard new iPhone is coming soon....iPhone 3G S. ^_^
THeKiNG
06-18-2009, 10:51 AM
So no news here also :/
King,
It may be that your DSDT just has functions defined for Windows, especially since Linux guys also had problems.
Have you talked to or contacted the people at OSXCORES? They have patched BIOSes for OSX:
M50SV AS207 (http://www.osxcores.site50.net/user/image/asus-m50sv-as207.zip)
ASUS
M50V as209 (http://www.osxcores.site50.net/user/image/m50vas.209.zip)
ASUS
I'm not sure what fixes they have made, but they do custom work too. See:
http://www.osxcores.site50.net/services.htm
Perhaps they can help.
-u
kizwan
06-24-2009, 06:24 AM
uman,
Just got a reply from Superhai. Its look like Superhai will not continue AMW0 project. :( Is there anybody interested continuing his project? :'(
Other topic.....
Sleep:-
I found out that by deleting entry for EHCI devices in Acer Aspire 9420 DSDT, it was able to sleep. Now the EHCI devices detected as external/expansion card. Funny thing is external hard disk, which connected to EHCI port, is not turn off when putting laptop to sleep. Is this also happen with real MacBook?
I tried to compare DSDT from MacBook3,1 with mine and I found this:-
Acer Aspire 9420:-
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB1, 0x02)
}
MacBook3,1:-
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.UHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
I know that "Notify (\_SB.SLPB, 0x80)" will put computer to sleep but I don't know what "Notify (\_SB.PWRB, 0x02)" do. Do you know what "Notify (\_SB.PWRB, 0x02)" means? In my DSDT, PWRB is handle by SLPB (handle both sleep-button & power-button).
I also found "extra" method in EHCI function (MacBook3,1):-
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x07)
{
"AAPL,current-available",
0x04B0,
"AAPL,current-extra",
0x02BC,
"AAPL,current-in-sleep",
0x03E8,
Buffer (0x01)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
I think instead of removing EHCI entry from DSDT, maybe I can use this code to set EHCI device as external device. Maybe this can fix sleep issue too.
Clamshell:-
Does real MacBook automatically resume from sleep when lid is open? Or still need to push keyboard button to resume from sleep, just like windows?
kizwan
uman,
Just got a reply from Superhai. Its look like Superhai will not continue AMW0 project. :( Is there anybody interested continuing his project? :'(
I wish I could say yes, but my son's Acer has qualified for a replacement. So I won't have a machine that has an AMW0 to test. And that is a huge problem for development. As I understand it, Superhai's AMW0 basically allows you to call into the AMW0 device. The Linux project acer-acpi (and it's successor wmi-acpi) does the same, and supplies some utilities so that you can call/respond to the AMW0 methods.
The IOKit doc is pretty good at showing how to make a user-callable module that calls in-kernel routines. So if you know (or have someone who has an Acer and knows C) it shouldn't be hard to hack. My suggestion is to start a mini-group of Acer users, and see if anyone has any dev experience amongst the group.
Other topic.....
Sleep:-
I found out that by deleting entry for EHCI devices in Acer Aspire 9420 DSDT, it was able to sleep. Now the EHCI devices detected as external/expansion card. Funny thing is external hard disk, which connected to EHCI port, is not turn off when putting laptop to sleep. Is this also happen with real MacBook?
I don't think you want to delete the EHCI devices. I think you need to Notify them like on my MacBook Pro DSDT.
I know that "Notify (\_SB.SLPB, 0x80)" will put computer to sleep but I don't know what "Notify (\_SB.PWRB, 0x02)" do. Do you know what "Notify (\_SB.PWRB, 0x02)" means? In my DSDT, PWRB is handle by SLPB (handle both sleep-button & power-button).The Mac has 3 devices: PWRB (power button), SLPB (sleep button), and LID0 (the lid switch). Most hackbooks don't have all of these. I believe my gateway only had SLPB (although I am not sure-- my DSDT.dsl does have a PWRB, but I may have added it).
The power button has multiple functions. Normally if you hit it, it brings up a menu to sleep, shutdown, restart or cancel. But when the Mac is already sleeping (not thru lid sleep), it will wake from sleep. there is also some programmatic control of it in the System preferences. When a Mac has slept through the lid switch, then opening the lid switch resumes the Mac.
I also found "extra" method in EHCI function (MacBook3,1):-
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x07)
{
"AAPL,current-available",
0x04B0,
"AAPL,current-extra",
0x02BC,
"AAPL,current-in-sleep",
0x03E8,
Buffer (0x01)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}I think instead of removing EHCI entry from DSDT, maybe I can use this code to set EHCI device as external device. Maybe this can fix sleep issue too. Strange my Macbook dsdt does not have this code AT ALL.
Clamshell:-
Does real MacBook automatically resume from sleep when lid is open? Or still need to push keyboard button to resume from sleep, just like windows?
Opening the lid resumes from sleep.
I'm sorry I can't be of much use now. I'm hoping next week that I will find the time to backup and do a retail install of 10.5.7. Only then will I try more DSDT hacking, since right now my machine is a mess of hacked kexts!
-u
kDawg
07-15-2009, 04:34 PM
Has anyone done any work trying to integrate multiple video cards? I've been searching for weeks. Trying to find info regarding DSDT in general is tough.
aschar1
08-07-2009, 07:38 AM
[quote=candykane;26401]Fixing sleep and usb after wake up
I finally fixed sleep on my lappie!
Hi candykane,
did you already update to 10.5.8 and is your sleep fix stillworking?
Apple probably changed something in Powermanagement which is breaking sleep on most installs.
Do you use Openhaltrestart.kext or is sleep working without it?
Thanks Al
sk1nhd33t
08-09-2009, 10:05 AM
change _HID to _CID
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C"))
Name (_UID, 0xAA)
Name (_STA, 0x0B)
}
This one I got it off some site, cannot remember where. (credit goes to him/her)
This will activate your power button to bring up the shutdown menu.
http://www.infinitemac.com/attachment.php?attachmentid=148&stc=1&d=1232342192
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it :(
The Edge3000
08-11-2009, 10:03 PM
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it :(
Uncheck "Allow power button to put the computer to sleep" in energy saver =P.
Gurruwiwi
08-17-2009, 02:00 PM
Hi guys,
I dont mean to hijack the thread, but what beeter place for 2 quick DSDT questions for people who actually seem to know what they are talking about !!
No one has been able to answer me, well... because no one seems to actually KNOW what they are saying... Please please help!
DSDT is the voodoo of computers for to me loool...
Ok, I've got 2 Acer laptops and 1 Asus laptop. Just for reference. All had OSx, 10.4 to 10.5, many distros, my latest and greatest in my sig.
How on earth do I know if DSDT is doing something or not ?
iAtkos v7 Chameleon 2 RC1 (now RC2) and fassls DSDT script checked. DSDT.aml
is in root, but I tried in Extra folder and felt absolutely no difference.
On first boot I press power, poweroff window comes up (native install) My multimedia controller on my keyboard controls volume and front row funtions!! (photos in link in signature) - Video card not detected (but with strings + 2 kext native HD res QE etc)
Out of the box, FN and up down increases/decreases screen brightness. Other fn work, very few dont.
. Audio works OTB, clicks pops etc, no internal or external mic. VoodooHDA is the same,
Ehternet with kext only... didnt try stringing it because I got it to work
So how do I know if DSDT is working? if I remove it I am almost certain my laptop will respond the same.
My previous laptops, NONE used DSDT, I pressed power button, they worked fine! Brightness and other stuff too... etc etc
and I am scared because I read sometimes
"Patch DSDT at you own risk!! !
as in flashing the bios or something... can I bick my laptop with DSDT !??! When can DSDT be dangerous?
I want to try decompiling and fixing my dsdt for Snow... but I dont even know if
1) I actually need it
2) If it is working or not
3) it is dangerous, or when is it dangerous?
ok, three questions :)
thanks in advance"
kizwan
08-17-2009, 07:01 PM
1) I actually need it
2) If it is working or not
3) it is dangerous, or when is it dangerous?
................
1) You don't need it unless you need it. If everything is working properly, so you don't need it. DSDT override just for PC that have problem with CPU alias (only can use one core), sound, graphic card, power management & etc.
2) It is working.
3) No hard evidence that it is dangerous. DSDT override can be applied by 2 ways; i) by using dsdt.aml file. ii) by flashing it to ROM permanently. Of course the second one is dangerous if you do it wrongly.
kizwan
Gurruwiwi
08-17-2009, 09:47 PM
thanks for the reply
Ah, ok, you can actually flash a BIOS to mimic hardware change... ouch! no thanks.
The thing is kizwan, if I remove the DSDT.aml file, my system boots (Leo) and behaves the same! Which is really weird since I have perfect use of my multimedia pad (volume, next song, ff, rw, mute, hold and, believe it or not, and, the "enter" button works the same as Enter key, the arrows next to it like cursor, and the envolving white lines "tabs" stuffs depending on program, firefox, openoffice, folders, etc...) and 75% of bios FN keys etc.
For instance, my webcam, out of the box, reads in profile as "Acer Crystal Eye Webcam" - 100% opertional including ichat, ibooth, etc, which is know to crash with some "working" webcams - this withou dsdt or patching or stringing
That is why I say I have no idea, following logic from what I read, how the DSDT WORKS to help boot or not. even if its not present this laptop boots Leo like if it had.
Now I do have dual boot with dsdt present on both sides, but I guarantee you with single boot I had this behaviour
EnzoFX
09-03-2009, 05:17 AM
So the powerbutton fix, will make my power button do either sleep or shutdown/logout/resatart prompt? It depends on the setting in System Prefs is what you guys are saying? (Once enabled through dsdt)
My power button currently does nothing! =P
kizwan
09-03-2009, 06:06 AM
So the powerbutton fix, will make my power button do either sleep or shutdown/logout/resatart prompt? It depends on the setting in System Prefs is what you guys are saying? (Once enabled through dsdt)
My power button currently does nothing! =P
For a working power button in Mac OS X, a dialog box will appear if you press the power button. In this dialog box, you have a choice either you want to sleep, restart or shutdown (you will see all of the 3 choices).
If your power button does nothing, it means it have not yet enabled in DSDT (most machine has this enabled by default). If you have tried to enabled it in DSDT, maybe the code is wrong. Try to check it again.
kizwan
EnzoFX
09-03-2009, 06:40 AM
I have not tried, but I will.
I was just wondering if what it did (Once working) depended on the setting in Sys Prefs. I.e. whether it just sleeps, or if it gives you the shutdown/etc options.
kizwan
09-03-2009, 06:50 AM
I have not tried, but I will.
I was just wondering if what it did (Once working) depended on the setting in Sys Prefs. I.e. whether it just sleeps, or if it gives you the shutdown/etc options.
Once it working it will always shows you the options, either sleep, shutdown or restart. There is no setting in System Preferences for power button.
kizwan
The Edge3000
09-07-2009, 08:16 AM
I applied the power button fix. However, It only seems to work when I check the box to allow it to sleep the computer. Other than that, it does nothing - no menu or anything.
Common_Sense
09-08-2009, 09:21 PM
I applied the power button fix but it doesn't work, when I press it my computer will enter sleep mode without displaying any message just like it did before I applied the fix, I have a gigabyte EP45-DS3LR, anyone knows whats wrong?, this is how the DSDT looks like:
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) --> Name (_CID, EisaId ("PNP0C0C"))
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
}
gnychis
09-25-2009, 03:41 AM
hi all... I have a Thinkpad X300, that whenever I put to sleep, I see the wireless light blink, and the the laptop wakes up. It seems as though the wireless card is waking the system after a second or two every time I sleep it.
Does anyone have any recommendations for this in terms of the DSDT? I've attached mine if it helps.
msingh
10-05-2009, 05:37 AM
Hello,
My system is a Dell D830.
After a lot of tinkering around, I managed to install Snow Leopard on it. Please see my guide (http://www.insanelymac.com/forum/index.php?showtopic=187356).
I did a few DSDT mods to get some basic fixes.
Now, the system sleeps (S3 suspend to ram) but does not deep sleep (S5 suspend to disk), shutdown or reboot. I am using OpenHaltRestart.kext and SleepEnabler.kext. The latter made it possible to even suspend.
I am including my dsdt.dsl (which includes my fixes, by the way).
I see tantalizing references to the sleep button, SBTN, etc., but I have not found any systematic documentation for the code (btw. I am comfortable with coding as I do plenty of numerical coding in my work).
Can anyone take a look and let me know what I need to do to fix my poweroff and hibernate problem ?
The DSDT repository does not contain a fixed DSDT for my laptop.
PS: Microsoft's ASL compiler should be outlawed.
2nerd4u
10-20-2009, 04:07 PM
change _HID to _CID
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C"))
Name (_UID, 0xAA)
Name (_STA, 0x0B)
}
This one I got it off some site, cannot remember where. (credit goes to him/her)
This will activate your power button to bring up the shutdown menu.
http://www.infinitemac.com/attachment.php?attachmentid=148&stc=1&d=1232342192
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it :(
mine will shut down instantly :D
edit: well actually it just goes to sleep mode verry fast^^ too bad my system wont wake from sleep...
Sweaty
12-21-2009, 01:26 PM
With this and new restart patch chameleon booter from Duvel (strong beer that) I have only fakesmc as an added kext, although I'm about to reinstall voodoohda so I can hopefully have two soundcards working.. anyway this is mm67's work I just found it a pain to find the detail on insane so posting it here.. Thanks to all who put together these fixes. Need to add the two operation region bits and change your method PTS
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPCB.AG3E)
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
}
also your LPCB has to be like so
Device (LPCB)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
I suppose add device ID if you need it, I'm on ICH10 so don't.
Also attaching blackosx's duvel+rekursor version of RC4 here, replace your chameleon boot file with the one from here and add these to boot.plist to get unique UUID and restart fix:
<key>DeviceID</key>
<string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
<key>RestartFix</key>
<string>YES</string>
With this and new restart patch chameleon booter from Duvel (strong beer that) I have only fakesmc as an added kext, although I'm about to reinstall voodoohda so I can hopefully have two soundcards working.. anyway this is mm67's work I just found it a pain to find the detail on insane so posting it here.. Thanks to all who put together these fixes. Need to add the two operation region bits and change your method PTS
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPCB.AG3E)
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
}
It's only this :
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
and this:
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
that make the shutdown work, rest of the code is Gigabyte specific. This address 0x0430 is also motherboard specific, it is PMBASE+30h. Address of PMBASE is defined in FACP, on most boards it can also be checked from processor definitions. For example I have this in my dsdt:
Processor (CPU0, 0x00, 0x00000410, 0x06)
Here 0x00000410 is referring to PMBASE+10h so I use 0x430 on my Gigabyte board. On my MSI board's dsdt I have this:
Processor (P001, 0x01, 0x00000810, 0x06) {}
So in MSI shutdown code I use this:
OperationRegion (PMRS, SystemIO, 0x0830, 0x13)
Sweaty
12-21-2009, 03:43 PM
Ok cheers mate, had to add the other bits on my board (asus p5ql/epu) to get it to compile, I'll try the simpler way later.. At least it did work the way I bodged it :)
EDIT: OK fixed code as you suggested I needed to use 0x830, also got rid of unnecessary bits, sometimes I needed to turn PSU off with 0x430 (before I could restart, shutdown was complete), that seems fixed now. Thanks a lot.
adityaxavier
01-09-2010, 08:36 AM
Hi Guys,
Im in a fix.. Everywhere there is a DSDT Fix for getting the USB port to be displayed as Built-in but i need the opposite..
USB - 3 shows as built-in, but it has bluetooth. hence on sleep i loose bluetooth.. if i remove the entry altogether, i have it as external but my sleep fails..
Any help would be greatly appreciated.
Am having Lenovo T60p. with ICH7-M chipset.
Thanks,
Xavier
ping99
01-18-2010, 02:42 PM
Many thanks to Sweaty and mm67. You are really nice. This resolve the problem I thought it would never be resloved.
I just made a small change to Method (_PTS, 1, NotSerialized) in order to resolve sleep issue on my notebook CQ60-202TX. Now let me put all together step by step as a guide. This might help newbie.
1 Add OperationRegion below before Method (_PTS, 1, NotSerialized)
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
2 Check Device (LPC) if there is a similar Operation Region "LPC" like below. If you don't have LPC device, just search Name (_ADR, 0x001F0000), sometimes the device name is different.
Device (LPC)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
If there is no OperationRegion LPC, please add code above. In my dsdt's OperationRegion LPC0, there is an EXPE instead of AG3E. So I did not modify it, but had to change a bit in Method (_PTS, 1, NotSerialized) . See mine below:
OperationRegion (LPC0, PCI_Config, 0x40, 0xC0)
Field (LPC0, AnyAcc, NoLock, Preserve)
{
Offset (0x60),
, 10,
EXPE, 1
}
3 Add code below in Method (_PTS, 1, NotSerialized) like this
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPC.EXPE) //Please change to \_SB.PCI0.LPC.AG3E if you don't have the EXPE, but add AG3E.
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
Else
{
//**Original Code, this resolved my sleep issue.
}
}
//This is written by mm67. You are really nice.
This address 0x0430 is also motherboard specific, it is PMBASE+30h. Address of PMBASE is defined in FACP, on most boards it can also be checked from processor definitions. For example I have this in my dsdt:
Processor (CPU0, 0x00, 0x00000410, 0x06)
Here 0x00000410 is referring to PMBASE+10h so I use 0x430 on my Gigabyte board. On my MSI board's dsdt I have this:
Processor (P001, 0x01, 0x00000810, 0x06) {}
So in MSI shutdown code I use this:
OperationRegion (PMRS, SystemIO, 0x0830, 0x13)
4 Add these in your com.apple.Boot.plist and then put "boot_RC4_Duvelv2.1_Rekursor" under your boot partition.
<key>DeviceID</key>
<string>******XX-***X-***X-***X-************</string>
<key>RestartFix</key>
<string>YES</string>
Now you can remove OpenHaltRestart.kext and PlatformUUID.kext or other similar kexts.
pocenk
01-29-2010, 10:05 AM
does anyone have dsdt for EP45-DS5? i'm trying to patch myself and always failed
please help
Nameci
01-31-2010, 02:11 AM
Most portable system don't sleep on closing the LID, I tried to find a DSDT fix for it but cannot find it. (google is my best friend.) so I wrote 1 to fix my own.
If you have a better or alternative method, please let me know. Thanks.
Device (LID0)
{
Name (_HID, EisaId ("PNP0C0D")) //LID detection
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
Name (LIDS, One)
Method (_LID, 0, NotSerialized)
{
Store (^^PCI0.SBRG.EC0.SF13, LIDS) //LID register
XOr (LIDS, One, Local0)
IF (Local0) //if LID is closed
{
Notify (SLPB, 0x80) //Set system to sleep
}
Return (LIDS)
}
LID device should be easy to find, just need to add a line to notify the system to sleep.
On most system, (I think) depends on the OS to set the system to sleep bit OS X don't understand the notification sent by the LID device, so I did it in the hardware instead.
Noob here.
Never did work on my dsdt, I have errors after compiling on which it cannot find the registers. After much of googling, I have edited one value on my dsdt, on the LID0, instead of 0x03 I have made it to 0x04. I have sleep on lid close now, but I still don't have wake on lid open or wake on keyboard press after sleep via Fn+F1.
Here is my DSDT.dsl if somebody care to point me to the right direction.
Thanks in advance.
Nameci
01-31-2010, 11:18 PM
I have repatched the dsdt once again with a fresh one. I delete all dsdt and did the patching once again, i still have sleep on lid close, Fn+F1, on the power button. I can wake thru power button with no problems, I can wake buy plugging or unplugging a usb device. But no wake on lid open or keyboard.
With this dsdt, clamshelldisplay.kext is not necessary anymore, so I have removed this kext.
Btw I have modded my dsdt on LID as almost the same on earlier post by pentiumpc.
Any ideas on how to enabel wake on lid open?
What you need to find is the method that is called upon a lid switch event, which means it is under EC0, the embedded controller device. On a MacBook, it's typically _Q20, which looks like this:
Method (_Q20, 0, NotSerialized)
{
Store (LSTE, LIDS)
Notify (\_SB.LID0, 0x80)
}
On my Gateway, it's _Q8A:
Method (_Q8A, 0, NotSerialized)
{
If (LIDE)
{
Store ("_Q8A : LID Switch Event", Debug)
Store (0x01, LIDE)
If (IGDS)
{
Store (0x90, SMIF)
Store (0x00, TRP0)
}
Notify (\_SB.LID0, 0x80)
}
on many other notebooks, it's _Q09. So you'll need to find where it is, and add the appropriate Notify call, to inform the OS that the laptop should be woken up. (I've modified my DSDT to use LID0, to better match the MacBook DSDT).
kizwan
03-11-2010, 02:28 PM
Hi uman,
Do you remember, not a long time a go, I'm pursuing to enable bluetooth in Mac OS X? I'm still unable to get the bluetooth button working but I'm able to make the bluetooth device working via DSDT hacking. I'm still however unable to trigger the bluetooth ON/OFF button. I even trying to re-map the bluetooth ON/OFF button to another button (Fn+..) but unsuccessful. Therefore, I modify System Wake (_WAK) to enable bluetooth. This is for temporary solution. When hot booting the computer, it need to be put to sleep one time only & waking up the computer will turning ON the bluetooth device. To make it working cleanly, I modify both System Wake (_WAK) and Prepare to Sleep (_PTS). In the process, I also fixed the wireless device won't turn ON after waking from sleep.
_WAK code:-
Method (_WAK, 1, NotSerialized)
{
Store (Arg0, P80H)
If (LEqual (Arg0, 0x03))
{
Store (CIRT, \_SB.PCI0.LPCB.EC0.CIRE)
}
If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04)))
{
Store (EEPM, \_SB.PCI0.LPCB.EC0.WEPM)
Store (CAST, \_SB.PCI0.LPCB.EC0.CAME)
Store (WLPW, \_SB.PCI0.LPCB.EC0.WLEN)
Store (BTPW, \_SB.PCI0.LPCB.EC0.BTEN)
Store (WLLE, \_SB.PCI0.LPCB.EC0.WLLD)
Store (BTLE, \_SB.PCI0.LPCB.EC0.BTLD)
}
Store (0x00, \_SB.PCI0.LPCB.EC0.MUTE)
Store (0x00, \_SB.PCI0.LPCB.EC0.KTAF)
Store (0x01, \_SB.PCI0.LPCB.EC0.KTEE)
// start
// Add support for Wireless & Bluetooth devices (power & LED).
// Turned ON Wireless & Bluetooth devices after resume from Sleep.
Store (0x01, \_SB.PCI0.LPCB.EC0.WLEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.WLLD)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
..................
_PTS code:-
- Preventing the wireless device from turn OFF before goes to sleep. Therefore, the wireless device can be turn ON after waking from sleep.
Method (_PTS, 1, NotSerialized)
{
Store (Arg0, P80H)
Store (0x01, \_SB.PCI0.LPCB.EC0.MUTE)
If (LEqual (Arg0, 0x03))
{
Store (\_SB.PCI0.LPCB.EC0.CIRE, CIRT)
}
If (LEqual (Arg0, 0x04))
{
Store (0x01, \_SB.PCI0.LPCB.EC0.BLNK)
Store (0x00, \_SB.PCI0.LPCB.EC0.CIRE)
}
If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04)))
{
Store (\_SB.PCI0.LPCB.EC0.WEPM, EEPM)
Store (\_SB.PCI0.LPCB.EC0.CAME, CAST)
Store (\_SB.PCI0.LPCB.EC0.WLEN, WLPW)
Store (\_SB.PCI0.LPCB.EC0.BTEN, BTPW)
Store (\_SB.PCI0.LPCB.EC0.WLLD, WLLE)
Store (\_SB.PCI0.LPCB.EC0.BTLD, BTLE)
}
Store (0x00, \_SB.PCI0.LPCB.EC0.CAME)
Store (0x00, \_SB.PCI0.LPCB.EC0.CIRE)
// Preventing Wireless device from turning OFF when system going to Sleep.
// Store (0x00, \_SB.PCI0.LPCB.EC0.WLEN)
// start
// Add support for Wireless (LED) & Bluetooth (power & LED) devices.
// Turned OFF Wireless (LED) & Bluetooth (power & LED) devices before going to Sleep.
Store (0x00, \_SB.PCI0.LPCB.EC0.WLLD)
Store (0x00, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x00, \_SB.PCI0.LPCB.EC0.BTLD)
// end
If (LEqual (Arg0, 0x05))
{
PHSR (0x28, 0x00)
}
}
Applying this fix causing the computer unable to sleep anymore because USB4 device (where the bluetooth device attached to) causing the system wake immediately. I remember that according to ACPI Specification revision 4 documentation; in addition to the _PRW control method, _PSW control method can be used to enable or disable the device’s ability to wake a sleeping system.
Arguments: (1) Arg0 – An Integer containing a wake capability control
0 – Disable the device’s wake capabilities
1 – Enable the device’s wake capabilities
By looking at USB4 device in DSDT, there is _PSW entry that can be manipulate. This is the entry for USB4 device in DSDT after modifying the argument (set to 0):-
Device (USB4)
{
Name (_ADR, 0x001D0003)
OperationRegion (U4CS, PCI_Config, 0xC4, 0x04)
Field (U4CS, DWordAcc, NoLock, Preserve)
{
U4EN, 2
}
Name (_PRW, Package (0x02)
{
0x0E,
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
// Store (0x03, U4EN)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x02)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x02)
}
}
The last FIX enable the computer to sleep again.
kizwan
Nice work! Too bad I don't have bluetooth!
I've come to the conclusion that getting access to keyboard events is impossible in DSDT. I think you have three choices: construct an AMW0 device kext to bind to the AMW0 (which I presume is in your DSDT). This would be a challenge, but might allow you to be straight retail. Two, hack at ApplePS2Keyboard (if PS2) or something else if USB. Or three, do the same with VoodooPS2 (again if PS2).
If you have USB, your job may be easier, since you might be able to do it outside kernel space.
kizwan
03-12-2010, 04:51 PM
Hi uman,
I'm successfully compiled AMW0.kext for SL but got kernel panic while initializing some MethodTerm at boot. Since AMW0.kext project is not finished, I think I'm going to try ACPI4ASUS.kext instead. If ACPI4ASUS.kext developed to works with AMW0 v2 interface (AMW0 and WMID), it should works with other laptop model too.
I'm trying to enable battery icon by patching DSDT. It is being done by adjusting ADP1 & BAT0 code according to DSDT from MBP4,1. Not successful yet, but the battery indicator did show up. It said battery is not detected & current power source is power adapter. Do you think it is possible to make it working by just patching the DSDT?
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one.
Method (_Q3F, 0, NotSerialized)
{
// start
// auto turn ON Bluetooth device during computer startup
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
HKEY (0x3F)
}
kizwan
breakky
03-13-2010, 04:31 AM
Hello to all,
Can you somebody help me to enable my audio on Snow Leopard?My audio chip is Realtek ALC662:
I make a codec dump:You can download and see it.
http://hotfile.com/dl/32500771/8b28fa6/Realtek_ALC662_dump.txt.rar.html
I want to fix my audio in DSDT, so I read your tutorial and convert the Default pinconfig on each "[JACK]" device:
Mic (colour:Pink) 01a19830 ---> reversed 3098a101
Mic which is not a jack 99a3093f ---> 3f09a399
HP - 0121401f ---> 1f402101
SPDIF -01441120 ---> 20114401
This is my audio configuration on my laptop.
Thanks in advance!
I don't know how to generate values which I haveto enter in my DSDT.This is my DSDT (HDEF):
Device (HDEF)
{
Name (_ADR, 0x001B0000)
OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
Field (HDAR, WordAcc, NoLock, Preserve)
{
DCKA, 1,
Offset (0x01),
DCKM, 1,
, 6,
DCKS, 1,
Offset (0x08),
, 15,
PMES, 1
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
}
breakky
03-13-2010, 09:40 AM
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one.
Method (_Q3F, 0, NotSerialized)
{
// start
// auto turn ON Bluetooth device during computer startup
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
HKEY (0x3F)
}kizwan
Where you put this code?
I searched in my DSDT for Method (_Q3F, 0, NotSerialized), But didn't find it.I have a laptop with Bluetooth, where to put this code?
Hi uman,
I'm successfully compiled AMW0.kext for SL but got kernel panic while initializing some MethodTerm at boot. Since AMW0.kext project is not finished, I think I'm going to try ACPI4ASUS.kext instead. If ACPI4ASUS.kext developed to works with AMW0 v2 interface (AMW0 and WMID), it should works with other laptop model too.
So does Asus use AMW0, or do you need to add that code from AMW0. A WMID kext would be useful as many PC vendors use that interface. uninc's DSDT was hideously intertwined with WMID.
I'm trying to enable battery icon by patching DSDT. It is being done by adjusting ADP1 & BAT0 code according to DSDT from MBP4,1. Not successful yet, but the battery indicator did show up. It said battery is not detected & current power source is power adapter. Do you think it is possible to make it working by just patching the DSDT?I'm not sure, but given that the ACPI 4.0 spec devotes pages and pages to battery and power issues, I think it is at least possible. I also intend to try to solve this (but it's a lower priority for me because my laptop battery is toast anyway). I tried VoodooBattery, which worked great (it told me my battery was toast, lol), but then it kernel panic'ed HARD and I had to repair my disk, so I won't be using that again.
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one.
Method (_Q3F, 0, NotSerialized)
{
// start
// auto turn ON Bluetooth device during computer startup
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
HKEY (0x3F)
}kizwan
I still don't understand how query methods are executed, nor how they are bound to some device. ACPI says: "For an embedded controller event, OSPM will queue the control method of the name _QXX, where XX is the hex format of the query code. Notice that each embedded controller device can have query event control methods. Similarly, for an SMBus driver, if no driver registers for SMBus alarms, the SMBus driver will queue control methods to handle these. Methods must be placed under the SMBus device with the name _QXX where XX is the hex format of the SMBus address of the device sending the alarm."And then they discuss it more with a completely unhelpful example. Oh wait, the acpi implementers guide is more helpful:
What’s the trap? Using decimal instead of hexadecimal numbers in _Lxx, _Exx, and _Qxx names in your ASL code. When the number (xx) in the _Lxx, _Exx, or _Qxx event handler object name in the ASL code does not match the number of the bit in the GPE register block (or match the number of the embedded controller query number in the case of _Qxx), then the OS loses events. For more information about the relationship of event handler object names and bits on the GPE register block, see section 5.6.2.2.
Tip: The xx in the event handler name is a hexadecimal number that corresponds to the GPE register bit or EC query number the event is tied to. For example, the level-triggered event tied to bit 11 of the GPEx register block must be named _L0B, not _L11.
DSDT is fun ;) but time consuming!
Where you put this code?
I searched in my DSDT for Method (_Q3F, 0, NotSerialized), But didn't find it.I have a laptop with Bluetooth, where to put this code?
Each laptop model is going to be different. That's why you have to be prepared to do some work to get DSDT going. You will first need to determine what symbols, events, and queries correspond to your bluetooth device. Then kizwan's code can act as a guide.
kizwan
03-13-2010, 01:32 PM
Where you put this code?
I searched in my DSDT for Method (_Q3F, 0, NotSerialized), But didn't find it.I have a laptop with Bluetooth, where to put this code?
It is hardware & BIOS specific. You may have different query method. I'm afraid, you need to try & error every query method in your DSDT.
EDIT: You may want to follow uman suggestion (next post) to get your audio working. It is much easier.
As for your sound, you need to do a lot of work to get your sound working. You already have HDEF entry in DSDT, so you just missing legacy/patched kext. You need to put your ConfigData & Pin Config in legacy/patched kext. Use this legacy kext as a template:-
http://www.mediafire.com/?vkzyzmtzozo
If you like to put ConfigData & PinConfigurations in DSDT, this is how HDEF entry will look like (between "// start" & "// end"):-
Device (HDEF)
{
Name (_ADR, 0x001B0000)
Name (HDWA, 0x00)
Name (_PRW, Package (0x02)
{
0x05,
0x03
})
Method (_PS0, 0, Serialized)
{
If (LEqual (HDWA, 0x00))
{
Store (0x01, HDWA)
HKEY (0x8F)
}
}
Method (_PS3, 0, Serialized)
{
Store (0x00, HDWA)
}
// start - required code
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"built-in",
Buffer (One)
{
0x00
},
"codec-id",
Buffer (0x04)
{
0x83, 0x08, 0xEC, 0x10
},
"ConfigData",
Buffer (0x40)
{
/* 0000 */ 0x01, 0x47, 0x1C, 0x30, 0x01, 0x47, 0x1D, 0x11,
/* 0008 */ 0x01, 0x47, 0x1E, 0x0B, 0x01, 0x47, 0x1F, 0x01,
/* 0010 */ 0x01, 0x87, 0x1C, 0x10, 0x01, 0x87, 0x1D, 0x01,
/* 0018 */ 0x01, 0x87, 0x1E, 0xA0, 0x01, 0x87, 0x1F, 0x90,
/* 0020 */ 0x01, 0xA7, 0x1C, 0x20, 0x01, 0xA7, 0x1D, 0x31,
/* 0028 */ 0x01, 0xA7, 0x1E, 0x81, 0x01, 0xA7, 0x1F, 0x01,
/* 0030 */ 0x01, 0xE7, 0x1C, 0x40, 0x01, 0xE7, 0x1D, 0xE1,
/* 0038 */ 0x01, 0xE7, 0x1E, 0x45, 0x01, 0xE7, 0x1F, 0x01
},
"layout-id",
Buffer (0x04)
{
0x0C, 0x00, 0x00, 0x00
},
"device-type",
Buffer (0x11)
{
"Mobile ALC883 S/T"
},
"PinConfigurations",
Buffer (0x10)
{
/* 0000 */ 0x30, 0x11, 0x0B, 0x01, 0x10, 0x91, 0xAB, 0x01,
/* 0008 */ 0x20, 0x31, 0x81, 0x01, 0x40, 0xE1, 0x45, 0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
// end - required code
}I'll try to construct ConfigData & PinConfigurations for you but I can't promise.
kizwan
Are you planning to use VoodooHDA, or AppleHDA? If Voodoo, first rename all references to HDEF to ALC6 (or whatever turns you on :)) Doing so will prevent AppleHDA from loading and matching your HDA device. If AppleHDA is loaded, then VoodooHDA doesn't load.
Next, and this is common for both Apple and Voodoo. Add this to your HDEF or ALC6 device:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x04)
{
"layout-id",
Buffer (0x04)
{
0x0C, 0x00, 0x00, 0x00
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
You can then add your pin configs in there or in the plist depending on how you want to get sound going. See the great guide on infinitemac, or the one on projectosx.
Search my posts and look for my question on pinconfigs to find the links. I'm still trying to find out how to get my pinconfigs without Windows, since I don't run that anymore!
barnum
03-13-2010, 02:14 PM
Hi kizman,
By looking at USB4 device in DSDT, there is _PSW entry that can be manipulate. This is the entry for USB4 device in DSDT after modifying the argument (set to 0):-
Device (USB4)
{
Name (_ADR, 0x001D0003)
OperationRegion (U4CS, PCI_Config, 0xC4, 0x04)
Field (U4CS, DWordAcc, NoLock, Preserve)
{
U4EN, 2
}
Name (_PRW, Package (0x02)
{
0x0E,
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
// Store (0x03, U4EN)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x02)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x02)
}
}The last FIX enable the computer to sleep again.
kizwan
can you tell me what modification should I apply to this code to disable sleep for a device in usb2 ?
regards,
Vincent
kizwan
03-13-2010, 02:24 PM
So does Asus use AMW0, or do you need to add that code from AMW0. A WMID kext would be useful as many PC vendors use that interface. uninc's DSDT was hideously intertwined with WMID.
Looks like I still need to go through WMI and ACPI documentation to have better understanding. ;) Then I can make this successful.
I'm not sure, but given that the ACPI 4.0 spec devotes pages and pages to battery and power issues, I think it is at least possible. I also intend to try to solve this (but it's a lower priority for me because my laptop battery is toast anyway). I tried VoodooBattery, which worked great (it told me my battery was toast, lol), but then it kernel panic'ed HARD and I had to repair my disk, so I won't be using that again.
Yeah, it's a low priority for me too. Just playing around.
I guess to make it working, maybe need to determine which query method it use. I said that because I found that there are query method that called ADP1 & BAT0 device. Just don't know what it do & what it contribute to battery detection.
I still don't understand how query methods are executed, nor how they are bound to some device. ACPI says: And then they discuss it more with a completely unhelpful example. Oh wait, the acpi implementers guide is more helpful:
I'm going to grab the acpi implementers guide.
DSDT is fun ;) but time consuming!
I agree. :)
kizwan
03-13-2010, 02:32 PM
Hi kizman,
.....................
can you tell me what modification should I apply to this code to disable sleep for a device in usb2 ?
..................
Do you mean you want to disable USB2 capability to wake a sleeping system, don't you? If in "Device (USB2)" entry it have _PSW (Power State Wake) method, you will need to change it according to my modification.
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
// Store (0x03, U4EN)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}Refer to arguments for _PSW:
Arguments: (1)
Arg0 – An Integer containing a wake capability control
0 – Disable the device’s wake capabilities
1 – Enable the device’s wake capabilitiesThat is why I change both condition to execute the same thing. So that it always execute the same "Store" operation as if it is Arg0=0.
kizwan
breakky
03-13-2010, 02:55 PM
Are you planning to use VoodooHDA, or AppleHDA? If Voodoo, first rename all references to HDEF to ALC6 (or whatever turns you on :)) Doing so will prevent AppleHDA from loading and matching your HDA device. If AppleHDA is loaded, then VoodooHDA doesn't load.
Next, and this is common for both Apple and Voodoo. Add this to your HDEF or ALC6 device:
You can then add your pin configs in there or in the plist depending on how you want to get sound going. See the great guide on infinitemac, or the one on projectosx.
Search my posts and look for my question on pinconfigs to find the links. I'm still trying to find out how to get my pinconfigs without Windows, since I don't run that anymore!
I planed to use AppleHDA with DSDT.aml fix.This is my original DSDT.aml
http://hotfile.com/dl/32576445/45eb3b8/DSDT.dsl.zip.html
By the way I use AsereBLN booter 1.1.9.
kizwan
03-13-2010, 07:56 PM
I planed to use AppleHDA with DSDT.aml fix.This is my original DSDT.aml
Try this legacy kext for ALC662 (Snow Leopard):-
http://www.mediafire.com/?kmnykkqmy5m
Make sure AppleHDA.kext in /System/Library/Extensions/ folder is original kext. Remember to put _DSM method in Device (HDEF) (please refer to uman's post #81 (http://www.infinitemac.com/f84/various-dsdt-mods-t1960/post46205.html)).
You also need to put DTGP code in DSDT. Put it afterMethod (_WAK) function.
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}kizwan
breakky
03-14-2010, 03:59 AM
When I try to compile my dsdt.dsl I get one error:
4644: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Error 4067 - ^ Object is not accessible from this scope (DTGP)
Nevermind I found where is the error and fix it!
kizwan
03-14-2010, 07:23 AM
When I try to compile my dsdt.dsl I get one error:
4644: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Error 4067 - ^ Object is not accessible from this scope (DTGP)
Nevermind I found where is the error and fix it!
How about the sound? Is it working?
richarda
03-16-2010, 04:39 PM
Hello all,
This thread has been very useful for me. I now just miss one last step to have the "perfect" install.
I'm running Snow Leopard on an ASUS eeePC 901 from the SD card. It's a bit slow but this is OK.
My problem: whenever I go to sleep and wake-up from sleep, I guess the SD card (my "boot drive") gets brutally ejected and.....well, it's bad.
My question: is there any DSDT mod that would allow my SD card to stay mounted (powered maybe) during all the cycle wake-sleep-wake ?
I found a lot of approaching stuff on the thread but nothing exactly like that. this would make may day.
Any idea anyone ?
Thanks, Richard.
Hello all,
This thread has been very useful for me. I now just miss one last step to have the "perfect" install.
I'm running Snow Leopard on an ASUS eeePC 901 from the SD card. It's a bit slow but this is OK.
My problem: whenever I go to sleep and wake-up from sleep, I guess the SD card (my "boot drive") gets brutally ejected and.....well, it's bad.
My question: is there any DSDT mod that would allow my SD card to stay mounted (powered maybe) during all the cycle wake-sleep-wake ?
I found a lot of approaching stuff on the thread but nothing exactly like that. this would make may day.
Any idea anyone ?
Thanks, Richard.
Yes, but it depends on the underlying hardware. I've found los of good info about my own laptop in my chipset doc (ICH7), and there is lots of good info on the SATA part of the device control. I assume the SSD is controled through SATA??
richarda
03-18-2010, 03:34 PM
Hello,
Thanks for the info. Not sure I was clear enough tough. I'm having the problem with the SD card (I believe it's using an internal USB port) and the machine is an eeePC 901.
I need help on this one.....please.
Hello,
Thanks for the info. Not sure I was clear enough tough. I'm having the problem with the SD card (I believe it's using an internal USB port) and the machine is an eeePC 901.
I need help on this one.....please.
My bad. I'm so used to SD cards not working, that I assumed you meant SSD.
You could try the following:
1. Determine what USB slot your SD card is occupying. Easiest is to highlight he drive in disk utility and right-click Information. You should see something like: IODeviceTree:/PCI0@0/USB7@1D,7. That tells me that it's using USB7.
2. Edit your DSDT to replace the _PRW for the indicated USB slot with:
Device (USB7)
{
...
// package (argnum) {GPEbit, Wakelevel, PowerResource}
Name(_PRW, Package()
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
where I have <xx> above, keep your DSDT's existing value, as that's the handler in the GPE for USB7. What I've highlighted in red is the change. Your existing DSDT likely has 0x03, which is effectively powered off.
What the 0x01 does is says that the drive still needs power. That *might* be enough to keep it from being ejected. But it might also prevent the computer from sleeping.
Take a look at the ACPI spec (4.0 rev) Chapter 7.2 for some of the things you can do with power management.
saul1d
03-20-2010, 01:48 AM
hey guys ive been lurking around on this thread for a week or two now, and i'm more interested in getting my laptop fully working. ive been running osx for about a year now and i'm pretty familiar with everything except DSDT.
basically what i'm trying to get working:
- GMA X3100: was working with leo, but with 10.6.2 i lost the ability to make the
screen turn off.(although i still have QE/CI)
- Backlight: has never worked, "invalid firmware max backlight" problem. i was
hoping DSDT would be able to fix this
- Sleep: although i'm not too worried about it, it would be nice.
I have a Gateway M6841. I don't think it's a too popular system to be using for a hackintosh, so there's not much help that i've found in the forums.
here is my patched DSDT. its patched for sleep, backlight, and gmax3100 but it hasnt changed any of the problems. thanks to anyone that can help or at least point me in the right direction, i do have programming experience if it helps.
richarda
03-20-2010, 05:44 PM
My bad. I'm so used to SD cards not working, that I assumed you meant SSD.
You could try the following:
1. Determine what USB slot your SD card is occupying. Easiest is to highlight he drive in disk utility and right-click Information. You should see something like: IODeviceTree:/PCI0@0/USB7@1D,7. That tells me that it's using USB7.
2. Edit your DSDT to replace the _PRW for the indicated USB slot with:
Device (USB7)
{
...
// package (argnum) {GPEbit, Wakelevel, PowerResource}
Name(_PRW, Package()
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
where I have <xx> above, keep your DSDT's existing value, as that's the handler in the GPE for USB7. What I've highlighted in red is the change. Your existing DSDT likely has 0x03, which is effectively powered off.
What the 0x01 does is says that the drive still needs power. That *might* be enough to keep it from being ejected. But it might also prevent the computer from sleeping.
Take a look at the ACPI spec (4.0 rev) Chapter 7.2 for some of the things you can do with power management.
Hello,
Thanks a lot. In the disk utility I got: /PCI0@0/EUSB@1D,7
And in the DSDT file, at Device(EUSB) I don't have a lot of things. Just
{
Name (_ADR, 0x001D0007)
}
nothing else. Any idea what else I can add to make it working in that case ?
kizwan
03-20-2010, 06:13 PM
Hello,
Thanks a lot. In the disk utility I got: /PCI0@0/EUSB@1D,7
And in the DSDT file, at Device(EUSB) I don't have a lot of things. Just
{
Name (_ADR, 0x001D0007)
}
nothing else. Any idea what else I can add to make it working in that case ?
You're allowed to add what it don't have.
kizwan
richarda
03-20-2010, 08:44 PM
Allright, I got that but in this case I guess I have to pute something like
Name(_PRW, Package()
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
But how to determine the <xx> value then ?
Allright, I got that but in this case I guess I have to pute something like
Name(_PRW, Package()
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
But how to determine the <xx> value then ?
That's the problem then. You really need to have some of the resources specified for your USB (UHCI) and EHCI ports. Since you don't have anything, you can add the GPE handlers, and things should work. The best way to proceed, is to first identify which Mac model your machine is closest to, and then take the requisite parts, carefully excising out the problematic parts.
For my hack, I looked at the list of mac models on wikipedia, and then chose MacBook 2,1 as the closest. I then edited my smbios.plist to reflect those values. I then compared my DSDT to the MacBook 2,1 DSDT and ioreg, and found they were surprisingly close. I've included below, some pieces for you to try from a MacBook 2,1 DSDT:
Scope (\_GPE)
{
...
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L04, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
...
Method (_L0C, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB3, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0D, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB7, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0E, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB4, 0x02)
Notify (\_SB.PWRB, 0x02)
}
...
Note the parts in red. If you already have level handlers in your GPE scope that use these numbers (so say you already have _L03), you will have to change them, and change the part in the USB1 declaration for, say, _L03. Don't put really large numbers, because there's a part in the DSDT that says the handlers go only up to 0xXX (I've forgotten where that is). Just make sure you use unused numbers. For example, in my DSDT I added one for _L11 for my firewire.
Device (USB1)
{
Name (_ADR, 0x001D0000) // keep your existing ADDR lines!!!
Device (HUB1) // will become HUB2 for USB2
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
OperationRegion (U1CS, PCI_Config, 0xC4, 0x04)
Field (U1CS, DWordAcc, NoLock, Preserve)
{
U1EN, 2
}
Name (_PRW, Package (0x02)
{
0x03, // must match number you use in _Lxx handler
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, U1EN)
}
Else
{
Store (0x00, U1EN)
}
}
Method (_S3D, 0, NotSerialized) // note: I don't have these
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized) // note: I don't have these
{
Return (0x03)
}
}
The parts in red will change to match each USB port, so U1CS, U1EN becomes U2CS and U2EN for USB2, along with changing HUB1 to HUB2. I don't have the _S3D and _S4D methods in my DSDT and from reading the spec, I don't think they are needed.
So USB2, looks like:
Device (USB2)
{
Name (_ADR, 0x001D0001)
Device (HUB2)
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
Field (U2CS, DWordAcc, NoLock, Preserve)
{
U2EN, 2
}
Name (_PRW, Package (0x02)
{
0x04, // A different _L04 is a different _LXX handler than USB1!
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, U2EN)
}
Else
{
Store (0x00, U2EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x03)
}
}
Do the same edits for USB3 and USB4 (if you have USB4) and even USB5, and USB6 if you have a desktop with lots of USB ports (although I suspect you will need another EHCI hub there, but I don't know).
USB7 is quite different:
Device (USB7)
{
Name (_ADR, 0x001D0007)
Device (HUB7)
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
Device (PRT3)
{
Name (_ADR, 0x03)
}
Device (PRT4)
{
Name (_ADR, 0x04)
}
Device (PRT5)
{
Name (_ADR, 0x05)
}
Device (PRT6)
{
Name (_ADR, 0x06)
}
Device (PRT7)
{
Name (_ADR, 0x07)
}
Device (PRT8)
{
Name (_ADR, 0x08)
}
}
Name (_PRW, Package (0x02)
{
0x0D, // yet another different handler
0x03 // I suggested you change this to 0x1
})
Method (_S3D, 0, NotSerialized)
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x03)
}
}
Remove the parts in yellow for the USB7, since they don't match the change from 0x03 -> 0x01. Plus I suspect they really aren't needed.
Oh, and if this doesn't work, there are bits you can set that essentially control power settings, ejectability, etc. But that is hugely dependent on your chipset. I have an ICH7, and most of that is the same in ICH9, and ICH10, but if you have an nvidia chipset, that's *totally* different.
richarda
03-21-2010, 02:27 PM
OK, I'm 200% lost now. This is way too complex for me. I guess I have to find somebody litterate enough who solved the problem on the eee901 and just copy his settings.
Thanks anyway.
barnum
03-26-2010, 01:56 PM
Device (HUB1) // will become HUB2 for USB2
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
Hi,
Can You explain me what the "utility" of this part of the usb declaration"
In my dsdt, I doesn't have that.
Thank,
Barnum
You won't need it, then. It's because on my gateway, the ports have integrated hubs. See ACPI spec, section 9.13 for full details.
adriangb
04-01-2010, 02:59 PM
Sorry of reviving this and cutting in
@ping99
I have an ASRock x58 Extreme (similar to ASUS boards), and sleep doesn't work OTB. I've been looking around, and it seems I would need to modify Method (_PTS, 1, NotSerialized).
I read your post, and it seems that the edits you did are somewhat similar to what I should do in my DSDT, whoever I have a few doubts:
...
1 Add OperationRegion below before Method (_PTS, 1, NotSerialized)
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
Is OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
} really necessary? mm67 seems to think not (or is that for shutdown only?)
...2 Check Device (LPC) if there is a similar Operation Region "LPC" like below. If you don't have LPC device, just search Name (_ADR, 0x001F0000), sometimes the device name is different.
Device (LPC)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
If there is no OperationRegion LPC, please add code above. In my dsdt's OperationRegion LPC0, there is an EXPE instead of AG3E. So I did not modify it, but had to change a bit in Method (_PTS, 1, NotSerialized) . See mine below:
OperationRegion (LPC0, PCI_Config, 0x40, 0xC0)
Field (LPC0, AnyAcc, NoLock, Preserve)
{
Offset (0x60),
, 10,
EXPE, 1
}
Here is my LPCB:
Device (LPCB)
{
Name (_ADR, 0x001F0000)
Device (IELK)
{
Name (_HID, "AWY0001")
OperationRegion (RXA0, PCI_Config, 0xA0, 0x20)
Field (RXA0, ByteAcc, NoLock, Preserve)
{
, 9,
PBLV, 1,
Offset (0x10),
, 1,
PBMS, 1,
, 1,
PMCS, 1,
ECNS, 1,
Offset (0x11),
ECT1, 16,
ELEN, 1,
Offset (0x14)
}
Method (\_GPE._L0A, 0, NotSerialized)....
Where should I put OperationRegion (LPC0...? Before Device (IELK)? After Name (_HID, "AWY0001")? Inside OperationRegion (RXA0, PCI_Config, 0xA0, 0x20) somehow?
3 Add code below in Method (_PTS, 1, NotSerialized) like this
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPC.EXPE) //Please change to \_SB.PCI0.LPC.AG3E if you don't have the EXPE, but add AG3E.
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
Else
{
//**Original Code, this resolved my sleep issue.
}
}
Here is my current -disastrous- Method (_PTS, 1, NotSerialized):
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
If (LEqual (Arg0, 0x05))
{
Store (0x99, SMIP)
Store (One, \_SB.PCI0.LPCB.IELK.AG3E)
Store (Zero, SLPE)
Sleep (0x10)
}
Else
{
Store (Zero, \_SB.PCI0.LPCB.IELK.AG3E)
}
Store (ASSB, WSSB)
OSYS ()
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
The original is:
Method (_PTS, 1, NotSerialized)
{
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
Store (ASSB, WSSB)
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
Thanks in advance, Adrian
Post Scriptum (P.S.): I attached my DSDT's, CST and IST tables, so if someone could lok at them and tell me if I -for example- managed to insert the C-States, P-States, etc-States into the DSDT correctly, I would be eternally grateful.
adriangb
04-01-2010, 03:56 PM
No one...?
ping99
07-04-2010, 08:14 AM
First all, you just need to add OperationRegion PMRS below.
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1
}
* Pay attention to 0x0430 in red. It depends your motherboard. You have Processor (CPU0, 0x00, 0x00000410, 0x06) in your dsdt, you can use 0x0430. If you have Processor (P001, 0x01, 0x00000810, 0x06) then use 0x0830. It is PMBASE+30h.
Secondly, look into Method (_PTS, 1, NotSerialized) to see whether "If (LEqual (Arg0, 0x05))" there. If not, add code as below. If already there, just insert.
If (LEqual (Arg0, 0x05))
{
Store (0x01, \_SB.PCI0.LPC.EXPE) // hibernate fix. Will return to S5 after power back
Store (Zero, SLPE) // zero SLP_SMI_EN, else won't shutdown
Sleep (0x10) // wait for bit to set
}
Yours is modified as below:
Method (_PTS, 1, NotSerialized)
{
Store (Zero, \_SB.PCI0.LPC.EXPE) //Check Device (LPC) or LPCB if you have this EXPE or something like this. change it to match yours.
If (LEqual (Arg0, 0x05))
{
Store (0x01, \_SB.PCI0.LPC.EXPE) // hibernate fix. Will return to S5 after power back
Store (Zero, SLPE) // zero SLP_SMI_EN, else won't shutdown
Sleep (0x10) // wait for bit to set
}
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
Store (ASSB, WSSB)
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
SaGaR
12-20-2010, 05:11 PM
Hi,
i tried the sleep fix, but i can't get it to work, sleep in general doesn't work, when i press the sleep button, my screen freezes and that's all, when i press the powerbutton i get the restart/shutdown popup and all works again.
Lidsleep also does the same, screen freezes but stays on.
i wanna ask you if you plz wanna look at it?
ribben89
02-05-2011, 05:05 PM
Hello guys really nice job!!!
Here is my problem... I have a Compal Ifl90 with intel 7300 @ 2GHz and 8600m gt 512mb with Snow Leopard 10.6.3 .
The problem i have is that my screen brightness slider at setting wasn't there!!! But with some dsdt editing i managed to show up but when i move the slider nothing happen and returns to it's original position! Any help please below is my code from Device (LCD)
Device (LCD)
{
Method (_ADR, 0, NotSerialized)
{
Return (0x0110)
}
Method (_DCS, 0, NotSerialized)
{
^^^^LPCB.PHSS (0x0C)
Store (CADL, Local0)
Store (CSTE, Local1)
And (Local0, One, Local0)
And (Local1, One, Local1)
If (Local0)
{
Store (One, LCDA)
}
Else
{
Store (Zero, LCDA)
}
If (LCDA)
{
If (LEqual (Local1, One))
{
Return (0x1F)
}
Else
{
Return (0x1D)
}
}
Else
{
If (LEqual (Local1, One))
{
Return (0x0F)
}
Else
{
Return (0x0D)
}
}
}
Method (_DGS, 0, NotSerialized)
{
If (LCDA)
{
Return (One)
}
Else
{
Return (Zero)
}
}
Method (_DSS, 1, NotSerialized)
{
}
Method (_BCL, 0, NotSerialized)
{
If (^^^^LPCB.ECOK ())
{
If (LEqual (OSYS, 0x07D6))
{
If (LEqual (^^^^LPCB.EC0.OSTY, Zero))
{
Store (One, ^^^^LPCB.EC0.OSTY)
}
}
Else
{
If (LEqual (^^^^LPCB.EC0.OSTY, One))
{
Store (Zero, ^^^^LPCB.EC0.OSTY)
}
}
}
Return (Package (0x0A)
{
0x46,
0x28,
Zero,
0x0A,
0x14,
0x1E,
0x28,
0x32,
0x3C,
0x46
})
}
Method (_BCM, 1, NotSerialized)
{
Divide (Arg0, 0x0A, Local0, Local1)
Store (Local1, ^^^^LPCB.EC0.BRTS)
}
Method (_BQC, 0, NotSerialized)
{
Multiply (^^^^LPCB.EC0.BRTS, 0x0A, Local0)
Return (Local0)
}
}
In my try to make it show up i also added
Name (_HID, EisaId ("LCD1234"))
in Device (LCD)
And
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
right above Device (LCD)
Also i am able to change brightness from my Fn Buttons but no notification is shows as the sound changing does!!!
Please any ideas???
Marchrius
01-21-2013, 09:18 PM
Hi all.
How I can turn on wireless led with code in DSDT?