blob: dfdcc4290d6effc2ece4ad59ac72e2e8f7abb9f0 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
Device (EC0)
{
Name (_HID, EisaId ("PNP0C09"))
Name (_UID, 0)
Name (_GPE, EC_GPE_SWI)
Name (ECOK, Zero)
Name (_CRS, ResourceTemplate () {
IO (Decode16, 0x62, 0x62, 0, 1)
IO (Decode16, 0x66, 0x66, 0, 1)
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF)
Field (ERAM, ByteAcc, Lock, Preserve)
{
Offset (0x7F),
LSTE, 1, /* lid state */
, 7,
ACEX, 1, /* AC adapter present */
BTEX, 1, /* battery present */
, 6,
Offset (0x84),
BTDC, 16, /* battery design capacity - mAh */
BTFV, 16, /* battery last full voltage - mV */
BTFC, 16, /* battery last full capacity - mAh */
Offset (0x8C),
BTST, 3, /* battery state */
, 5,
BTCR, 16, /* battery present current - mA */
BTRC, 16, /* battery remaining capacity - mAh */
BTVT, 16, /* battery present voltage - mV */
Offset (0xA3),
DSPO, 8, /* Display off - write 1 to power off display */
BCST, 8, /* battery charge start threshold - % */
BCET, 8, /* battery charge end threshold - % */
}
#include "button.asl"
#include "ac.asl"
#include "battery.asl"
#include "vbtn.asl"
Method (PTS, 1, Serialized) {
Printf ("EC: PTS: %o", ToHexString(Arg0))
If (ECOK) {
// Power off display
DSPO = One
}
}
Method (WAK, 1, Serialized) {
Printf ("EC: WAK: %o", ToHexString(Arg0))
If (ECOK) {
DSPO = Zero
^AC.ACEX = ACEX
Notify(BAT0, Zero)
Notify(AC, Zero)
}
}
Method (_Q54, 0, NotSerialized) // Power button press
{
Printf ("EC: _Q54: power button press")
Notify (PWRB, 0x80)
}
Method (_Q0A, 0, NotSerialized) // Charger plugged or unplugged
{
Printf ("EC: _Q0A: charger state changed")
If (ECOK) {
^AC.ACEX = ACEX
}
Notify(BAT0, 0x81) // Information change
Notify(AC, 0x80) // Status change
}
Method (_Q0B, 0, NotSerialized) // Battery status change
{
Printf ("EC: _Q0B: battery state changed")
Notify(BAT0, 0x81) // Information change
Notify(BAT0, 0x80) // Status change
}
/* There is a lid/cover sensor, but it is not reliable with a soft cover. */
Method (_Q0C, 0, NotSerialized) // Cover closed
{
Printf ("EC: _Q0C: cover closed")
}
Method (_Q0D, 0, NotSerialized) // Cover opened
{
Printf ("EC: _Q0D: cover opened")
}
Method (_REG, 2, Serialized) // _REG: Region Availability
{
Printf ("EC: _REG: %o, %o", Arg0, Arg1)
If ((Arg0 == 0x03) && (Arg1 == One)) {
// EC is now available
ECOK = One
// Set current AC and battery state
^AC.ACEX = ACEX
^BAT0.BTEX = BTEX
// Notify of changes
Notify(AC, Zero)
Notify(BAT0, Zero)
Printf ("EC is ready; BTEX=%o, ACEX=%o", BTEX, ACEX)
}
}
}