/* SPDX-License-Identifier: GPL-2.0-only */ #define BATTERY_DESIGN_VOLTAGE_MV 14800 Device (BAT0) { Name (_HID, EisaId ("PNP0C0A") /* Control Method Battery */) Name (_UID, 0) Name (_PCL, Package (0x01) // _PCL: Power Consumer List { _SB }) Name (BFCC, 0) Method (_STA, 0, NotSerialized) { If (^^PCI0.LPCB.EC0.ECOK) { If (^^PCI0.LPCB.EC0.BAT0) { Return (0x1F) } Else { Return (0x0F) } } Else { Return (0x0F) } } Name (PBIF, Package (0x0D) { 1, // 0 - Power Unit 0xFFFFFFFF, // 1 - Design Capacity 0xFFFFFFFF, // 2 - Last Full Charge Capacity 1, // 3 - Battery Technology BATTERY_DESIGN_VOLTAGE_MV, // 4 - Design Voltage 0, // 5 - Design Capacity of Warning 0, // 6 - Design Capacity of Low 0x40, // 7 - Battery Capacity Granularity 1 0x40, // 8 - Battery Capacity Granularity 2 "BAT", // 9 - Model Number "0001", // 10 - Serial Number "LION", // 11 - Battery Type "Notebook" // 12 - OEM Information }) Method (IVBI, 0, NotSerialized) { PBIF [1] = 0xFFFFFFFF PBIF [2] = 0xFFFFFFFF PBIF [4] = 0xFFFFFFFF PBIF [9] = " " PBIF [10] = " " PBIF [11] = " " PBIF [12] = " " BFCC = 0 } Method (UPBI, 0, NotSerialized) { If (^^PCI0.LPCB.EC0.BAT0) { Local0 = (^^PCI0.LPCB.EC0.BDC0 & 0xFFFF) PBIF [1] = Local0 Local0 = (^^PCI0.LPCB.EC0.BFC0 & 0xFFFF) PBIF [2] = Local0 BFCC = Local0 Local0 = (^^PCI0.LPCB.EC0.BDV0 & 0xFFFF) PBIF [4] = Local0 Local0 = (^^PCI0.LPCB.EC0.BCW0 & 0xFFFF) PBIF [5] = Local0 Local0 = (^^PCI0.LPCB.EC0.BCL0 & 0xFFFF) PBIF [6] = Local0 PBIF [9] = "BAT" PBIF [10] = "0001" PBIF [11] = "LION" PBIF [12] = "Notebook" } Else { IVBI () } } Method (_BIF, 0, NotSerialized) // _BIF: Battery Information { If (^^PCI0.LPCB.EC0.ECOK) { UPBI () } Else { IVBI () } Return (PBIF) /* \_SB_.BAT0.PBIF */ } Name (PBST, Package (0x04) { 0, // 0 - Battery state 0xFFFFFFFF, // 1 - Battery present rate 0xFFFFFFFF, // 2 - Battery remaining capacity BATTERY_DESIGN_VOLTAGE_MV // 3 - Battery present voltage }) Method (IVBS, 0, NotSerialized) { PBST [0] = 0 PBST [1] = 0xFFFFFFFF PBST [2] = 0xFFFFFFFF PBST [3] = 0x2710 } Method (UPBS, 0, NotSerialized) { If (^^PCI0.LPCB.EC0.BAT0) { Local0 = 0 Local1 = 0 If (^^AC.ACFG) { If (((^^PCI0.LPCB.EC0.BST0 & 0x02) == 0x02)) { Local0 |= 0x02 Local1 = (^^PCI0.LPCB.EC0.BPR0 & 0xFFFF) } } Else { Local0 |= 1 Local1 = (^^PCI0.LPCB.EC0.BPR0 & 0xFFFF) } Local7 = (Local1 & 0x8000) If ((Local7 == 0x8000)) { Local1 ^= 0xFFFF } Local2 = (^^PCI0.LPCB.EC0.BRC0 & 0xFFFF) Local3 = (^^PCI0.LPCB.EC0.BPV0 & 0xFFFF) PBST [0] = Local0 PBST [1] = Local1 PBST [2] = Local2 PBST [3] = Local3 If ((BFCC != ^^PCI0.LPCB.EC0.BFC0)) { Notify (BAT0, 0x81) // Information Change } } Else { IVBS () } } Method (_BST, 0, NotSerialized) // _BST: Battery Status { If (^^PCI0.LPCB.EC0.ECOK) { UPBS () } Else { IVBS () } Return (PBST) /* \_SB_.BAT0.PBST */ } }