/* SPDX-License-Identifier: GPL-2.0-only */ /* Arg0: Battery * Arg1: Battery Status Package * Arg2: charging * Arg3: discharging */ Method(BSTA, 4, NotSerialized) { Acquire(ECLK, 0xffff) Local0 = 0 PAGE = 0 Local2 = BAPR if (Arg2) // charging { Local0 |= 2 If (Local2 == 0x8000) { Local2 = 0 } } if (Arg3) // discharging { Local0 |= 1 Local2 = 0x10000 - Local2 } Arg1[0] = Local0 PAGE = 0 Arg1[2] = BARC Arg1[1] = Local2 PAGE = 0 Arg1[3] = BAVO Release(ECLK) Return (Arg1) } Method(BINF, 2, Serialized) { Acquire(ECLK, 0xffff) PAGE = 0 Local2 = BAFC PAGE = 1 Local1 = BADC Arg0[1] = Local1 // Design Capacity Arg0[2] = Local2 // Last full charge capacity PAGE = 1 Arg0[4] = BADV // Design Voltage Arg0[5] = Local2 / 20 // Warning capacity PAGE = 1 Local0 = BASN Name (SERN, Buffer (0x06) { " " }) Local1 = 4 While (Local0) { Local2 = Local0 Local0 /= 0x0A Local2 -= (Local0 * 0x0A) SERN[Local1] = Local2 + 48 Local1-- } Arg0[10] = SERN // Serial Number Name (TYPE, Buffer() { 0, 0, 0, 0, 0 }) PAGE = 4 TYPE = BATY Arg0[11] = TYPE // Battery type PAGE = 5 Arg0[12] = BAOE // OEM information PAGE = 2 Arg0[9] = BANA // Model number Release(ECLK) Return (Arg0) } Device (BAT0) { Name (_HID, EisaId ("PNP0C0A")) Name (_UID, 0x00) Name (_PCL, Package () { \_SB }) Name (BATS, Package () { 0x00, // 0: PowerUnit: Report in mWh 0xFFFFFFFF, // 1: Design cap 0xFFFFFFFF, // 2: Last full charge cap 0x01, // 3: Battery Technology 10800, // 4: Design Voltage (mV) 0x00, // 5: Warning design capacity 200, // 6: Low design capacity 1, // 7: granularity1 1, // 8: granularity2 "", // 9: Model number "", // A: Serial number "", // B: Battery Type "" // C: OEM information }) Method (_BIF, 0, NotSerialized) { Return (BINF(BATS, 0)) } Name (BATI, Package () { 0, // Battery State // Bit 0 - discharge // Bit 1 - charge // Bit 2 - critical state 0, // Battery present Rate 0, // Battery remaining capacity 0 // Battery present voltage }) Method (_BST, 0, NotSerialized) { if (B0PR) { Return (BSTA(0, BATI, B0CH, B0DI)) } else { Return (BATS) } } Method (_STA, 0, NotSerialized) { if (B0PR) { Return (0x1f) } else { Return (0x0f) } } } /* Battery attach/detach */ Method(_Q40, 0, NotSerialized) { Notify(BAT0, 0x81) } Method(_Q41, 0, NotSerialized) { Notify(BAT0, 0x81) } Method(_Q48, 0, NotSerialized) { Notify(BAT0, 0x80) } Method(_Q4C, 0, NotSerialized) { Notify(BAT0, 0x80) }