/* SPDX-License-Identifier: GPL-2.0-only */ Device(EC) { Name (_HID, EISAID("PNP0C09")) Name (_UID, 0) Name (_GPE, THINKPAD_EC_GPE) Mutex (ECLK, 0) OperationRegion(ERAM, EmbeddedControl, 0x00, 0x100) Field (ERAM, ByteAcc, NoLock, Preserve) { Offset (0x02), DKR1, 1, /* Dock register 1 */ Offset (0x05), HSPA, 1, Offset (0x0C), LEDS, 8, /* LED state */ Offset (0x0F), , 7, TBSW, 1, /* Tablet mode switch */ Offset (0x1a), DKR2, 1, /* Dock register 2 */ Offset (0x2a), EVNT, 8, /* write will trigger EC event */ Offset (0x2f), , 6, FAND, 1, /* Fan disengage */ FANA, 1, /* Fan automatic mode enable */ Offset (0x30), , 6, ALMT, 1, /* Audio Mute + LED */ Offset (0x31), , 2, UWBE, 1, /* Ultra Wideband enable */ Offset (0x3a), AMUT, 1, /* Audio Mute (internal use) */ , 3, BTEB, 1, WLEB, 1, WWEB, 1, Offset (0x3B), , 1, KBLT, 1, /* Keyboard Light */ , 2, USPW, 1, /* USB Power enable */ Offset (0x48), HPPI, 1, /* Headphone plugged in */ GSTS, 1, /* Master wireless switch */ Offset (0x4e), WAKE, 16, Offset (0x78), TMP0, 8, /* Thermal Zone 0 temperature */ TMP1, 8, /* Thermal Zone 1 temperature */ Offset (0x81), PAGE, 8, /* Information Page Selector */ Offset (0xfe), , 4, DKR3, 1 /* Dock register 3 */ } /* Called on OperationRegion driver changes */ Method (_REG, 2, NotSerialized) { /* Wait for ERAM driver loaded */ if (Arg1 == 1) { /* Fill HKEY defaults on first boot */ if (^HKEY.INIT == 0) { Store (BTEB, ^HKEY.WBDC) Store (WWEB, ^HKEY.WWAN) Store (One, ^HKEY.INIT) } } } Method (_CRS, 0, Serialized) { Name (ECMD, ResourceTemplate() { IO (Decode16, 0x62, 0x62, 1, 1) IO (Decode16, 0x66, 0x66, 1, 1) }) Return (ECMD) } Method (TLED, 1, NotSerialized) { Store(Arg0, LEDS) } /* Not used for coreboot. Provided for compatibility with thinkpad-acpi. */ Method (LED, 2, NotSerialized) { TLED(Or(Arg0, Arg1)) } Method (_INI, 0, NotSerialized) { } Method (MUTE, 1, NotSerialized) { Store(Arg0, AMUT) } Method (RADI, 1, NotSerialized) { Store(Arg0, WLEB) Store(Arg0, WWEB) Store(Arg0, BTEB) } Method (USBP, 1, NotSerialized) { Store(Arg0, USPW) } Method (LGHT, 1, NotSerialized) { Store(Arg0, KBLT) } /* Sleep Button pressed */ Method(_Q13, 0, NotSerialized) { Notify(^SLPB, 0x80) } /* Brightness up GPE */ Method(_Q14, 0, NotSerialized) { BRIGHTNESS_UP() } /* Brightness down GPE */ Method(_Q15, 0, NotSerialized) { BRIGHTNESS_DOWN() } /* Next display GPE */ Method(_Q16, 0, NotSerialized) { Notify (\_SB.PCI0.GFX0, 0x82) } /* AC status change: present */ Method(_Q26, 0, NotSerialized) { Notify (AC, 0x80) \PNOT() } /* AC status change: not present */ Method(_Q27, 0, NotSerialized) { Notify (AC, 0x80) Store(0x50, EVNT) \PNOT() } Method(_Q2A, 0, NotSerialized) { Notify(^LID, 0x80) } Method(_Q2B, 0, NotSerialized) { Notify(^LID, 0x80) } /* IBM proprietary buttons. */ Method (_Q10, 0, NotSerialized) { ^HKEY.RHK (0x01) } /* * Alternative layout (like in the Thinkpad X1 Carbon 1st generation): * * Fn-F2 (_Q11) -> not mapped * * Fn-F3 (_Q12) -> scancode 0x01 (KEY_COFFEE) * * Default layout (like in the Thinkpad X220): * * Fn-F2 (_Q11) -> scancode 0x01 (KEY_COFFEE) * * Fn-F3 (_Q12) -> scancode 0x02 (KEY_BATTERY) */ #ifdef EC_LENOVO_H8_ALT_FN_F2F3_LAYOUT Method (_Q11, 0, NotSerialized) { // Not mapped } Method (_Q12, 0, NotSerialized) { ^HKEY.RHK (0x02) } #else Method (_Q11, 0, NotSerialized) { ^HKEY.RHK (0x02) } Method (_Q12, 0, NotSerialized) { ^HKEY.RHK (0x03) } #endif Method (_Q64, 0, NotSerialized) { ^HKEY.RHK (0x05) } Method (_Q65, 0, NotSerialized) { ^HKEY.RHK (0x06) } Method (_Q17, 0, NotSerialized) { ^HKEY.RHK (0x08) } Method (_Q66, 0, NotSerialized) { ^HKEY.RHK (0x0A) } Method (_Q6A, 0, NotSerialized) { ^HKEY.RHK (0x1B) } Method (_Q1A, 0, NotSerialized) { ^HKEY.RHK (0x0B) } Method (_Q1B, 0, NotSerialized) { ^HKEY.RHK (0x0C) } Method (_Q62, 0, NotSerialized) { ^HKEY.RHK (0x0D) } Method (_Q60, 0, NotSerialized) { ^HKEY.RHK (0x0E) } Method (_Q61, 0, NotSerialized) { ^HKEY.RHK (0x0F) } Method (_Q1F, 0, NotSerialized) { ^HKEY.RHK (0x12) } Method (_Q67, 0, NotSerialized) { ^HKEY.RHK (0x13) } Method (_Q63, 0, NotSerialized) { ^HKEY.RHK (0x14) } Method (_Q19, 0, NotSerialized) { ^HKEY.RHK (0x18) } Method (_Q1C, 0, NotSerialized) { ^HKEY.RHK (0x19) } Method (_Q1D, 0, NotSerialized) { ^HKEY.RHK (0x1A) } Method (_Q5C, 0, NotSerialized) { ^HKEY.RTAB (0xB) } Method (_Q5D, 0, NotSerialized) { ^HKEY.RTAB (0xC) } Method (_Q5E, 0, NotSerialized) { ^HKEY.RTAB (0x9) } Method (_Q5F, 0, NotSerialized) { ^HKEY.RTAB (0xA) } /* * Set FAN disengage: * Arg0: 1: Run at full speed * 0: Automatic fan control */ Method (FANE, 1, Serialized) { If (Arg0) { Store (One, FAND) Store (Zero, FANA) } Else { Store (Zero, FAND) Store (One, FANA) } } #include "ac.asl" #include "battery.asl" #include "sleepbutton.asl" #include "lid.asl" #include "beep.asl" #include "thermal.asl" #include "systemstatus.asl" #include "thinkpad.asl" }