From 8031abfcc2968d19242168950988d5adff65c426 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 15 Sep 2021 09:27:49 -0600 Subject: [PATCH] ec/system76/ec: acpi: Implement _BIX method Implement _BIX method to expose battery cycle count. Requires an EC version with support for cycle count. Change-Id: I5f7a1d275caff59960aaf9c39b9c707970350987 Signed-off-by: Ian Douglas Scott Reviewed-on: https://review.coreboot.org/c/coreboot/+/57678 Tested-by: build bot (Jenkins) Reviewed-by: Jeremy Soller --- src/ec/system76/ec/acpi/battery.asl | 78 +++++++++++++++++++++++++++++ src/ec/system76/ec/acpi/ec_ram.asl | 1 + 2 files changed, 79 insertions(+) diff --git a/src/ec/system76/ec/acpi/battery.asl b/src/ec/system76/ec/acpi/battery.asl index 50aaf9ef9e..027bbad0d6 100644 --- a/src/ec/system76/ec/acpi/battery.asl +++ b/src/ec/system76/ec/acpi/battery.asl @@ -96,6 +96,84 @@ Device (BAT0) Return (PBIF) /* \_SB_.BAT0.PBIF */ } + Name (PBIX, Package () + { + 0, // 0 - Revision + 1, // 1 - Power Unit: mAh + 0xFFFFFFFF, // 2 - Design Capacity + 0xFFFFFFFF, // 3 - Last Full Charge Capacity + 1, // 4 - Battery Technology: Rechargeable + 0xFFFFFFFF, // 5 - Design Voltage + 0, // 6 - Design Capacity of Warning + 0, // 7 - Design Capacity of Low + 0, // 8 - Cycle Count + 98000, // 9 - Measurement Accuracy + 0xFFFFFFFF, // 10 - Max Sampling Time + 0xFFFFFFFF, // 11 - Min Sampling Time + 0xFFFFFFFF, // 12 - Max Averaging Interval + 0xFFFFFFFF, // 13 - Min Averaging Interval + 0x40, // 14 - Battery Capacity Granularity 1 + 0x40, // 15 - Battery Capacity Granularity 2 + " ", // 16 - Model Number + " ", // 17 - Serial Number + " ", // 18 - Battery Type + " " // 19 - OEM Information + }) + + Method (IVBX, 0, NotSerialized) + { + PBIX [2] = 0xFFFFFFFF + PBIX [3] = 0xFFFFFFFF + PBIX [5] = 0xFFFFFFFF + PBIX [16] = " " + PBIX [17] = " " + PBIX [18] = " " + PBIX [19] = " " + BFCC = 0 + } + + Method (UPBX, 0, NotSerialized) + { + If (^^PCI0.LPCB.EC0.BAT0) + { + Local0 = (^^PCI0.LPCB.EC0.BDC0 & 0xFFFF) + PBIX [2] = Local0 + Local0 = (^^PCI0.LPCB.EC0.BFC0 & 0xFFFF) + PBIX [3] = Local0 + BFCC = Local0 + Local0 = (^^PCI0.LPCB.EC0.BDV0 & 0xFFFF) + PBIX [5] = Local0 + Local0 = (^^PCI0.LPCB.EC0.BCW0 & 0xFFFF) + PBIX [6] = Local0 + Local0 = (^^PCI0.LPCB.EC0.BCL0 & 0xFFFF) + PBIX [7] = Local0 + LOCAL0 = ^^PCI0.LPCB.EC0.CYC0 + PBIX [8] = LOCAL0 + PBIX [16] = "BAT" + PBIX [17] = "0001" + PBIX [18] = "LION" + PBIX [19] = "Notebook" + } + Else + { + IVBX () + } + } + + // _BIX: Battery Information Extended + Method (_BIX, 0, NotSerialized) + { + If (^^PCI0.LPCB.EC0.ECOK) + { + UPBX () + } + Else + { + IVBX () + } + Return (PBIX) /* \_SB_.BAT0.PBIX */ + } + Name (PBST, Package (0x04) { Zero, // 0 - Battery state diff --git a/src/ec/system76/ec/acpi/ec_ram.asl b/src/ec/system76/ec/acpi/ec_ram.asl index 6ef54540b6..2faaeddf53 100644 --- a/src/ec/system76/ec/acpi/ec_ram.asl +++ b/src/ec/system76/ec/acpi/ec_ram.asl @@ -28,6 +28,7 @@ Field (ERAM, ByteAcc, Lock, Preserve) Offset (0x3A), BCW0, 32, BCL0, 32, + CYC0, 16, // Battery cycle count Offset (0x68), ECOS, 8, // Detected OS, 0 = no ACPI, 1 = ACPI but no driver, 2 = ACPI with driver Offset (0xC8),