blob: 22c88e0c49c23763e296eacf2a8aa791344edfed [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
Device (EC0)
{
Name (_HID, EISAID ("PNP0C09"))
Name (_UID, 0)
Name (_GPE, THINKPAD_EC_GPE)
Mutex (ECLK, 0x07)
/* EmbeddedControl should work as well, but memory mapped is faster. */
OperationRegion (ERAM, SystemMemory, (CONFIG_EC_BASE_ADDRESS + 0x100), 0x100)
Field (ERAM, ByteAcc, Lock, Preserve)
{
, 1,
, 1,
HKFA, 1, // FN lock (Hotkey / FN row toggle)
, 1,
, 1,
, 1,
, 1,
Offset(0x0c),
HLCL, 8, // LED control
Offset(0x46),
, 4,
ONAC, 1,
, 3,
Offset(0x81),
PAGE, 8,
}
/* Battery info page 0 */
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset(0xA0),
SBRC, 16, /* Remaining capacity */
SBFC, 16, /* Full-charge capacity */
SBAE, 16,
SBRS, 16,
SBAC, 16, /* Present rate */
SBVO, 16, /* Present voltage */
SBAF, 16,
SBBS, 16,
}
/* Battery info page 1 */
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
, 15,
SBCM, 1, /* Power unit (0 == mA/mAh, 1 == mW/mWh) */
SBMD, 16,
SBCC, 16,
}
/* Battery info page 2 */
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBDC, 16, /* Design Capacity */
SBDV, 16, /* Design Voltage */
SBOM, 16,
SBSI, 16,
SBDT, 16,
SBSN, 16, /* Serial number */
}
/* Battery info page 4 */
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBCH, 32, /* Type (LiON) */
}
/* Battery info page 5 */
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBMN, 128, /* Manufacturer */
}
/* Battery info page 6 */
Field (ERAM, ByteAcc, NoLock, Preserve)
{
Offset (0xA0),
SBDN, 128, /* Model */
}
Method (_CRS, 0, Serialized)
{
Name (ECMD, ResourceTemplate()
{
IO (Decode16, 0x62, 0x62, 0, 1)
IO (Decode16, 0x66, 0x66, 0, 1)
IO (Decode16, 0x700, 0x700, 0, 8)
Memory32Fixed(ReadOnly, CONFIG_EC_BASE_ADDRESS, 0x1000, FF00)
})
Return (ECMD)
}
/* Increase brightness hotkey */
Method (_Q14, 0, NotSerialized) {
BRIGHTNESS_UP()
^HKEY.MHKQ (0x1010)
}
/* Decrease brightness hotkey */
Method (_Q15, 0, NotSerialized) {
BRIGHTNESS_DOWN()
^HKEY.MHKQ (0x1011)
}
/* Video output switch hotkey */
Method (_Q16, 0, NotSerialized) {
Notify (\_SB.PCI0.GFX0, 0x82)
^HKEY.MHKQ (0x1007)
}
Method (_Q19, 0, NotSerialized)
{
^HKEY.MHKQ (0x1018)
}
/* Switched to AC power */
Method (_Q26, 0, NotSerialized)
{
PWRS = 1
Notify (^AC, 0x80)
Notify (^BAT0, 0x80)
\PNOT ()
^HKEY.MHKQ (0x6040)
}
/* Switched to battery power */
Method (_Q27, 0, NotSerialized)
{
PWRS = 0
Notify (^AC, 0x80)
Notify (^BAT0, 0x80)
\PNOT ()
^HKEY.MHKQ (0x6040)
}
/* Lid opened */
Method (_Q2A, 0, NotSerialized)
{
LIDS = 1
Notify(^LID, 0x80)
^HKEY.MHKQ (0x5002)
}
/* Lid closed */
Method (_Q2B, 0, NotSerialized)
{
LIDS = 0
Notify(^LID, 0x80)
^HKEY.MHKQ (0x5001)
}
/* Tablet swivel down */
Method (_Q35, 0, NotSerialized)
{
^HKEY.MHKQ (0x60c0)
^HKEY.MHKQ (0x500a)
}
/* Tablet swivel up */
Method (_Q36, 0, NotSerialized)
{
^HKEY.MHKQ (0x60c0)
^HKEY.MHKQ (0x5009)
}
/* Tablet rotate lock button */
Method (_Q37, 0, NotSerialized)
{
^HKEY.MHKQ (0x6020)
}
/* Numlock pressed */
Method (_Q3F, 0, NotSerialized)
{
^HKEY.MHKQ (0x6000)
}
/* RFKill status changed */
Method (_Q41, 0, NotSerialized) {
^HKEY.MHKQ (0x7000)
}
/* Mute hotkey */
Method (_Q43, 0, NotSerialized) {
^HKEY.MHKQ (0x1017)
}
/* Settings hotkey */
Method (_Q5A, 0, NotSerialized)
{
^HKEY.MHKQ (0x101D)
}
/* Search hotkey */
Method (_Q5B, 0, NotSerialized)
{
^HKEY.MHKQ (0x101E)
}
/* Scale hotkey */
Method (_Q5C, 0, NotSerialized)
{
^HKEY.MHKQ (0x101F)
}
/* File hotkey */
Method (_Q5D, 0, NotSerialized)
{
^HKEY.MHKQ (0x1020)
}
/* RFkill hotkey */
Method (_Q64, 0, NotSerialized) {
^HKEY.MHKQ (0x1005)
}
/* Mic mute hotkey */
Method (_Q6A, 0, NotSerialized)
{
^HKEY.MHKQ (0x101B)
}
/* FN key pressed */
Method (_Q70, 0, NotSerialized) { }
/* FN+Esc pressed / FN row mode switch */
Method (_Q74, 0, NotSerialized) {
HKFA = 1 ^ HKFA
^HKEY.MHKQ (0x6060)
}
/* Implements enough of the Lenovo hotkey device for
* thinkpad-acpi to work, no real support for hotkey masking */
Device (HKEY)
{
Name (_HID, EisaId ("LEN0068"))
Name (DHKC, Zero)
Name (DHKV, Zero)
Name (DHKN, 0xFC018070) // Hotkey mask
Mutex (XDHK, 0x07)
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Method (MHKV, 0, NotSerialized)
{
Return (0x0100) // Interface version 1.0
}
Method (MHKA, 0, NotSerialized) // Hotkey all mask
{
Return (0xFFFFFFFF)
}
Method (MHKM, 2, NotSerialized) // Set hotkey mask
{
Acquire (XDHK, 0xFFFF)
Local0 = 1 << Arg0--
If (Arg1) {
DHKN |= Local0
} Else {
DHKN &= ~Local0
}
Release (XDHK)
}
Method (MHKC, 1, NotSerialized) // Hotkey disable?
{
Acquire (XDHK, 0xFFFF)
DHKC = Arg0
Release (XDHK)
}
Method (MHKP, 0, NotSerialized) // Hotkey poll
{
Acquire (XDHK, 0xFFFF)
Local0 = 0
if (DHKV) {
Local0 = DHKV
DHKV = 0
}
Release (XDHK)
Return (Local0)
}
Method (MHKQ, 1, NotSerialized) // Send hotkey event
{
Acquire (XDHK, 0xFFFF)
DHKV = Arg0
Release (XDHK)
Notify (HKEY, 0x80) // Status Change
}
}
/* LED support for thinkpad-acpi */
Method (LED, 2, NotSerialized)
{
HLCL = Arg0 | Arg1
}
Device (AC)
{
Name (_HID, "ACPI0003")
Name (_PCL, Package (1) { \_SB })
Method (_PSR, 0, NotSerialized)
{
Return (ONAC)
}
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
}
/* Battery is H8 compatible, but requires an explicit delay */
#define BATTERY_PAGE_DELAY_MS 20
#include <ec/lenovo/h8/acpi/battery.asl>
/* LID is H8 compatible */
#include <ec/lenovo/h8/acpi/lid.asl>
}