1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3/* ACPI_POWER_RECORD */ 4Name (ECPR, 0) 5 6Method (ECQP, 0, Serialized) 7{ 8 Local0 = R (PWSR) 9 Local1 = Local0 ^ ECPR 10 ECPR = Local0 11 12 If (EBIT (ACEX, Local1)) { 13 Printf ("AC Power Status Changed") 14 Notify (AC, 0x80) 15 } 16 17 If (EBIT (BTEX, Local1)) { 18 If (EBIT (BTEX, Local0)) { 19 Printf ("BAT0 Inserted") 20 Notify (BAT0, 0x81) 21 } Else { 22 Printf ("BAT0 Removed") 23 Notify (BAT0, 0x80) 24 Notify (BAT0, 0x81) 25 } 26 } 27 28 /* 29 * Battery status is cleared when read so always use the value from 30 * PWSR directly regardless of the previous value stored in ECPR. 31 */ 32 If (EBIT (BTSC, Local0)) { 33 Printf ("BAT0 Status Change") 34 Notify (BAT0, 0x80) 35 } 36} 37 38/* Handle events in PmEv1 */ 39Method (ECQ1, 1, Serialized) 40{ 41 /* Power button pressed */ 42 If (EBIT (E1PB, Arg0)) { 43 Printf ("Power Button Event") 44 /* Do not notify \_SB.PWRB here to prevent double event */ 45 } 46 47 /* LID state changed */ 48 If (EBIT (E1LD, Arg0)) { 49 Printf ("Lid State Changed") 50 Notify (^LID0, 0x80) 51 } 52 53 /* Power Event */ 54 If (EBIT (E1PW, Arg0)) { 55 Printf ("Power Event") 56 ECQP () 57 } 58 59 /* Sleep Button */ 60 If (EBIT (E1SB, Arg0)) { 61 Printf ("Sleep Button") 62 } 63} 64 65/* Handle events in PmEv2 */ 66Method (ECQ2, 1, Serialized) 67{ 68 Printf ("EVT2: %o", Arg0) 69 70 If (EBIT (E2QS, Arg0)) { 71 Printf ("QS EVENT") 72 Notify (^WEVT, 0x90) 73 } 74 75 If (EBIT (E2OR, Arg0)) { 76 If (R (OTBL)) { 77 Printf ("EC event indicates tablet mode") 78 Notify (^VBTN, ^VTBL) 79 } Else { 80 Printf ("EC event indicates laptop mode") 81 Notify (^VBTN, ^VLAP) 82 } 83 } 84} 85 86/* Handle events in PmEv3 */ 87Method (ECQ3, 1, Serialized) 88{ 89 Printf ("EVT3: %o", Arg0) 90 91 If (EBIT (E3CP, Arg0)) { 92 If (R (P2PB)) { 93 Printf ("Power button pressed") 94 Notify (^VBTN, ^VPPB) 95 } Else { 96 Printf ("Power button released") 97 Notify (^VBTN, ^VRPB) 98 } 99 } 100 101#ifdef EC_ENABLE_DPTF 102 /* Theraml Events */ 103 If (EBIT (E3TH, Arg0)) { 104 ^PATX () 105 } 106#endif 107} 108 109/* Handle events in PmEv4 */ 110Method (ECQ4, 1, Serialized) 111{ 112 Printf ("EVT4: %o", Arg0) 113} 114 115/* Process all events */ 116Method (_Q66, 0, Serialized) 117{ 118 Local0 = R (EVT1) 119 If (Local0) { 120 ECQ1 (Local0) 121 } 122 123 Local0 = R (EVT2) 124 If (Local0) { 125 ECQ2 (Local0) 126 } 127 128 Local0 = R (EVT3) 129 If (Local0) { 130 ECQ3 (Local0) 131 } 132 133 Local0 = R (EVT4) 134 If (Local0) { 135 ECQ4 (Local0) 136 } 137} 138 139/* UCSI SCI uses a unique event code */ 140Method (_Q79, 0, Serialized) 141{ 142 If (ISSX == 0) { 143 Printf ("EC _Q79 UCSI Event") 144 145 \_SB.UCSI.RMSG() 146 147 Notify (\_SB.UCSI, 0x80) 148 ^UCEP = 0 149 } Else { 150 Printf ("EC _Q79 UCSI Event Masked in S0ix") 151 ^UCEP = 1 152 } 153} 154