Lets start by fixing USB stuff. The reason for this is that I see something that isn't right. Let's use USB0 as an example:
Device ([color="#FF0000"][b]USB0[/b][/color])
{
Name (_ADR, 0x001D0000)
Method (_S3D, 0, NotSerialized)
{
[color="#FF0000"][b]If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)[/b][/color]
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x34, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x03,
[color="#FF0000"][b]0x03[/b][/color]
})
}
And this is how is should be:
Device (UHC1) // Renamed from: USB0
{
Name (_ADR, 0x001D0000)
// Newly added: USB_RES—USB Resume Enable Register (ICH9R-3169722.pdf /16.1.24 / page 642).
OperationRegion (BAR0, PCI_Config, 0xC4, One)
Field (BAR0, ByteAcc, NoLock, Preserve)
{
USBW, 2, Offset (0x01)
}
Method (_S3D, 0, NotSerialized) // S3 Device State
{
Return (0x02)
}
Method (_PSW, 1, NotSerialized) // Power State Wake
{
If (Arg0)
{
Store (0x03, USBW) // Monitor port for remote wakeup and connect/disconnect events.
}
Else
{
Store (Zero, USBW) // Monitoring disable.
}
}
Name (_PRW, Package (0x02) // Power Resources for Wake
{
0x03,
0x04 // Lowest supported sleep state.
})
Method (_DSM, 4, NotSerialized) // Device Specific Method
{
Store (Package (0x02)
{
"device-id",
Buffer (0x02)
{
0x34, 0x3a, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Now search and replace "USB0" with "UHC1". Then repeat this step for every single Device (USBn) in your DSDT. You should search for: 0x001D0000, 0x001D0001, 0x001D0002, 0x001A0001, 0x001A0001 and 0x001A0002. Like I said fix these first. And don't forget to change all callers of USBn !!!
Note: Comment out Device (USB3) with help of /* */
Next target, one of two for today, is Device (USBE) which currently looks like this:
Device (USBE)
{
Name (_ADR, 0x001D0007)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x04)
{
"AAPL,clock-id",
Buffer (One)
{
0x01
},
"device_type",
Buffer (0x05)
{
"EHCI"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Which I want you to change to:
Device (EHCI) // Renamed from: USBE - Extended with Power Management and Port Wake Capabilities.
{
Name (_ADR, 0x001D0007)
OperationRegion (PMCS, PCI_Config, 0x54, 0x02) // Power Management Control/Status (ICH9R-3169722.pdf / 17.1.19 / page 664).
Field (PMCS, WordAcc, NoLock, Preserve)
{
, 15,
PMES, 1
} // Bit 15, PME Status, single bit.
OperationRegion (PWCR, PCI_Config, 0x62, 0x02) // Port Wake Capabilities Register (ICH9R-316972.pdf / 17.1.25 / page 667).
Field (PWCR, AnyAcc, NoLock, Preserve)
{
URE2, 9
}
Method (_PSW, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Store (Zero, URE2) // Clear all bits.
}
If (LEqual (Arg0, One))
{
Store (0x01FF, URE2) // Set bits 0-8
}
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"AAPL,current-available",
0x05DC,
"AAPL,current-extra",
0x04B0,
"AAPL,current-in-sleep",
0x09C4
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
And the last Device change for today is Device (USE2) which looks like this now:
Device (USE2)
{
Name (_ADR, 0x001A0007)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x04)
{
"AAPL,clock-id",
Buffer (One)
{
0x02
},
"device_type",
Buffer (0x05)
{
"EHCI"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Which I want you to change to this:
Device (UHCI) // Renamed from: USE2 - Extended with Power Management and Port Wake Capabilities.
{
Name (_ADR, 0x001A0007)
OperationRegion (PMCS, PCI_Config, 0x54, 0x02) // Power Management Control/Status (ICH9R-3169722.pdf / 17.1.19 / page 664).
Field (PMCS, WordAcc, NoLock, Preserve)
{
, 15,
PMES, 1
} // Bit 15, PME Status, single bit.
OperationRegion (PWCR, PCI_Config, 0x62, 0x02) // Port Wake Capabilities Register (ICH9R-316972.pdf / 17.1.25 / page 667).
Field (PWCR, AnyAcc, NoLock, Preserve)
{
URE2, 9
}
Method (_PSW, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Store (Zero, URE2) // Clear all bits.
}
If (LEqual (Arg0, One))
{
Store (0x01FF, URE2) // Set bits 0-8
}
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"AAPL,current-available",
0x05DC,
"AAPL,current-extra",
0x04B0,
"AAPL,current-in-sleep",
0x09C4
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
And as you might have notices, this requires some other additions to your DSDT. And this is what you need to change:
Method (_L0D, 0, NotSerialized)
{
Notify (\_SB.PCI0.USBE, 0x02)
Notify (\_SB.PCI0.USE2, 0x02)
Notify (\_SB.PWRB, 0x02)
Notify (\_SB.PCI0.HDEF, 0x02)
}
Which I want you to change into this:
Method (_L0D, 0, NotSerialized)
{
// New Power Management Control
If (\_SB.PCI0.EHCI.PMES)
{
Store (0x01, \_SB.PCI0.EHCI.PMES) // Port Wake Implemented
Notify (\_SB.PCI0.EHCI, 0x02) // Renamed from: USBE
Notify (\_SB.PWRB, 0x02)
}
// New Power Management Control
If (\_SB.PCI0.UHCI.PMES)
{
Store (0x01, \_SB.PCI0.UHCI.PMES) // Port Wake Implemented
Notify (\_SB.PCI0.UHCI, 0x02) // Renamed from: USE2
Notify (\_SB.PWRB, 0x02)
}
Notify (\_SB.PWRB, 0x02) // You might actually don't need this. Just check it!
Notify (\_SB.PCI0.HDEF, 0x02)
It's a lot of work. A crap load even. And I know, but it can be done. I also know that. It just takes time and effort
DO NOT COPY/PASTE CODE FROM THIS FORUM INTO YOUR DSDT!!!! It adds hidden characters which makes it impossible to compile!
For now later!