/* SPDX-License-Identifier: GPL-2.0-only */ Device (HKEY) { /* Generated by ssdt.c */ External (\HBDC, IntObj) External (\HWAN, IntObj) External (\HKBL, IntObj) External (\HUWB, IntObj) Name (_HID, EisaId (CONFIG_THINKPADEC_HKEY_EISAID)) Name (BTN, 0) Name (BTAB, 0) /* MASK */ Name (DHKN, 0x080C) /* Effective Mask */ Name (EMSK, 0) /* Effective Mask for tablet */ Name (ETAB, 0) /* Device enabled. */ Name (EN, 0) Method (_STA, 0, NotSerialized) { Return (0x0F) } /* Retrieve event. */ Method (MHKP, 0, NotSerialized) { Local0 = BTN If (Local0 != 0) { BTN = 0 Local0 += 0x1000 Return (Local0) } Local0 = BTAB If (Local0 != 0) { BTAB = 0 Local0 += 0x5000 Return (Local0) } Return (0) } /* Report event */ Method (RHK, 1, NotSerialized) { Local0 = 1 << (Arg0 - 1) If (EMSK & Local0) { BTN = Arg0 Notify (HKEY, 0x80) } } /* Report tablet */ Method (RTAB, 1, NotSerialized) { Local0 = 1 << (Arg0 - 1) If (ETAB & Local0) { BTAB = Arg0 Notify (HKEY, 0x80) } } /* Enable/disable all events. */ Method (MHKC, 1, NotSerialized) { If (Arg0) { EMSK = DHKN ETAB = Ones } Else { EMSK = 0 ETAB = 0 } EN = Arg0 } /* Enable/disable event. */ Method (MHKM, 2, NotSerialized) { If (Arg0 <= 0x20) { Local0 = 1 << (Arg0 - 1) If (Arg1) { DHKN |= Local0 } Else { DHKN = DHKN & ~Local0 } If (EN) { EMSK = DHKN } } } /* Mask hotkey all. */ Method (MHKA, 0, NotSerialized) { Return (0x07FFFFFF) } /* Report tablet mode switch state */ Method (MHKG, 0, NotSerialized) { Return (TBSW << 3) } /* Mute audio */ Method (SSMS, 1, NotSerialized) { ALMT = Arg0 } /* Control mute microphone LED */ Method (MMTS, 1, NotSerialized) { If (Arg0) { TLED(0x8E) } Else { TLED(0x0E) } } /* Version */ Method (MHKV, 0, NotSerialized) { Return (0x0100) } /* Master wireless switch state */ Method (WLSW, 0, NotSerialized) { Return (\_SB.PCI0.LPCB.EC.GSTS) } /* Set to one on first boot */ Name (INIT, 0) /* Has thinkpad_acpi module loaded */ Name (HAST, 0) /* State after sleep */ Name (WBDC, 0) /* * Returns the current state: * Bit 0: BT HW present * Bit 1: BT radio enabled * Bit 2: BT state at resume */ Method (GBDC, 0) { HAST = 1 If (HBDC) { Local0 = 1 If(\_SB.PCI0.LPCB.EC.BTEB) { Local0 |= 2 } Local0 |= WBDC << 2 Return (Local0) } Else { Return (0) } } /* * Set the current state: * Bit 1: BT radio enabled * Bit 2: BT state at resume */ Method (SBDC, 1) { HAST = 1 If (HBDC) { Local0 = (Arg0 & 2) >> 1 \_SB.PCI0.LPCB.EC.BTEB = Local0 Local0 = (Arg0 & 4) >> 2 WBDC = Local0 } } /* State after sleep */ Name (WWAN, 0) /* * Returns the current state: * Bit 0: WWAN HW present * Bit 1: WWAN radio enabled * Bit 2: WWAN state at resume */ Method (GWAN, 0) { HAST = 1 If (HWAN) { Local0 = 1 If(\_SB.PCI0.LPCB.EC.WWEB) { Local0 |= 2 } Local0 |= WWAN << 2 Return (Local0) } Else { Return (0) } } /* * Set the current state: * Bit 1: WWAN radio enabled * Bit 2: WWAN state at resume */ Method (SWAN, 1) { HAST = 1 If (HWAN) { Local0 = (Arg0 & 2) >> 1 \_SB.PCI0.LPCB.EC.WWEB = Local0 WWAN = (Arg0 & 4) >> 2 } } /* * Argument is unused. * Returns the current state: * Bit 9: Backlight HW present * Bit 0-1: Brightness level */ Method (MLCG, 1) { If (HKBL) { Local0 = 0x200 /* FIXME: Support 2bit brightness control */ Local0 |= \_SB.PCI0.LPCB.EC.KBLT Return (Local0) } Else { Return (0) } } /* * Set the current state: * Bit 0-1: Brightness level */ Method (MLCS, 1) { If (HKBL) { /* FIXME: Support 2bit brightness control */ \_SB.PCI0.LPCB.EC.WWEB = Arg0 & 1 } } /* * Returns the current state: * Bit 0: UWB HW present * Bit 1: UWB radio enabled */ Method (GUWB, 0) { If (HUWB) { Local0 = 1 If(\_SB.PCI0.LPCB.EC.UWBE) { Local0 |= 2 } Return (Local0) } Else { Return (0) } } /* * Set the current state: * Bit 1: UWB radio enabled */ Method (SUWB, 1) { If (HUWB) { Local0 = (Arg0 & 2) >> 1 \_SB.PCI0.LPCB.EC.UWBE = Local0 } } /* * Called from _WAK */ Method (WAKE, 1) { If (HAST) { \_SB.PCI0.LPCB.EC.BTEB = WBDC \_SB.PCI0.LPCB.EC.WWEB = WWAN } } #if CONFIG(H8_HAS_BAT_THRESHOLDS_IMPL) #include "thinkpad_bat_thresholds.asl" #endif }