[Bug 283683] [PATCH] dev/acpica/acpi_cmbat.c: Add battery trip point (_BTP)

From: <bugzilla-noreply_at_freebsd.org>
Date: Sat, 28 Dec 2024 13:39:29 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=283683

            Bug ID: 283683
           Summary: [PATCH] dev/acpica/acpi_cmbat.c: Add battery trip
                    point (_BTP)
           Product: Base System
           Version: 15.0-CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: georg.lastname@web.de

Created attachment 256226
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=256226&action=edit
diff for sys/dev/acpica/acpi_cmbat.c

[PATCH]
Affected file: sys/dev/acpica/acpi_cmbat.c

This patch implements _BTP (battery trip point).

This is basically for laptop users.

You set a warning level, e.g. 20%. Then devd will notify you when the battery
reaches 20%.

Quoting the ACPI specification version 6.5 section 10.2.2.14 ("_BTP"):
"This object is used to set a trip point to generate an SCI whenever the
Battery Remaining Capacity reaches or crosses the value specified in the _BTP
object."

I have another explanation here:
https://github.com/random532/FreeBSD_Battery_Trip_Point

The _BTP method is optional, so not every battery supports it.

-- What I did (aka design choices):
1. The cmbat driver has a unique device_attach() routine. It loops multipe
times until the battery controller is ready.

So once that process is finished (aka the battery is registered), I feel like
that is a good place to add all the optional acpi methods. For now, the only
optional method that is supported would be _BTP. I add a function
acpi_initialize_btp() and a handler function acpi_cmbat_btp_sysctl().

2. I chose a sysctl for the trip point. It is possible to use /dev/acpi and
acpiconf for this, which at first glance is more consistent with the current
design. However, the trip point is read-write. The current battery reporting is
read-only. Also, we'd need a new argument for acpiconf, because right now,
there is only acpiconf -i X, which reads battery information. I can see a
design where the userland command would be "acpiconf -i 0 -w 20", where w would
be the warning level.

But I think the sysctl is just fine.

3. More information is on github.
I just want to put this out there.

4. So far tested on:
ThinkPad x220

Thanks everyone.

-- 
You are receiving this mail because:
You are the assignee for the bug.