/* SPDX-License-Identifier: GPL-2.0-only */ Scope(\_SB) { Name(NIMH, "NiMH") Name(LION, "Lion") Device (BAT0) { Name(_HID, EisaId("PNP0C0A")) Name(_UID, 1) Name(_PCL, Package(){ \_SB }) Name(PBST, Package() { 0x00, 0x04b0, 0x0bb8, 0x03e8 }) /* Status */ Method(_STA, 0) { Sleep(120) If (\_SB.PCI0.LPCB.EC0.BAT) { Return (0x1f) } Else { Return (0x0f) } } /* Battery Info */ Method(_BIF, 0, Serialized) { Name(PBIF, Package() { 0x01, 0x0fa0, 0x0fa0, 0x01, 0x2ee0, // Capacity? 0x012c, 0x96, 0x01, 0x01, "Battery", // Name "", // Number "LIon", // Type "Generic" // Vendor }) // Is battery there? Local0 = _STA () Local0 &= 0x10 If (!Local0) { Return (PBIF) } PBIF [1] = \_SB.PCI0.LPCB.EC0.BDC0 PBIF [4] = \_SB.PCI0.LPCB.EC0.BDV0 Local0 = \_SB.PCI0.LPCB.EC0.BFC0 PBIF [2] = Local0 Local2 = Local0 / 10 PBIF [5] = Local2 Local2 = Local0 / 20 PBIF [6] = Local2 If (\_SB.PCI0.LPCB.EC0.BTYP) { PBIF [11] = NIMH } Else { PBIF [11] = LION } Return (PBIF) } /* Battery Status */ Method(_BST, 0) { If (\_SB.PCI0.LPCB.EC0.BAT) { PBST [3] = \_SB.PCI0.LPCB.EC0.BPV0 Local3 = \_SB.PCI0.LPCB.EC0.BRC0 * 100 Local0 = Local3 / \_SB.PCI0.LPCB.EC0.BFC0 Local3 = \_SB.PCI0.LPCB.EC0.BFC0 * Local0 Local0 = Local3 / 100 Local0++ PBST [2] = Local0 Local3 = \_SB.PCI0.LPCB.EC0.BRC0 Local0 = \_SB.PCI0.LPCB.EC0.BPR0 Local0 = ~Local0 & 0xFFFF PBST [1] = Local0 // AC Power connected? If (\_SB.PCI0.LPCB.EC0.ADP) { If (\_SB.PCI0.LPCB.EC0.CHRG) { PBST [0] = 2 } Else { PBST [0] = 0 } } Else { If (Local3 < 25) { PBST [0] = 5 } Else { PBST [0] = 1 } } } Return (PBST) } } Device (BAT1) { Name(_HID, EisaId("PNP0C0A")) Name(_UID, 1) Name(_PCL, Package(){ \_SB }) Name(PBST, Package() { 0x00, 0x04b0, 0x0bb8, 0x03e8 }) /* Status */ Method(_STA, 0) { Sleep(120) If (\_SB.PCI0.LPCB.EC0.BAT2) { Return (0x1f) } Else { Return (0x0f) } } /* Battery Info */ Method(_BIF, 0, Serialized) { Name(PBIF, Package() { 0x01, 0x0fa0, 0x0fa0, 0x01, 0x2ee0, // Capacity? 0x012c, 0x96, 0x01, 0x01, "Battery", // Name "", // Number "LIon", // Type "Generic" // Vendor }) // Is battery there? Local0 = _STA () Local0 &= 0x10 If (!Local0) { Return (PBIF) } PBIF [1] = \_SB.PCI0.LPCB.EC0.BDC2 PBIF [4] = \_SB.PCI0.LPCB.EC0.BDV2 Local0 = \_SB.PCI0.LPCB.EC0.BFC2 PBIF [2] = Local0 Local2 = Local0 / 10 PBIF [5] = Local2 Local2 = Local0 / 20 PBIF [6] = Local2 If (\_SB.PCI0.LPCB.EC0.BTY2) { PBIF [11] = NIMH } Else { PBIF [11] = LION } Return (PBIF) } /* Battery Status */ Method(_BST, 0) { If (\_SB.PCI0.LPCB.EC0.BAT2) { PBST [3] = \_SB.PCI0.LPCB.EC0.BPV2 Local3 = \_SB.PCI0.LPCB.EC0.BRC2 * 100 Local0 = Local3 / \_SB.PCI0.LPCB.EC0.BRC2 Local3 = \_SB.PCI0.LPCB.EC0.BFC2 * Local0 Local0 = Local3 / 100 Local0++ PBST [2] = Local0 Local3 = \_SB.PCI0.LPCB.EC0.BRC2 Local0 = \_SB.PCI0.LPCB.EC0.BPR2 Local0 = ~Local0 & 0xFFFF PBST [1] = Local0 // AC Power connected? If (\_SB.PCI0.LPCB.EC0.ADP) { If (\_SB.PCI0.LPCB.EC0.CRG2) { PBST [0] = 2 } Else { PBST [0] = 0 } } Else { If (Local3 < 25) { PBST [0] = 5 } Else { PBST [0] = 1 } } } Return (PBST) } } Name (PWRS, 0) Name (ACFG, 0) Device (AC) { Name (_HID, "ACPI0003") Name (ACST, 0x00) Method (_PSR, 0) { If (ACFG) { Local0 = ACST } Else { Local0 = \_SB.PCI0.LPCB.EC0.ADP ACST = Local0 ACFG = 1 } Sleep(120) Return (Local0) } Name(_PCL, Package(){ \_SB, BAT0, BAT1 }) } }