blob: 73eee52deb6d8f1af59d64ce51b135bc1ca755e9 [file] [log] [blame]
/* 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 = Zero
Local0 += 0x1000
Return (Local0)
}
Local0 = BTAB
If (Local0 != 0) {
BTAB = Zero
Local0 += 0x5000
Return (Local0)
}
Return (Zero)
}
/* 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 = Zero
ETAB = Zero
}
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
}