summaryrefslogtreecommitdiff
path: root/src/mainboard/system76/lemp9/acpi
diff options
context:
space:
mode:
authorJeremy Soller <jeremy@system76.com>2020-01-17 12:13:27 -0700
committerPatrick Georgi <pgeorgi@google.com>2020-01-27 07:42:41 +0000
commitec430ee343bdceaf21a7be462e8f856102bd2c09 (patch)
treee7bdc1dfea17ee71f091b9a388bce03baf5719a4 /src/mainboard/system76/lemp9/acpi
parentf93c157a93ca568167b7bc6474361293e360c20f (diff)
mainboard/system76: Add System76 Lemur Pro (lemp9)
The System76 Lemur Pro (lemp9) is an upcoming laptop computer. Support in coreboot is developed by System76 and provided as the default firmware option. Testing is done on a pre-production model expected to be identical from a firmware perspective to the production model. Working: - Payload - Tianocore - CPU - Intel i7-10510U - Intel i5-10210U - EC - ITE IT5570E running https://github.com/system76/ec - Backlit Keyboard, with standard PS/2 keycodes and SCI hotkeys - Battery - Charger, using AC adapter or USB-C PD - Suspend/resume - Touchpad - GPU - Intel UHD Graphics 620 - GOP driver is recommended, VBT is provided - eDP 14-inch 1920x1080 LCD - HDMI video - USB-C DisplayPort video - Memory - Channel 0: 8-GB on-board DDR4 Samsung K4AAG165WA-BCTD - Channel 1: 8-GB/16-GB/32-GB DDR4 SO-DIMM - Networking - M.2 PCIe/CNVi WiFi/Bluetooth - Sound - Realtek ALC293D - Internal speaker - Internal microphone - Combined headphone/microphone 3.5-mm jack - HDMI audio - USB-C DisplayPort audio - Storage - M.2 PCIe/SATA SSD-1 - M.2 PCIe/SATA SSD-2 - RTS5227S MicroSD card reader - USB - 1280x720 CCD camera - USB 3.1 Gen 2 Type-C (left) - USB 3.1 Gen 2 Type-A (left) - USB 3.1 Gen 1 Type-A (right) Not working: - TPM2 - SPI bus 0, chip select 2 is used. Chip selects other than 0 are not currently supported by the intel fast_spi driver. Signed-off-by: Jeremy Soller <jeremy@system76.com> Change-Id: Ib0a32bbc6f89a662085ab4a254676bc1fad7dc60 Reviewed-on: https://review.coreboot.org/c/coreboot/+/38463 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Diffstat (limited to 'src/mainboard/system76/lemp9/acpi')
-rw-r--r--src/mainboard/system76/lemp9/acpi/ac.asl35
-rw-r--r--src/mainboard/system76/lemp9/acpi/battery.asl183
-rw-r--r--src/mainboard/system76/lemp9/acpi/buttons.asl26
-rw-r--r--src/mainboard/system76/lemp9/acpi/ec.asl231
-rw-r--r--src/mainboard/system76/lemp9/acpi/ec_ram.asl188
-rw-r--r--src/mainboard/system76/lemp9/acpi/gpe.asl24
-rw-r--r--src/mainboard/system76/lemp9/acpi/hid.asl63
-rw-r--r--src/mainboard/system76/lemp9/acpi/lid.asl36
-rw-r--r--src/mainboard/system76/lemp9/acpi/mainboard.asl28
-rw-r--r--src/mainboard/system76/lemp9/acpi/s76.asl97
-rw-r--r--src/mainboard/system76/lemp9/acpi/sleep.asl24
11 files changed, 935 insertions, 0 deletions
diff --git a/src/mainboard/system76/lemp9/acpi/ac.asl b/src/mainboard/system76/lemp9/acpi/ac.asl
new file mode 100644
index 0000000000..6574c61e41
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/ac.asl
@@ -0,0 +1,35 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Device (AC)
+{
+ Name (_HID, "ACPI0003" /* Power Source Device */) // _HID: Hardware ID
+ Name (_PCL, Package (0x01) // _PCL: Power Consumer List
+ {
+ _SB
+ })
+
+ Name (ACFG, One)
+
+ Method (_PSR, 0, NotSerialized) // _PSR: Power Source
+ {
+ Return (ACFG)
+ }
+
+ Method (_STA, 0, NotSerialized) // _STA: Status
+ {
+ Return (0x0F)
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/battery.asl b/src/mainboard/system76/lemp9/acpi/battery.asl
new file mode 100644
index 0000000000..c1e6c6ce1d
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/battery.asl
@@ -0,0 +1,183 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Device (BAT0)
+{
+ Name (_HID, EisaId ("PNP0C0A") /* Control Method Battery */) // _HID: Hardware ID
+ Name (_UID, Zero) // _UID: Unique ID
+ Name (_PCL, Package (0x01) // _PCL: Power Consumer List
+ {
+ _SB
+ })
+ Name (BFCC, Zero)
+ Method (_STA, 0, NotSerialized) // _STA: Status
+ {
+ If (^^PCI0.LPCB.EC0.ECOK)
+ {
+ If (^^PCI0.LPCB.EC0.BAT0)
+ {
+ Return (0x1F)
+ }
+ Else
+ {
+ Return (0x0F)
+ }
+ }
+ Else
+ {
+ Return (0x0F)
+ }
+ }
+
+ Name (PBIF, Package (0x0D)
+ {
+ One,
+ 0xFFFFFFFF,
+ 0xFFFFFFFF,
+ One,
+ 0x39D0,
+ Zero,
+ Zero,
+ 0x40,
+ 0x40,
+ "BAT",
+ "0001",
+ "LION",
+ "Notebook"
+ })
+ Method (IVBI, 0, NotSerialized)
+ {
+ PBIF [One] = 0xFFFFFFFF
+ PBIF [0x02] = 0xFFFFFFFF
+ PBIF [0x04] = 0xFFFFFFFF
+ PBIF [0x09] = " "
+ PBIF [0x0A] = " "
+ PBIF [0x0B] = " "
+ PBIF [0x0C] = " "
+ BFCC = Zero
+ }
+
+ Method (UPBI, 0, NotSerialized)
+ {
+ If (^^PCI0.LPCB.EC0.BAT0)
+ {
+ Local0 = (^^PCI0.LPCB.EC0.BDC0 & 0xFFFF)
+ PBIF [One] = Local0
+ Local0 = (^^PCI0.LPCB.EC0.BFC0 & 0xFFFF)
+ PBIF [0x02] = Local0
+ BFCC = Local0
+ Local0 = (^^PCI0.LPCB.EC0.BDV0 & 0xFFFF)
+ PBIF [0x04] = Local0
+ Local0 = (^^PCI0.LPCB.EC0.BCW0 & 0xFFFF)
+ PBIF [0x05] = Local0
+ Local0 = (^^PCI0.LPCB.EC0.BCL0 & 0xFFFF)
+ PBIF [0x06] = Local0
+ PBIF [0x09] = "BAT"
+ PBIF [0x0A] = "0001"
+ PBIF [0x0B] = "LION"
+ PBIF [0x0C] = "Notebook"
+ }
+ Else
+ {
+ IVBI ()
+ }
+ }
+
+ Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
+ {
+ If (^^PCI0.LPCB.EC0.ECOK)
+ {
+ UPBI ()
+ }
+ Else
+ {
+ IVBI ()
+ }
+
+ Return (PBIF) /* \_SB_.BAT0.PBIF */
+ }
+
+ Name (PBST, Package (0x04)
+ {
+ Zero,
+ 0xFFFFFFFF,
+ 0xFFFFFFFF,
+ 0x3D90
+ })
+ Method (IVBS, 0, NotSerialized)
+ {
+ PBST [Zero] = Zero
+ PBST [One] = 0xFFFFFFFF
+ PBST [0x02] = 0xFFFFFFFF
+ PBST [0x03] = 0x2710
+ }
+
+ Method (UPBS, 0, NotSerialized)
+ {
+ If (^^PCI0.LPCB.EC0.BAT0)
+ {
+ Local0 = Zero
+ Local1 = Zero
+ If (^^AC.ACFG)
+ {
+ If (((^^PCI0.LPCB.EC0.BST0 & 0x02) == 0x02))
+ {
+ Local0 |= 0x02
+ Local1 = (^^PCI0.LPCB.EC0.BPR0 & 0xFFFF)
+ }
+ }
+ Else
+ {
+ Local0 |= One
+ Local1 = (^^PCI0.LPCB.EC0.BPR0 & 0xFFFF)
+ }
+
+ Local7 = (Local1 & 0x8000)
+ If ((Local7 == 0x8000))
+ {
+ Local1 ^= 0xFFFF
+ }
+
+ Local2 = (^^PCI0.LPCB.EC0.BRC0 & 0xFFFF)
+ Local3 = (^^PCI0.LPCB.EC0.BPV0 & 0xFFFF)
+ PBST [Zero] = Local0
+ PBST [One] = Local1
+ PBST [0x02] = Local2
+ PBST [0x03] = Local3
+ If ((BFCC != ^^PCI0.LPCB.EC0.BFC0))
+ {
+ Notify (BAT0, 0x81) // Information Change
+ }
+ }
+ Else
+ {
+ IVBS ()
+ }
+ }
+
+ Method (_BST, 0, NotSerialized) // _BST: Battery Status
+ {
+ If (^^PCI0.LPCB.EC0.ECOK)
+ {
+ UPBS ()
+ }
+ Else
+ {
+ IVBS ()
+ }
+
+ Return (PBST) /* \_SB_.BAT0.PBST */
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/buttons.asl b/src/mainboard/system76/lemp9/acpi/buttons.asl
new file mode 100644
index 0000000000..62847b5c09
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/buttons.asl
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Device (PWRB)
+{
+ Name (_HID, EisaId ("PNP0C0C"))
+ Name (_PRW, Package () { 0x29 /* GPP_D9 */, 3 })
+}
+
+Device (SLPB)
+{
+ Name (_HID, EisaId ("PNP0C0E"))
+ Name (_PRW, Package () { 0x29 /* GPP_D9 */, 3 })
+}
diff --git a/src/mainboard/system76/lemp9/acpi/ec.asl b/src/mainboard/system76/lemp9/acpi/ec.asl
new file mode 100644
index 0000000000..c26670a009
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/ec.asl
@@ -0,0 +1,231 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Device (EC0)
+{
+ Name (_HID, EisaId ("PNP0C09") /* Embedded Controller Device */) // _HID: Hardware ID
+ Name (_GPE, 0x50 /* GPP_E16 */) // _GPE: General Purpose Events
+ 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
+ )
+ })
+
+ #include "acpi/ec_ram.asl"
+
+ Name (ECOK, Zero)
+ Method (_REG, 2, Serialized) // _REG: Region Availability
+ {
+ Debug = Concatenate("EC: _REG", Concatenate(ToHexString(Arg0), Concatenate(" ", ToHexString(Arg1))))
+ If (((Arg0 == 0x03) && (Arg1 == One))) {
+ // Enable hardware touchpad lock, airplane mode, and keyboard backlight keys
+ ECOS = 1
+
+ // Enable software display brightness keys
+ WINF = 1
+
+ // Set current AC state
+ ^^^^AC.ACFG = ADP
+ // Update battery information and status
+ ^^^^BAT0.UPBI()
+ ^^^^BAT0.UPBS()
+
+ PNOT ()
+
+ // EC is now available
+ ECOK = Arg1
+
+ // Reset System76 Device
+ ^^^^S76D.RSET()
+ }
+ }
+
+ Method (PTS, 1, Serialized) {
+ Debug = Concatenate("EC: PTS: ", ToHexString(Arg0))
+ If (ECOK) {
+ // Clear wake cause
+ WFNO = Zero
+ }
+ }
+
+ Method (WAK, 1, Serialized) {
+ Debug = Concatenate("EC: WAK: ", ToHexString(Arg0))
+ If (ECOK) {
+ // Set current AC state
+ ^^^^AC.ACFG = ADP
+
+ // Update battery information and status
+ ^^^^BAT0.UPBI()
+ ^^^^BAT0.UPBS()
+
+ // Notify of changes
+ Notify(^^^^AC, Zero)
+ Notify(^^^^BAT0, Zero)
+
+ Sleep (1000)
+
+ // Reset System76 Device
+ ^^^^S76D.RSET()
+ }
+ }
+
+ Method (_Q0A, 0, NotSerialized) // Touchpad Toggle
+ {
+ Debug = "EC: Touchpad Toggle"
+ }
+
+ Method (_Q0B, 0, NotSerialized) // Screen Toggle
+ {
+ Debug = "EC: Screen Toggle"
+ }
+
+ Method (_Q0C, 0, NotSerialized) // Mute
+ {
+ Debug = "EC: Mute"
+ }
+
+ Method (_Q0D, 0, NotSerialized) // Keyboard Backlight
+ {
+ Debug = "EC: Keyboard Backlight"
+ }
+
+ Method (_Q0E, 0, NotSerialized) // Volume Down
+ {
+ Debug = "EC: Volume Down"
+ }
+
+ Method (_Q0F, 0, NotSerialized) // Volume Up
+ {
+ Debug = "EC: Volume Up"
+ }
+
+ Method (_Q10, 0, NotSerialized) // Switch Video Mode
+ {
+ Debug = "EC: Switch Video Mode"
+ }
+
+ Method (_Q11, 0, NotSerialized) // Brightness Down
+ {
+ Debug = "EC: Brightness Down"
+ ^^^^HIDD.HPEM (20)
+ }
+
+ Method (_Q12, 0, NotSerialized) // Brightness Up
+ {
+ Debug = "EC: Brightness Up"
+ ^^^^HIDD.HPEM (19)
+ }
+
+ Method (_Q13, 0, NotSerialized) // Camera Toggle
+ {
+ Debug = "EC: Camera Toggle"
+ }
+
+ Method (_Q14, 0, NotSerialized) // Airplane Mode
+ {
+ Debug = "EC: Airplane Mode"
+ // Only send HIDD message when hardware airplane mode not in use
+ If (ECOS == 2) {
+ ^^^^HIDD.HPEM (8)
+ }
+ }
+
+ Method (_Q15, 0, NotSerialized) // Suspend Button
+ {
+ Debug = "EC: Suspend Button"
+ Notify (SLPB, 0x80)
+ }
+
+ Method (_Q16, 0, NotSerialized) // AC Detect
+ {
+ Debug = "EC: AC Detect"
+ ^^^^AC.ACFG = ADP
+ Notify (AC, 0x80) // Status Change
+ Sleep (0x01F4)
+ If (BAT0)
+ {
+ Notify (^^^^BAT0, 0x81) // Information Change
+ Sleep (0x32)
+ Notify (^^^^BAT0, 0x80) // Status Change
+ Sleep (0x32)
+ }
+ }
+
+ Method (_Q17, 0, NotSerialized) // BAT0 Update
+ {
+ Debug = "EC: BAT0 Update (17)"
+ Notify (^^^^BAT0, 0x81) // Information Change
+ }
+
+ Method (_Q19, 0, NotSerialized) // BAT0 Update
+ {
+ Debug = "EC: BAT0 Update (19)"
+ Notify (^^^^BAT0, 0x81) // Information Change
+ }
+
+ Method (_Q1B, 0, NotSerialized) // Lid Close
+ {
+ Debug = "EC: Lid Close"
+ Notify (LID0, 0x80)
+ }
+
+ Method (_Q1C, 0, NotSerialized) // Thermal Trip
+ {
+ Debug = "EC: Thermal Trip"
+ /* TODO
+ Notify (\_TZ.TZ0, 0x81) // Thermal Trip Point Change
+ Notify (\_TZ.TZ0, 0x80) // Thermal Status Change
+ */
+ }
+
+ Method (_Q1D, 0, NotSerialized) // Power Button
+ {
+ Debug = "EC: Power Button"
+ Notify (PWRB, 0x80)
+ }
+
+ Method (_Q50, 0, NotSerialized) // Other Events
+ {
+ Local0 = OEM4
+ If (Local0 == 0x8A) {
+ Debug = "EC: White Keyboard Backlight"
+ Notify (^^^^S76D, 0x80)
+ } ElseIf (Local0 == 0x9F) {
+ Debug = "EC: Color Keyboard Toggle"
+ Notify (^^^^S76D, 0x81)
+ } ElseIf (Local0 == 0x81) {
+ Debug = "EC: Color Keyboard Down"
+ Notify (^^^^S76D, 0x82)
+ } ElseIf (Local0 == 0x82) {
+ Debug = "EC: Color Keyboard Up"
+ Notify (^^^^S76D, 0x83)
+ } ElseIf (Local0 == 0x80) {
+ Debug = "EC: Color Keyboard Color Change"
+ Notify (^^^^S76D, 0x84)
+ } Else {
+ Debug = Concatenate("EC: Other: ", ToHexString(Local0))
+ }
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/ec_ram.asl b/src/mainboard/system76/lemp9/acpi/ec_ram.asl
new file mode 100644
index 0000000000..4bb452b6e3
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/ec_ram.asl
@@ -0,0 +1,188 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF)
+Field (ERAM, ByteAcc, Lock, Preserve)
+{
+ NMSG, 8,
+ SLED, 4,
+ Offset (0x02),
+ MODE, 1,
+ FAN0, 1,
+ TME0, 1,
+ TME1, 1,
+ FAN1, 1,
+ , 2,
+ Offset (0x03),
+ LSTE, 1,
+ LSW0, 1,
+ LWKE, 1,
+ WAKF, 1,
+ , 2,
+ PWKE, 1,
+ MWKE, 1,
+ AC0, 8,
+ PSV, 8,
+ CRT, 8,
+ TMP, 8,
+ AC1, 8,
+ BBST, 8,
+ Offset (0x0B),
+ Offset (0x0C),
+ Offset (0x0D),
+ Offset (0x0E),
+ SLPT, 8,
+ SWEJ, 1,
+ SWCH, 1,
+ Offset (0x10),
+ ADP, 1,
+ AFLT, 1,
+ BAT0, 1,
+ BAT1, 1,
+ , 3,
+ PWOF, 1,
+ WFNO, 8,
+ BPU0, 32,
+ BDC0, 32,
+ BFC0, 32,
+ BTC0, 32,
+ BDV0, 32,
+ BST0, 32,
+ BPR0, 32,
+ BRC0, 32,
+ BPV0, 32,
+ BTP0, 16,
+ BRS0, 16,
+ BCW0, 32,
+ BCL0, 32,
+ BCG0, 32,
+ BG20, 32,
+ BMO0, 64,
+ BIF0, 64,
+ BSN0, 32,
+ BTY0, 64,
+ Offset (0x67),
+ Offset (0x68),
+ ECOS, 8,
+ LNXD, 8,
+ ECPS, 8,
+ Offset (0x6C),
+ BTMP, 16,
+ EVTN, 8,
+ Offset (0x72),
+ PRCL, 8,
+ PRC0, 8,
+ PRC1, 8,
+ PRCM, 8,
+ PRIN, 8,
+ PSTE, 8,
+ PCAD, 8,
+ PEWL, 8,
+ PWRL, 8,
+ PECD, 8,
+ PEHI, 8,
+ PECI, 8,
+ PEPL, 8,
+ PEPM, 8,
+ PWFC, 8,
+ PECC, 8,
+ PDT0, 8,
+ PDT1, 8,
+ PDT2, 8,
+ PDT3, 8,
+ PRFC, 8,
+ PRS0, 8,
+ PRS1, 8,
+ PRS2, 8,
+ PRS3, 8,
+ PRS4, 8,
+ PRCS, 8,
+ PEC0, 8,
+ PEC1, 8,
+ PEC2, 8,
+ PEC3, 8,
+ CMDR, 8,
+ CVRT, 8,
+ GTVR, 8,
+ FANT, 8,
+ SKNT, 8,
+ AMBT, 8,
+ MCRT, 8,
+ DIM0, 8,
+ DIM1, 8,
+ PMAX, 8,
+ PPDT, 8,
+ PECH, 8,
+ PMDT, 8,
+ TSD0, 8,
+ TSD1, 8,
+ TSD2, 8,
+ TSD3, 8,
+ CPUP, 16,
+ MCHP, 16,
+ SYSP, 16,
+ CPAP, 16,
+ MCAP, 16,
+ SYAP, 16,
+ CFSP, 16,
+ CPUE, 16,
+ Offset (0xC6),
+ Offset (0xC7),
+ VGAT, 8,
+ OEM1, 8,
+ OEM2, 8,
+ OEM3, 16,
+ OEM4, 8,
+ Offset (0xCE),
+ DUT1, 8,
+ DUT2, 8,
+ RPM1, 16,
+ RPM2, 16,
+ RPM4, 16,
+ Offset (0xD7),
+ DTHL, 8,
+ DTBP, 8,
+ AIRP, 8,
+ WINF, 8,
+ RINF, 8,
+ Offset (0xDD),
+ INF2, 8,
+ MUTE, 1,
+ Offset (0xE0),
+ RPM3, 16,
+ ECKS, 8,
+ Offset (0xE4),
+ , 4,
+ XTUF, 1,
+ EP12, 1,
+ Offset (0xE5),
+ INF3, 8,
+ Offset (0xE7),
+ GFOF, 8,
+ Offset (0xE9),
+ KPCR, 1,
+ Offset (0xEA),
+ Offset (0xF0),
+ PL1T, 16,
+ PL2T, 16,
+ TAUT, 8,
+ Offset (0xF8),
+ FCMD, 8,
+ FDAT, 8,
+ FBUF, 8,
+ FBF1, 8,
+ FBF2, 8,
+ FBF3, 8
+}
diff --git a/src/mainboard/system76/lemp9/acpi/gpe.asl b/src/mainboard/system76/lemp9/acpi/gpe.asl
new file mode 100644
index 0000000000..e68c9cd306
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/gpe.asl
@@ -0,0 +1,24 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+// GPP_D9 SCI
+Method (_L29, 0, Serialized) {
+ Debug = Concatenate("GPE _L29: ", ToHexString(\_SB.PCI0.LPCB.EC0.WFNO))
+ If (\_SB.PCI0.LPCB.EC0.ECOK) {
+ If (\_SB.PCI0.LPCB.EC0.WFNO == One) {
+ Notify(\_SB.LID0, 0x80)
+ }
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/hid.asl b/src/mainboard/system76/lemp9/acpi/hid.asl
new file mode 100644
index 0000000000..1f151d5582
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/hid.asl
@@ -0,0 +1,63 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Device (HIDD)
+{
+ Name (_HID, "INT33D5")
+ Name (HBSY, Zero)
+ Name (HIDX, Zero)
+ Name (HRDY, Zero)
+
+ Method (HDEM, 0, Serialized)
+ {
+ HBSY = Zero
+ Return (HIDX)
+ }
+
+ Method (HDMM, 0, Serialized)
+ {
+ Return (Zero)
+ }
+
+ Method (HDSM, 1, Serialized)
+ {
+ HRDY = Arg0
+ }
+
+ Method (HPEM, 1, Serialized)
+ {
+ HBSY = One
+ HIDX = Arg0
+
+ Notify (HIDD, 0xC0)
+ Local0 = Zero
+ While (((Local0 < 0xFA) && HBSY))
+ {
+ Sleep (0x04)
+ Local0++
+ }
+
+ If ((HBSY == One))
+ {
+ HBSY = Zero
+ HIDX = Zero
+ Return (One)
+ }
+ Else
+ {
+ Return (Zero)
+ }
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/lid.asl b/src/mainboard/system76/lemp9/acpi/lid.asl
new file mode 100644
index 0000000000..729a0d9090
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/lid.asl
@@ -0,0 +1,36 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Device (LID0)
+{
+ Name (_HID, EisaId ("PNP0C0D"))
+ Name (_PRW, Package () { 0x29 /* GPP_D9 */, 3 })
+
+ Method (_LID, 0, NotSerialized) {
+ DEBUG = "LID: _LID"
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ Return (^^PCI0.LPCB.EC0.LSTE)
+ } Else {
+ Return (One)
+ }
+ }
+
+ Method (_PSW, 1, NotSerialized) {
+ DEBUG = Concatenate("LID: _PSW: ", ToHexString(Arg0))
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ ^^PCI0.LPCB.EC0.LWKE = Arg0
+ }
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/mainboard.asl b/src/mainboard/system76/lemp9/acpi/mainboard.asl
new file mode 100644
index 0000000000..d065ee166e
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/mainboard.asl
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+Scope (\_SB) {
+ #include "ac.asl"
+ #include "battery.asl"
+ #include "buttons.asl"
+ #include "hid.asl"
+ #include "lid.asl"
+ #include "s76.asl"
+ #include "sleep.asl"
+}
+
+Scope (_GPE) {
+ #include "gpe.asl"
+}
diff --git a/src/mainboard/system76/lemp9/acpi/s76.asl b/src/mainboard/system76/lemp9/acpi/s76.asl
new file mode 100644
index 0000000000..145feb0c72
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/s76.asl
@@ -0,0 +1,97 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+// Notifications:
+// 0x80 - hardware backlight toggle
+// 0x81 - backlight toggle
+// 0x82 - backlight down
+// 0x83 - backlight up
+// 0x84 - backlight color change
+Device (S76D) {
+ Name (_HID, "17761776")
+ Name (_UID, 0)
+
+ Method (RSET, 0, Serialized) {
+ Debug = "S76D: RSET"
+ SAPL(0)
+ SKBL(0)
+ }
+
+ Method (INIT, 0, Serialized) {
+ Debug = "S76D: INIT"
+ RSET()
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ // Set flags to use software control
+ ^^PCI0.LPCB.EC0.ECOS = 2
+ Return (0)
+ } Else {
+ Return (1)
+ }
+ }
+
+ Method (FINI, 0, Serialized) {
+ Debug = "S76D: FINI"
+ RSET()
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ // Set flags to use hardware control
+ ^^PCI0.LPCB.EC0.ECOS = 1
+ Return (0)
+ } Else {
+ Return (1)
+ }
+ }
+
+ // Get Airplane LED
+ Method (GAPL, 0, Serialized) {
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ If (^^PCI0.LPCB.EC0.AIRP & 0x40) {
+ Return (1)
+ }
+ }
+ Return (0)
+ }
+
+ // Set Airplane LED
+ Method (SAPL, 1, Serialized) {
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ If (Arg0) {
+ ^^PCI0.LPCB.EC0.AIRP |= 0x40
+ } Else {
+ ^^PCI0.LPCB.EC0.AIRP &= 0xBF
+ }
+ }
+ }
+
+ // Get KB LED
+ Method (GKBL, 0, Serialized) {
+ Local0 = 0
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ ^^PCI0.LPCB.EC0.FDAT = One
+ ^^PCI0.LPCB.EC0.FCMD = 0xCA
+ Local0 = ^^PCI0.LPCB.EC0.FBUF
+ ^^PCI0.LPCB.EC0.FCMD = Zero
+ }
+ Return (Local0)
+ }
+
+ // Set KB Led
+ Method (SKBL, 1, Serialized) {
+ If (^^PCI0.LPCB.EC0.ECOK) {
+ ^^PCI0.LPCB.EC0.FDAT = Zero
+ ^^PCI0.LPCB.EC0.FBUF = Arg0
+ ^^PCI0.LPCB.EC0.FCMD = 0xCA
+ }
+ }
+}
diff --git a/src/mainboard/system76/lemp9/acpi/sleep.asl b/src/mainboard/system76/lemp9/acpi/sleep.asl
new file mode 100644
index 0000000000..9a3ecaa373
--- /dev/null
+++ b/src/mainboard/system76/lemp9/acpi/sleep.asl
@@ -0,0 +1,24 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2019 System76
+ *
+ * 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.
+ */
+
+/* Method called from _PTS prior to enter sleep state */
+Method (MPTS, 1) {
+ \_SB.PCI0.LPCB.EC0.PTS (Arg0)
+}
+
+/* Method called from _WAK prior to wakeup */
+Method (MWAK, 1) {
+ \_SB.PCI0.LPCB.EC0.WAK (Arg0)
+}