diff options
Diffstat (limited to 'src/ec')
-rw-r--r-- | src/ec/google/wilco/acpi/ec.asl | 1 | ||||
-rw-r--r-- | src/ec/google/wilco/acpi/event.asl | 126 |
2 files changed, 127 insertions, 0 deletions
diff --git a/src/ec/google/wilco/acpi/ec.asl b/src/ec/google/wilco/acpi/ec.asl index d669854920..cddfe3fc2e 100644 --- a/src/ec/google/wilco/acpi/ec.asl +++ b/src/ec/google/wilco/acpi/ec.asl @@ -134,6 +134,7 @@ Device (EC0) #include "ec_ram.asl" #include "ac.asl" #include "battery.asl" + #include "event.asl" #include "lid.asl" #include "platform.asl" } diff --git a/src/ec/google/wilco/acpi/event.asl b/src/ec/google/wilco/acpi/event.asl new file mode 100644 index 0000000000..b43086c6c3 --- /dev/null +++ b/src/ec/google/wilco/acpi/event.asl @@ -0,0 +1,126 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2018 Google LLC + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/* ACPI_POWER_RECORD */ +Name (ECPR, 0) + +Method (ECQP, 0, Serialized) +{ + Local0 = R (APWR) + Local1 = Local0 ^ ECPR + ECPR = Local0 + + If (EBIT (APAC, Local1)) { + Printf ("AC Power Status Changed") + Notify (AC, 0x80) + } + + If (EBIT (APB1, Local1)) { + If (EBIT (APB1, Local0)) { + Printf ("BAT0 Inserted") + Notify (BAT0, 0x81) + } Else { + Printf ("BAT0 Removed") + Notify (BAT0, 0x80) + Notify (BAT0, 0x81) + } + } + + If (EBIT (APC1, Local1)) { + Printf ("BAT0 Status Change") + Notify (BAT0, 0x80) + } +} + +/* Handle events in PmEv1 */ +Method (ECQ1, 1, Serialized) +{ + /* Power button pressed */ + If (EBIT (E1PB, Arg0)) { + Printf ("Power Button Event") + /* Do not notify \_SB.PWRB here to prevent double event */ + } + + /* LID state changed */ + If (EBIT (E1LD, Arg0)) { + Printf ("Lid State Changed") + Notify (^LID, 0x80) + } + + /* Power Event */ + If (EBIT (E1PW, Arg0)) { + Printf ("Power Event") + ECQP () + } + + /* Sleep Button */ + If (EBIT (E1SB, Arg0)) { + Printf ("Sleep Button") + } +} + +/* Handle events in PmEv2 */ +Method (ECQ2, 1, Serialized) +{ + Printf ("EVT2: %o", Arg0) +} + +/* Handle events in PmEv3 */ +Method (ECQ3, 1, Serialized) +{ + Printf ("EVT3: %o", Arg0) +} + +/* Handle events in PmEv4 */ +Method (ECQ4, 1, Serialized) +{ + Printf ("EVT4: %o", Arg0) +} + +/* Handle QuickSet events */ +Method (ECQS, 1, Serialized) +{ + Printf ("QS EVENT %o", Arg0) +} + +/* Process all events */ +Method (_Q66, 0, Serialized) +{ + Local0 = R (EVT1) + If (Local0) { + ECQ1 (Local0) + } + + Local0 = R (EVT2) + If (Local0) { + ECQ2 (Local0) + } + + Local0 = R (EVT3) + If (Local0) { + ECQ3 (Local0) + } + + Local0 = R (EVT4) + If (Local0) { + ECQ4 (Local0) + } + + Local0 = R (QSEC) + For (Local1 = 0, Local1 < Local0, Local1++) { + ECQS (R (QSEB)) + } +} |