You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

547 lines
18 KiB

/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20220331 (64-bit version)
* Copyright (c) 2000 - 2022 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of ssdt18.dat, Thu Sep 1 23:24:17 2022
*
* Original Table Header:
* Signature "SSDT"
* Length 0x00000906 (2310)
* Revision 0x01
* Checksum 0x89
* OEM ID "LENOVO"
* OEM Table ID "CB-01 "
* OEM Revision 0x00000001 (1)
* Compiler ID "ACPI"
* Compiler Version 0x00040000 (262144)
*/
DefinitionBlock ("", "SSDT", 1, "LENOVO", "CB-01 ", 0x00000001)
{
External (_SB_.PCI0.LPC0.EC0_, DeviceObj)
External (_SB_.PCI0.LPC0.EC0_.ECAV, UnknownObj)
External (_SB_.PCI0.LPC0.EC0_.LFCM, UnknownObj)
External (_SB_.PCI0.LPC0.EC0_.WECM, MethodObj) // 2 Arguments
Scope (\_SB.PCI0.LPC0.EC0)
{
Method (_Q4F, 0, NotSerialized) // _Qxx: EC Query, xx=0x00-0xFF
{
\_SB.UBTC.NTFY ()
}
}
Scope (\_SB)
{
Device (UBTC)
{
Name (_HID, EisaId ("USBC000")) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0CA0")) // _CID: Compatible ID
Name (_UID, Zero) // _UID: Unique ID
Name (_DDN, "USB Type C") // _DDN: DOS Device Name
Name (_ADR, Zero) // _ADR: Address
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
Method (_PS0, 0, Serialized) // _PS0: Power State 0
{
Sleep (0x03E8)
Sleep (0x01F4)
}
Method (_PS3, 0, Serialized) // _PS3: Power State 3
{
Sleep (0x03E8)
Sleep (0x64)
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Name (RBUF, ResourceTemplate ()
{
Memory32Fixed (ReadWrite,
0x7AF66000, // Address Base
0x00001000, // Address Length
)
})
Return (RBUF) /* \_SB_.UBTC._CRS.RBUF */
}
OperationRegion (ECMS, SystemIO, 0x72, 0x02)
Field (ECMS, ByteAcc, Lock, Preserve)
{
INDX, 8,
DATA, 8
}
Method (RECM, 1, Serialized)
{
INDX = Arg0
Return (DATA) /* \_SB_.UBTC.DATA */
}
Method (WECM, 2, Serialized)
{
INDX = Arg0
DATA = Arg1
}
Device (CR01)
{
Name (_ADR, One) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0x09,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x2,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "UPPER",
PLD_HorizontalPosition = "LEFT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x2,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0,
PLD_VerticalOffset = 0xFFFF,
PLD_HorizontalOffset = 0xFFFF)
})
}
Device (CR02)
{
Name (_ADR, One) // _ADR: Address
Name (_UPC, Package (0x04) // _UPC: USB Port Capabilities
{
0xFF,
0x09,
Zero,
Zero
})
Name (_PLD, Package (0x01) // _PLD: Physical Location of Device
{
ToPLD (
PLD_Revision = 0x2,
PLD_IgnoreColor = 0x1,
PLD_Red = 0x0,
PLD_Green = 0x0,
PLD_Blue = 0x0,
PLD_Width = 0x0,
PLD_Height = 0x0,
PLD_UserVisible = 0x1,
PLD_Dock = 0x0,
PLD_Lid = 0x0,
PLD_Panel = "UNKNOWN",
PLD_VerticalPosition = "UPPER",
PLD_HorizontalPosition = "LEFT",
PLD_Shape = "UNKNOWN",
PLD_GroupOrientation = 0x0,
PLD_GroupToken = 0x0,
PLD_GroupPosition = 0x6,
PLD_Bay = 0x0,
PLD_Ejectable = 0x0,
PLD_EjectRequired = 0x0,
PLD_CabinetNumber = 0x0,
PLD_CardCageNumber = 0x0,
PLD_Reference = 0x0,
PLD_Rotation = 0x0,
PLD_Order = 0x0,
PLD_VerticalOffset = 0xFFFF,
PLD_HorizontalOffset = 0xFFFF)
})
}
OperationRegion (USBC, SystemMemory, 0x7AF66000, 0x30)
Field (USBC, ByteAcc, Lock, Preserve)
{
VER1, 8,
VER2, 8,
RSV1, 8,
RSV2, 8,
CCI0, 8,
CCI1, 8,
CCI2, 8,
CCI3, 8,
CTL0, 8,
CTL1, 8,
CTL2, 8,
CTL3, 8,
CTL4, 8,
CTL5, 8,
CTL6, 8,
CTL7, 8,
MGI0, 8,
MGI1, 8,
MGI2, 8,
MGI3, 8,
MGI4, 8,
MGI5, 8,
MGI6, 8,
MGI7, 8,
MGI8, 8,
MGI9, 8,
MGIA, 8,
MGIB, 8,
MGIC, 8,
MGID, 8,
MGIE, 8,
MGIF, 8,
MGO0, 8,
MGO1, 8,
MGO2, 8,
MGO3, 8,
MGO4, 8,
MGO5, 8,
MGO6, 8,
MGO7, 8,
MGO8, 8,
MGO9, 8,
MGOA, 8,
MGOB, 8,
MGOC, 8,
MGOD, 8,
MGOE, 8,
MGOF, 8
}
OperationRegion (DBG0, SystemIO, 0x80, One)
Field (DBG0, ByteAcc, NoLock, Preserve)
{
IO80, 8
}
Method (NTFY, 0, Serialized)
{
IO80 = 0x4F
ECRD ()
Sleep (One)
Notify (\_SB.UBTC, 0x80) // Status Change
}
OperationRegion (H5FA, SystemMemory, 0xFE0B0421, One)
Field (H5FA, AnyAcc, Lock, Preserve)
{
HNTF, 8
}
OperationRegion (ECSM, SystemMemory, 0xFE0B0460, 0x30)
Field (ECSM, AnyAcc, Lock, Preserve)
{
HMPR, 8,
, 7,
HMDN, 1,
HADD, 8,
HCMD, 8,
HD00, 8,
HD01, 8,
HD02, 8,
HD03, 8,
HD04, 8,
HD05, 8,
HD06, 8,
HD07, 8,
HD08, 8,
HD09, 8,
HD0A, 8,
HD0B, 8,
HD0C, 8,
HD0D, 8,
HD0E, 8,
HD0F, 8,
Offset (0x24),
HCNT, 8
}
OperationRegion (ECSI, EmbeddedControl, Zero, 0x0100)
Field (ECSI, ByteAcc, NoLock, Preserve)
{
Offset (0x60),
EMPR, 8,
, 7,
EMDN, 1,
EADD, 8,
ECMD, 8,
ED00, 8,
ED01, 8,
ED02, 8,
ED03, 8,
ED04, 8,
ED05, 8,
ED06, 8,
ED07, 8,
ED08, 8,
ED09, 8,
ED0A, 8,
ED0B, 8,
ED0C, 8,
ED0D, 8,
ED0E, 8,
ED0F, 8,
Offset (0x84),
ECNT, 8
}
Method (CHKM, 0, NotSerialized)
{
Local0 = 0x03E8
While (HMPR)
{
Sleep (One)
Local0--
If (!Local0)
{
Return (0x8080)
}
}
If (HMDN)
{
Return (Zero)
}
Return (0x8081)
}
Method (CHKS, 0, NotSerialized)
{
Local0 = 0x03E8
While (EMPR)
{
Sleep (One)
Local0--
If (!Local0)
{
Return (0x8080)
}
}
If (EMDN)
{
Return (Zero)
}
Return (0x8081)
}
Name (RSTC, Zero)
Mutex (UBSY, 0x00)
Method (ECWR, 0, Serialized)
{
If (\_SB.PCI0.LPC0.EC0.ECAV)
{
If ((Acquire (\_SB.PCI0.LPC0.EC0.LFCM, 0xA000) == Zero))
{
Acquire (UBSY, 0xFFFF)
WECM (0x56, 0xAA)
IO80 = 0xB6
\_SB.PCI0.LPC0.EC0.WECM (0x4F, CTL0)
CHKM ()
HADD = 0x02
Sleep (One)
HCMD = 0x06
Sleep (One)
HD00 = MGO0 /* \_SB_.UBTC.MGO0 */
Sleep (One)
HD01 = MGO1 /* \_SB_.UBTC.MGO1 */
Sleep (One)
HD02 = MGO2 /* \_SB_.UBTC.MGO2 */
Sleep (One)
HD03 = MGO3 /* \_SB_.UBTC.MGO3 */
Sleep (One)
HD04 = MGO4 /* \_SB_.UBTC.MGO4 */
Sleep (One)
HD05 = MGO5 /* \_SB_.UBTC.MGO5 */
Sleep (One)
HD06 = MGO6 /* \_SB_.UBTC.MGO6 */
Sleep (One)
HD07 = MGO7 /* \_SB_.UBTC.MGO7 */
Sleep (One)
HD08 = MGO8 /* \_SB_.UBTC.MGO8 */
Sleep (One)
HD09 = MGO9 /* \_SB_.UBTC.MGO9 */
Sleep (One)
HD0A = MGOA /* \_SB_.UBTC.MGOA */
Sleep (One)
HD0B = MGOB /* \_SB_.UBTC.MGOB */
Sleep (One)
HD0C = MGOC /* \_SB_.UBTC.MGOC */
Sleep (One)
HD0D = MGOD /* \_SB_.UBTC.MGOD */
Sleep (One)
HD0E = MGOE /* \_SB_.UBTC.MGOE */
Sleep (One)
HD0F = MGOF /* \_SB_.UBTC.MGOF */
IO80 = 0xA1
HCNT = 0x10
Sleep (One)
EMPR = 0x0A
Sleep (One)
CHKM ()
HADD = 0x02
Sleep (One)
HCMD = 0x04
Sleep (One)
HD00 = CTL0 /* \_SB_.UBTC.CTL0 */
Sleep (One)
HD01 = CTL1 /* \_SB_.UBTC.CTL1 */
Sleep (One)
HD02 = CTL2 /* \_SB_.UBTC.CTL2 */
Sleep (One)
HD03 = CTL3 /* \_SB_.UBTC.CTL3 */
Sleep (One)
HD04 = CTL4 /* \_SB_.UBTC.CTL4 */
Sleep (One)
HD05 = CTL5 /* \_SB_.UBTC.CTL5 */
Sleep (One)
HD06 = CTL6 /* \_SB_.UBTC.CTL6 */
Sleep (One)
HD07 = CTL7 /* \_SB_.UBTC.CTL7 */
Sleep (One)
HCNT = 0x08
Sleep (One)
EMPR = 0x0A
Sleep (One)
CHKM ()
Release (UBSY)
Release (\_SB.PCI0.LPC0.EC0.LFCM)
}
}
}
Method (ECRD, 0, Serialized)
{
If (\_SB.PCI0.LPC0.EC0.ECAV)
{
If ((Acquire (\_SB.PCI0.LPC0.EC0.LFCM, 0xA000) == Zero))
{
Acquire (UBSY, 0xFFFF)
CHKM ()
HADD = 0x02
Sleep (One)
HCMD = 0x05
Sleep (One)
HCNT = 0x10
Sleep (One)
EMPR = 0x0B
Sleep (One)
Sleep (One)
CHKM ()
MGI0 = HD00 /* \_SB_.UBTC.HD00 */
Sleep (One)
MGI1 = HD01 /* \_SB_.UBTC.HD01 */
Sleep (One)
MGI2 = HD02 /* \_SB_.UBTC.HD02 */
Sleep (One)
MGI3 = HD03 /* \_SB_.UBTC.HD03 */
Sleep (One)
MGI4 = HD04 /* \_SB_.UBTC.HD04 */
Sleep (One)
MGI5 = HD05 /* \_SB_.UBTC.HD05 */
Sleep (One)
MGI6 = HD06 /* \_SB_.UBTC.HD06 */
Sleep (One)
MGI7 = HD07 /* \_SB_.UBTC.HD07 */
Sleep (One)
MGI8 = HD08 /* \_SB_.UBTC.HD08 */
Sleep (One)
MGI9 = HD09 /* \_SB_.UBTC.HD09 */
Sleep (One)
MGIA = HD0A /* \_SB_.UBTC.HD0A */
Sleep (One)
MGIB = HD0B /* \_SB_.UBTC.HD0B */
Sleep (One)
MGIC = HD0C /* \_SB_.UBTC.HD0C */
Sleep (One)
MGID = HD0D /* \_SB_.UBTC.HD0D */
Sleep (One)
MGIE = HD0E /* \_SB_.UBTC.HD0E */
Sleep (One)
MGIF = HD0F /* \_SB_.UBTC.HD0F */
CHKM ()
HADD = 0x02
Sleep (One)
HCMD = 0x03
Sleep (One)
HCNT = 0x04
Sleep (One)
EMPR = 0x0B
Sleep (One)
Sleep (One)
CHKM ()
CCI0 = HD00 /* \_SB_.UBTC.HD00 */
Sleep (One)
CCI1 = HD01 /* \_SB_.UBTC.HD01 */
Sleep (One)
CCI2 = HD02 /* \_SB_.UBTC.HD02 */
Sleep (One)
CCI3 = HD03 /* \_SB_.UBTC.HD03 */
Release (UBSY)
Release (\_SB.PCI0.LPC0.EC0.LFCM)
}
}
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("6f8398c2-7ca4-11e4-ad36-631042b5008f") /* Unknown UUID */))
{
If ((ToInteger (Arg2) == Zero))
{
Return (Buffer (One)
{
0x0F // .
})
}
ElseIf ((ToInteger (Arg2) == One))
{
WECM (0x56, 0xAA)
IO80 = 0xA8
ECWR ()
IO80 = 0xA9
}
ElseIf ((ToInteger (Arg2) == 0x02))
{
IO80 = 0xAA
ECRD ()
IO80 = 0xAB
}
Else
{
Return (Zero)
}
}
Return (Zero)
}
}
}
}