- Joined
- Dec 6, 2016
- Messages
- 14
- Motherboard
- Z97
- CPU
- i7
- Graphics
- hd520
- Mac
- Mobile Phone
Logic bug with charging/discharging status (AC adapter detection)
power plug in -> 100% charging -> Battery mode change
dsdt edit ???
Device (H_EC)
{
Name (_HID, EisaId ("PNP0C09") /* Embedded Controller Device */) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0062, // Range Minimum
0x0062, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IO (Decode16,
0x0066, // Range Minimum
0x0066, // Range Maximum
0x00, // Alignment
0x01, // Length
)
})
Name (ECON, Zero)
Name (ECST, Zero)
Method (_GPE, 0, NotSerialized) // _GPE: General Purpose Events
{
Store (GGPE (0x02040010), Local0)
Return (Local0)
}
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LAnd (LEqual (Arg0, 0x03), LEqual (Arg1, One)))
{
Store (One, ECON) /* \_SB_.PCI0.LPCB.H_EC.ECON */
Acquire (MUTX, 0xFFFF)
Store (One, ECN0) /* \_SB_.PCI0.LPCB.H_EC.ECN0 */
Release (MUTX)
}
If (LNot (^^^GFX0.GLID))
{
Store (One, LIDS) /* External reference */
Notify (LID0, 0x80) // Status Change
}
}
OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF)
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xB0),
IF00, 8,
IF01, 8,
IF10, 8,
IF11, 8,
IF20, 8,
IF21, 8,
IF30, 8,
IF31, 8,
IF40, 8,
IF41, 8,
IF50, 8,
IF51, 8,
IF60, 8,
IF61, 8,
IF70, 8,
IF71, 8,
IF80, 8,
IF81, 8,
ST00, 8,
ST01, 8,
ST10, 8,
ST11, 8,
ST20, 8,
ST21, 8,
ST30, 8,
ST31, 8,
PSTA, 8,
ECN0, 8,
DT1, 8,
DT2, 8,
CTMP, 8,
LCDL, 8,
OSSI, 8,
IBT1, 8,
IBT2, 8,
WTMS, 8,
AWT0, 8,
AWT1, 8,
AWT2, 8,
LSTE, 8,
WKRS, 8
}
OperationRegion (CMD0, SystemIO, 0x68, One)
Field (CMD0, ByteAcc, NoLock, Preserve)
{
CMDR, 8
}
Method (ECMD, 1, Serialized)
{
If (\ECON)
{
While (CMDR)
{
Stall (0x14)
}
Store (Arg0, CMDR) /* \_SB_.PCI0.LPCB.H_EC.CMDR */
}
}
Method (_Q10, 0, NotSerialized) // _Qxx: EC Query
{
^^^GFX0.GHDS (Zero)
Sleep (0x02EE)
}
Method (_QB3, 0, NotSerialized) // _Qxx: EC Query
{
Notify (BAT0, 0x80) // Status Change
Notify (BAT0, 0x81) // Information Change
Notify (AC0, 0x80) // Status Change
}
Method (_QBA, 0, NotSerialized) // _Qxx: EC Query
{
Store (Zero, LIDS) /* External reference */
Notify (LID0, 0x80) // Status Change
}
Method (_QBB, 0, NotSerialized) // _Qxx: EC Query
{
Store (One, LIDS) /* External reference */
Notify (LID0, 0x80) // Status Change
}
Method (_QC3, 0, NotSerialized) // _Qxx: EC Query
{
P8XH (Zero, 0xC3)
Store (0xFF, GTS) /* \_SB_.PCI0.LPCB.GTS_ */
Store (0xC3, SSMI) /* \_SB_.PCI0.LPCB.SSMI */
}
Method (_QC4, 0, NotSerialized) // _Qxx: EC Query
{
P8XH (Zero, 0xC2)
Store (0x0A, GTS) /* \_SB_.PCI0.LPCB.GTS_ */
Store (0xC2, SSMI) /* \_SB_.PCI0.LPCB.SSMI */
}
Method (_QC0, 0, NotSerialized) // _Qxx: EC Query
{
}
Method (_QC1, 0, NotSerialized) // _Qxx: EC Query
{
BRTN (0x86)
P8XH (Zero, 0x86)
}
Method (_QC2, 0, NotSerialized) // _Qxx: EC Query
{
BRTN (0x87)
P8XH (Zero, 0x87)
}
}
Device (AC0)
{
Name (_HID, "ACPI0003" /* Power Source Device */) // _HID: Hardware ID
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
LPCB
})
Method (_PSR, 0, NotSerialized) // _PSR: Power Source
{
If (LEqual (^^H_EC.ECON, One))
{
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (Zero)
}
If (LEqual (Local0, 0x81))
{
Return (One)
}
If (LEqual (Local0, 0x83))
{
Return (One)
}
Return (Zero)
}
Else
{
Return (Zero)
}
}
}
Device (BAT0)
{
Name (_HID, EisaId ("PNP0C0A") /* Control Method Battery */) // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
Name (PAK1, Package (0x0D)
{
Zero,
0x0708,
0x0708,
Zero,
0x2B5C,
0xB4,
0x5A,
0x10,
0x08,
" ",
"00002",
"LiIon",
"LENGDA"
})
Name (PAK2, Package (0x0D)
{
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
Zero,
0xFFFFFFFF,
Zero,
Zero,
Zero,
Zero,
" ",
"00002",
"LiIon",
"LENGDA"
})
Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
{
If (LEqual (^^H_EC.ECON, One))
{
Store (B1B2 (^^H_EC.IF00, ^^H_EC.IF01), Index (PAK1, Zero))
Store (B1B2 (^^H_EC.IF10, ^^H_EC.IF11), Index (PAK1, One))
Store (B1B2 (^^H_EC.IF20, ^^H_EC.IF21), Index (PAK1, 0x02))
Store (B1B2 (^^H_EC.IF30, ^^H_EC.IF31), Index (PAK1, 0x03))
Store (B1B2 (^^H_EC.IF40, ^^H_EC.IF41), Index (PAK1, 0x04))
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (PAK1) /* \_SB_.PCI0.LPCB.BAT0.PAK1 */
}
If (LEqual (Local0, 0x83))
{
Return (PAK1) /* \_SB_.PCI0.LPCB.BAT0.PAK1 */
}
If (LEqual (Local0, 0x81))
{
Return (PAK2) /* \_SB_.PCI0.LPCB.BAT0.PAK2 */
}
Return (PAK2) /* \_SB_.PCI0.LPCB.BAT0.PAK2 */
}
Else
{
Return (PAK2) /* \_SB_.PCI0.LPCB.BAT0.PAK2 */
}
}
Name (BFB0, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Name (BFB1, Package (0x04)
{
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
If (LEqual (^^H_EC.ECON, One))
{
Store (B1B2 (^^H_EC.ST00, ^^H_EC.ST01), Index (BFB0, Zero))
Store (B1B2 (^^H_EC.ST10, ^^H_EC.ST11), Index (BFB0, One))
Store (B1B2 (^^H_EC.ST20, ^^H_EC.ST21), Index (BFB0, 0x02))
Store (B1B2 (^^H_EC.ST30, ^^H_EC.ST31), Index (BFB0, 0x03))
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (BFB0) /* \_SB_.PCI0.LPCB.BAT0.BFB0 */
}
If (LEqual (Local0, 0x83))
{
Return (BFB0) /* \_SB_.PCI0.LPCB.BAT0.BFB0 */
}
If (LEqual (Local0, 0x81))
{
Return (BFB1) /* \_SB_.PCI0.LPCB.BAT0.BFB1 */
}
Return (BFB1) /* \_SB_.PCI0.LPCB.BAT0.BFB1 */
}
Else
{
Return (BFB1) /* \_SB_.PCI0.LPCB.BAT0.BFB1 */
}
}
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
LPCB
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (LEqual (^^H_EC.ECON, One))
{
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (0x1F)
}
If (LEqual (Local0, 0x83))
{
Return (0x1F)
}
If (LEqual (Local0, 0x81))
{
Return (0x0F)
}
Return (0x0F)
}
Else
{
Return (0x0F)
}
}
}
}
power plug in -> 100% charging -> Battery mode change
dsdt edit ???
Device (H_EC)
{
Name (_HID, EisaId ("PNP0C09") /* Embedded Controller Device */) // _HID: Hardware ID
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0062, // Range Minimum
0x0062, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IO (Decode16,
0x0066, // Range Minimum
0x0066, // Range Maximum
0x00, // Alignment
0x01, // Length
)
})
Name (ECON, Zero)
Name (ECST, Zero)
Method (_GPE, 0, NotSerialized) // _GPE: General Purpose Events
{
Store (GGPE (0x02040010), Local0)
Return (Local0)
}
Method (_REG, 2, NotSerialized) // _REG: Region Availability
{
If (LAnd (LEqual (Arg0, 0x03), LEqual (Arg1, One)))
{
Store (One, ECON) /* \_SB_.PCI0.LPCB.H_EC.ECON */
Acquire (MUTX, 0xFFFF)
Store (One, ECN0) /* \_SB_.PCI0.LPCB.H_EC.ECN0 */
Release (MUTX)
}
If (LNot (^^^GFX0.GLID))
{
Store (One, LIDS) /* External reference */
Notify (LID0, 0x80) // Status Change
}
}
OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF)
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xB0),
IF00, 8,
IF01, 8,
IF10, 8,
IF11, 8,
IF20, 8,
IF21, 8,
IF30, 8,
IF31, 8,
IF40, 8,
IF41, 8,
IF50, 8,
IF51, 8,
IF60, 8,
IF61, 8,
IF70, 8,
IF71, 8,
IF80, 8,
IF81, 8,
ST00, 8,
ST01, 8,
ST10, 8,
ST11, 8,
ST20, 8,
ST21, 8,
ST30, 8,
ST31, 8,
PSTA, 8,
ECN0, 8,
DT1, 8,
DT2, 8,
CTMP, 8,
LCDL, 8,
OSSI, 8,
IBT1, 8,
IBT2, 8,
WTMS, 8,
AWT0, 8,
AWT1, 8,
AWT2, 8,
LSTE, 8,
WKRS, 8
}
OperationRegion (CMD0, SystemIO, 0x68, One)
Field (CMD0, ByteAcc, NoLock, Preserve)
{
CMDR, 8
}
Method (ECMD, 1, Serialized)
{
If (\ECON)
{
While (CMDR)
{
Stall (0x14)
}
Store (Arg0, CMDR) /* \_SB_.PCI0.LPCB.H_EC.CMDR */
}
}
Method (_Q10, 0, NotSerialized) // _Qxx: EC Query
{
^^^GFX0.GHDS (Zero)
Sleep (0x02EE)
}
Method (_QB3, 0, NotSerialized) // _Qxx: EC Query
{
Notify (BAT0, 0x80) // Status Change
Notify (BAT0, 0x81) // Information Change
Notify (AC0, 0x80) // Status Change
}
Method (_QBA, 0, NotSerialized) // _Qxx: EC Query
{
Store (Zero, LIDS) /* External reference */
Notify (LID0, 0x80) // Status Change
}
Method (_QBB, 0, NotSerialized) // _Qxx: EC Query
{
Store (One, LIDS) /* External reference */
Notify (LID0, 0x80) // Status Change
}
Method (_QC3, 0, NotSerialized) // _Qxx: EC Query
{
P8XH (Zero, 0xC3)
Store (0xFF, GTS) /* \_SB_.PCI0.LPCB.GTS_ */
Store (0xC3, SSMI) /* \_SB_.PCI0.LPCB.SSMI */
}
Method (_QC4, 0, NotSerialized) // _Qxx: EC Query
{
P8XH (Zero, 0xC2)
Store (0x0A, GTS) /* \_SB_.PCI0.LPCB.GTS_ */
Store (0xC2, SSMI) /* \_SB_.PCI0.LPCB.SSMI */
}
Method (_QC0, 0, NotSerialized) // _Qxx: EC Query
{
}
Method (_QC1, 0, NotSerialized) // _Qxx: EC Query
{
BRTN (0x86)
P8XH (Zero, 0x86)
}
Method (_QC2, 0, NotSerialized) // _Qxx: EC Query
{
BRTN (0x87)
P8XH (Zero, 0x87)
}
}
Device (AC0)
{
Name (_HID, "ACPI0003" /* Power Source Device */) // _HID: Hardware ID
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
LPCB
})
Method (_PSR, 0, NotSerialized) // _PSR: Power Source
{
If (LEqual (^^H_EC.ECON, One))
{
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (Zero)
}
If (LEqual (Local0, 0x81))
{
Return (One)
}
If (LEqual (Local0, 0x83))
{
Return (One)
}
Return (Zero)
}
Else
{
Return (Zero)
}
}
}
Device (BAT0)
{
Name (_HID, EisaId ("PNP0C0A") /* Control Method Battery */) // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
Name (PAK1, Package (0x0D)
{
Zero,
0x0708,
0x0708,
Zero,
0x2B5C,
0xB4,
0x5A,
0x10,
0x08,
" ",
"00002",
"LiIon",
"LENGDA"
})
Name (PAK2, Package (0x0D)
{
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
Zero,
0xFFFFFFFF,
Zero,
Zero,
Zero,
Zero,
" ",
"00002",
"LiIon",
"LENGDA"
})
Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
{
If (LEqual (^^H_EC.ECON, One))
{
Store (B1B2 (^^H_EC.IF00, ^^H_EC.IF01), Index (PAK1, Zero))
Store (B1B2 (^^H_EC.IF10, ^^H_EC.IF11), Index (PAK1, One))
Store (B1B2 (^^H_EC.IF20, ^^H_EC.IF21), Index (PAK1, 0x02))
Store (B1B2 (^^H_EC.IF30, ^^H_EC.IF31), Index (PAK1, 0x03))
Store (B1B2 (^^H_EC.IF40, ^^H_EC.IF41), Index (PAK1, 0x04))
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (PAK1) /* \_SB_.PCI0.LPCB.BAT0.PAK1 */
}
If (LEqual (Local0, 0x83))
{
Return (PAK1) /* \_SB_.PCI0.LPCB.BAT0.PAK1 */
}
If (LEqual (Local0, 0x81))
{
Return (PAK2) /* \_SB_.PCI0.LPCB.BAT0.PAK2 */
}
Return (PAK2) /* \_SB_.PCI0.LPCB.BAT0.PAK2 */
}
Else
{
Return (PAK2) /* \_SB_.PCI0.LPCB.BAT0.PAK2 */
}
}
Name (BFB0, Package (0x04)
{
Zero,
Zero,
Zero,
Zero
})
Name (BFB1, Package (0x04)
{
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
If (LEqual (^^H_EC.ECON, One))
{
Store (B1B2 (^^H_EC.ST00, ^^H_EC.ST01), Index (BFB0, Zero))
Store (B1B2 (^^H_EC.ST10, ^^H_EC.ST11), Index (BFB0, One))
Store (B1B2 (^^H_EC.ST20, ^^H_EC.ST21), Index (BFB0, 0x02))
Store (B1B2 (^^H_EC.ST30, ^^H_EC.ST31), Index (BFB0, 0x03))
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (BFB0) /* \_SB_.PCI0.LPCB.BAT0.BFB0 */
}
If (LEqual (Local0, 0x83))
{
Return (BFB0) /* \_SB_.PCI0.LPCB.BAT0.BFB0 */
}
If (LEqual (Local0, 0x81))
{
Return (BFB1) /* \_SB_.PCI0.LPCB.BAT0.BFB1 */
}
Return (BFB1) /* \_SB_.PCI0.LPCB.BAT0.BFB1 */
}
Else
{
Return (BFB1) /* \_SB_.PCI0.LPCB.BAT0.BFB1 */
}
}
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
LPCB
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (LEqual (^^H_EC.ECON, One))
{
Store (^^H_EC.PSTA, Local0)
And (Local0, 0x83, Local0)
If (LEqual (Local0, 0x82))
{
Return (0x1F)
}
If (LEqual (Local0, 0x83))
{
Return (0x1F)
}
If (LEqual (Local0, 0x81))
{
Return (0x0F)
}
Return (0x0F)
}
Else
{
Return (0x0F)
}
}
}
}