blob: e657f4ca6fb8a503c99a610f62a38889dc8f2e73 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
Field (ECRM, ByteAcc, NoLock, Preserve)
{
Offset (0x84),
, 3,
LCTV, 1,
BATP, 4,
BPU, 1,
Offset (0x86),
BSEL, 4, /* battery select */
Offset (0x87),
LB1, 8,
LB2, 8,
BDC, 16,
Offset (0x8D),
BFC, 16, /* battery full capacity */
BRTE, 16,
BTC, 1,
Offset (0x92),
BME, 16,
BDN, 8,
BDV, 16, /* battery design voltage */
BCV1, 16,
BST, 4,
Offset (0xC9),
BSN, 16, /* battery serial number */
BDAT, 16, /* battery date */
BMF, 8,
}
Name (NGBF, 0xFF)
Name (NGBT, 0xFF)
Name (GACP, 0x07)
Name (NBAP, 0x00)
Name (NNBO, 0x01)
Name (NDCB, 0x00)
Mutex (BTMX, 0x00)
#define NLB1 0xC8 /* design capacity of warning */
#define NLB2 0x64 /* design capacity of low */
Method (ITLB, 0, NotSerialized)
{
Local0 = (NLB1 + 9) % 0x0a
Local1 = (NLB1 + 9) / 0x0a
Local0 = (0x96 + 9) % 0x0a
Local2 = (0x96 + 9) / 0x0a
Local0 = Local0
LB1 = Local1
LB2 = Local2
}
Method (PWUP, 2, Serialized)
{
Local0 = 0x00
Acquire (BTMX, 0xFFFF)
Local1 = (Arg0 | GACP)
GACP = (Local1 & 0x07)
If ((GACP & 0x02))
{
NGBF |= Arg1
}
If ((GACP & 0x04))
{
If ((NGBT != 0xFF))
{
Local0 = 0x01
}
NGBT |= Arg1
}
Release (BTMX)
Return (Local0)
}
Method (GBAP, 0, Serialized)
{
Acquire (BTMX, 0xFFFF)
If ((GACP & 0x02))
{
GACP &= 0x05
Release (BTMX)
Acquire (ECMX, 0xFFFF)
NBAP = BATP
Release (ECMX)
}
Else
{
Release (BTMX)
}
Return (NBAP)
}
Method (BTDR, 1, Serialized)
{
If ((Arg0 == 0x01))
{
NNBO = 0x01
}
ElseIf ((Arg0 == 0x00))
{
NNBO = 0x00
}
Return (NNBO)
}
Method (BSTA, 1, Serialized)
{
BTDR (0x01)
Local0 = GBAP ()
Local1 = 0x0F
If ((Local0 & Arg0))
{
Local1 = 0x1F
}
Return (Local1)
}
Device (BAT0)
{
Name (_HID, EisaId ("PNP0C0A"))
Name (_UID, 0x01)
Method (_STA, 0, NotSerialized)
{
Return (BSTA (0x01))
}
Method (_BIF, 0, NotSerialized)
{
Return (BTIF (0x00))
}
Method (_BST, 0, NotSerialized)
{
Return (BTSZ (0x00))
}
Name (_PCL, Package (0x01)
{
\_SB
})
}
Device (BAT1)
{
Name (_HID, EisaId ("PNP0C0A"))
Name (_UID, 0x02)
Method (_STA, 0, NotSerialized)
{
Return (BSTA (0x02))
}
Method (_BIF, 0, NotSerialized)
{
Return (BTIF (0x01))
}
Method (_BST, 0, NotSerialized)
{
Return (BTSZ (0x01))
}
Name (_PCL, Package (0x01)
{
\_SB
})
}
Name (NBTI, Package (0x02)
{
Package (0x0D)
{
0x01, /* power unit: mA */
0xFFFFFFFF, /* design capacity */
0xFFFFFFFF, /* last full charge capacity */
0x01, /* battery technology */
0xFFFFFFFF, /* design voltage */
0x00, /* design capacity of warning */
0x00, /* design capacity of low */
0x64, /* battery capacity granularity 1 */
0x64, /* battery capacity granularity 2 */
"Primary", /* model number */
"100000", /* serial number */
"LIon", /* battery type */
"Hewlett-Packard" /* OEM information */
},
Package (0x0D)
{
0x01,
0xFFFFFFFF,
0xFFFFFFFF,
0x01,
0xFFFFFFFF,
0x00,
0x00,
0x64,
0x64,
"Travel",
"100000",
"LIon",
"Hewlett-Packard"
}
})
Name (NBST, Package (0x02)
{
Package (0x04) {0x00, 0x00, 0x0FA0, 0x04B0},
Package (0x04) {0x00, 0x00, 0x0FA0, 0x04B0}
})
Name (NDBS, Package (0x04)
{
0x00,
0x00,
0x0FA0,
0x04B0
})
Method (\ISTR, 2, Serialized)
{
Name (NUMB, Buffer (6) { " " })
Local0 = Arg0
Local1 = Arg1
While (Local1)
{
Local1--
Local2 = Local0 % 10
Local0 = Local0 / 10
NUMB[Local1] = Local2 + 48
}
ToString (NUMB, Arg1, Local3)
Return (Local3)
}
Method (GBSS, 2, Serialized)
{
Local3 = \ISTR (Arg0, 0x05)
Concatenate (Local3, " ", Local4)
Local0 = (Arg1 >> 0x09)
Local1 = (Local0 + 1980)
Local2 = \ISTR (Local1, 0x04)
Concatenate (Local4, Local2, Local3)
Concatenate (Local3, "/", Local4)
Local0 = (Arg1 >> 0x05)
Local1 = (Local0 & 0x0F)
Local2 = \ISTR (Local1, 0x02)
Concatenate (Local4, Local2, Local3)
Concatenate (Local3, "/", Local4)
Local1 = (Arg1 & 0x1F)
Local2 = \ISTR (Local1, 0x02)
Concatenate (Local4, Local2, Local3)
Return (Local3)
}
Method (BTIG, 1, Serialized) /* in vendor DSDT is EC0.BTIF */
{
Local7 = (0x01 << Arg0)
BTDR (0x01)
If ((BSTA (Local7) == 0x0F))
{
Return (0xFF)
}
Acquire (BTMX, 0xFFFF)
Local0 = NGBF
Release (BTMX)
If (((Local0 & Local7) == 0x00))
{
Return (0x00)
}
NBST [Arg0] = NDBS
Acquire (BTMX, 0xFFFF)
NGBT |= Local7
Release (BTMX)
/* fill battery information */
Acquire (ECMX, 0xFFFF)
BSEL = Arg0
Local0 = BFC
DerefOf (NBTI [Arg0]) [0x01] = Local0
DerefOf (NBTI [Arg0]) [0x02] = Local0
DerefOf (NBTI [Arg0]) [0x04] = BDV
DerefOf (NBTI [Arg0]) [0x05] = NLB1
DerefOf (NBTI [Arg0]) [0x06] = NLB2
Local0 = BSN
Local1 = BDAT
Release (ECMX)
/* serial number */
Local2 = GBSS (Local0, Local1)
DerefOf (NBTI [Arg0]) [0x0A] = Local2
Acquire (BTMX, 0xFFFF)
NGBF &= ~Local7
Release (BTMX)
Return (0x00)
}
Method (BTIF, 1, Serialized) /* in vendor DSDT is SB.BTIF */
{
Local0 = BTIG (Arg0)
If ((Local0 == 0xFF))
{
Return (Package (0x0D)
{
0x00,
0xFFFFFFFF,
0xFFFFFFFF,
0x01,
0xFFFFFFFF,
0x00,
0x00,
0x00,
0x00,
"",
"",
"",
0x00
})
}
Else
{
Return (DerefOf (NBTI [Arg0]))
}
}
Name (NFBS, 0x01)
Method (BTSZ, 1, Serialized) /* in vendor DSDT is EC.BTST */
{
Local1 = NFBS
If (NFBS)
{
NFBS = 0x00
}
BTST (Arg0, Local1)
Return (DerefOf (NBST [Arg0]))
}
Method (BTST, 2, Serialized)
{
Local7 = (0x01 << Arg0)
BTDR (0x01)
If ((BSTA (Local7) == 0x0F))
{
NBST [Arg0] = Package (0x04)
{
0x00,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
}
Return (0xFF)
}
Acquire (BTMX, 0xFFFF)
If (Arg1)
{
NGBT = 0xFF
}
Local0 = NGBT /* \_SB_.PCI0.LPCB.EC0_.NGBT */
Release (BTMX)
If (((Local0 & Local7) == 0x00))
{
Return (0x00)
}
Acquire (ECMX, 0xFFFF)
BSEL = Arg0
Local0 = BST
Local3 = BPR
DerefOf (NBST [Arg0]) [0x02] = BRC
DerefOf (NBST [Arg0]) [0x03] = BPV
Release (ECMX)
If ((GACS () == 0x01))
{
Local0 &= ~0x01
}
Else
{
Local0 &= ~0x02
}
If ((Local0 & 0x01))
{
Acquire (BTMX, 0xFFFF)
NDCB = Local7
Release (BTMX)
}
DerefOf (NBST [Arg0]) [0x00] = Local0
If ((Local0 & 0x01))
{
If (((Local3 < 0x0190) || (Local3 > 0x1964)))
{
Local5 = DerefOf (DerefOf (NBST [Arg0]) [0x01])
If (((Local5 < 0x0190) || (Local5 > 0x1964)))
{
Local3 = (0x1AF4 / 0x02)
}
Else
{
Local3 = Local5
}
}
}
ElseIf (((Local0 & 0x02) == 0x00))
{
Local3 = 0x00
}
DerefOf (NBST [Arg0]) [0x01] = Local3
Acquire (BTMX, 0xFFFF)
NGBT &= ~Local7
Release (BTMX)
Return (0x00)
}
Method (SBTN, 2, Serialized)
{
If ((Arg0 & 0x01))
{
Notify (BAT0, Arg1)
}
If ((Arg0 & 0x02))
{
Notify (BAT1, Arg1)
}
}
Method (_Q03, 0, NotSerialized)
{
Printf ("EC: _Q03")
Acquire (BTMX, 0xFFFF)
Local0 = NDCB
Release (BTMX)
PWUP (0x04, Local0)
SBTN (Local0, 0x80)
}
Method (_Q08, 0, NotSerialized)
{
Printf ("EC: PRIMARY BATTERY ATTACHED/DETACHED")
PWUP (0x06, 0x01)
Local0 = GBAP ()
If ((Local0 != 0x02))
{
PWUP (0x04, 0x02)
If (BTDR (0x02))
{
Notify (BAT1, 0x80)
}
}
If (BTDR (0x02))
{
Notify (BAT0, 0x81)
}
}
Method (_Q09, 0, NotSerialized)
{
Printf ("EC: PRIMARY BATTERY STATUS")
PWUP (0x04, 0x01)
If (BTDR (0x02))
{
Notify (BAT0, 0x80)
}
}
Method (_Q18, 0, NotSerialized)
{
Printf ("EC: SECONDARY BATTERY ATTACHED/DETACHED")
PWUP (0x06, 0x02)
Local0 = GBAP ()
If ((Local0 != 0x01))
{
PWUP (0x04, 0x01)
If (BTDR (0x02))
{
Notify (BAT0, 0x80)
}
}
If (BTDR (0x02))
{
Notify (BAT1, 0x81) // Information Change
}
}
Method (_Q19, 0, NotSerialized)
{
Printf ("EC: SECONDARY BATTERY STATUS")
PWUP (0x04, 0x02)
If (BTDR (0x02))
{
Notify (BAT1, 0x80)
}
}