1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3Scope (\_SB) 4{ 5 Device(DOCK) 6 { 7 Name(_HID, "ACPI0003") 8 Name(_UID, 0x00) 9 Name(_PCL, Package() { \_SB } ) 10 11 Method(_DCK, 1, NotSerialized) 12 { 13 if (Arg0) { 14 /* connect dock */ 15 \GP28 = 1 16 \_SB.PCI0.LPCB.EC.DKR1 = 1 17 } else { 18 /* disconnect dock */ 19 \GP28 = 0 20 \_SB.PCI0.LPCB.EC.DKR1 = 0 21 } 22 Local0 = Arg0 ^ \_SB.PCI0.LPCB.EC.DKR1 23 Return (Local0) 24 } 25 26 Method(_STA, 0, NotSerialized) 27 { 28 Return (\_SB.PCI0.LPCB.EC.DKR1) 29 } 30 31 Name (G_ID, 0xFFFFFFFF) 32 /* Returns 0x7 (dock absent) or 0x3 (dock present) */ 33 Method(GGID, 0, NotSerialized) 34 { 35 Local0 = G_ID 36 if (Local0 == 0xFFFFFFFF) 37 { 38 Local0 = GP02 | (GP03 << 1) | (GP04 << 2) 39 If (Local0 == 0x00) 40 { 41 Local0 = 0x03 42 } 43 G_ID = Local0 44 } 45 return (Local0) 46 } 47 } 48} 49 50Scope(\_SB.PCI0.LPCB.EC) 51{ 52 Method(_Q18, 0, NotSerialized) 53 { 54 Notify(\_SB.DOCK, 3) 55 } 56 57 Method(_Q37, 0, NotSerialized) 58 { 59 Notify(\_SB.DOCK, 0) 60 } 61 62 Method(_Q45, 0, NotSerialized) 63 { 64 Notify(\_SB.DOCK, 3) 65 } 66 67 /* Undock button on dock */ 68 Method(_Q50, 0, NotSerialized) 69 { 70 Local0 = \_SB.DOCK.GGID () 71 if (Local0 != 0x07) 72 { 73 Notify(\_SB.DOCK, 3) 74 } 75 } 76 77 Method(_Q58, 0, NotSerialized) 78 { 79 Notify(\_SB.DOCK, 0) 80 } 81 82 /* Unplug power: only disconnect dock on force eject */ 83 Method(_Q5A, 0, NotSerialized) 84 { 85 Local0 = \_SB.DOCK.GGID () 86 if (Local0 == 0x07) 87 { 88 Notify(\_SB.DOCK, 3) 89 } 90 if (Local0 == 0x03) 91 { 92 Sleep(0x64) 93 Local1 = DKR1 94 if (Local1 == 1) 95 { 96 Notify(\_SB.DOCK, 0) 97 } 98 } 99 } 100} 101