ACPI modules

Related articles
acpid
DSDT
From
uefi.org
:
The Advanced Configuration and Power Interface (ACPI) specification was developed to establish industry common interfaces enabling robust operating system (OS) directed motherboard device configuration and power management of both devices and entire systems. ACPI is the key element in OS-directed configuration and Power Management (OSPM).
ACPI modules are kernel modules for different ACPI parts. They enable special ACPI functions or add information to
/proc
or
/sys
. These information can be parsed by
acpid
for events or other monitoring applications.
Which modules are available?
This is a small list and summary of ACPI kernel modules:
ac (power connector status)
asus-laptop (useful on ASUS/medion laptops)
battery (battery status)
bay (bay status)
button (catch button events, like LID or POWER BUTTON)
container (container status)
dock (docking station status)
fan (fan status)
i2c_ec (EC SMBus driver)
thinkpad_acpi (useful on Lenovo ThinkPad laptops)
processor (processor status)
sbs (smart battery status)
thermal (status of thermal sensors)
toshiba_acpi (useful for Toshiba laptops)
video (status of video devices)
A complete list for your running kernel can be obtained with the following command:
$ ls -l /usr/lib/modules/$(uname -r)/kernel/drivers/acpi
total 112
-rw-r--r-- 1 root root  2808 Aug 29 23:58 ac.ko.gz
-rw-r--r-- 1 root root  3021 Aug 29 23:58 acpi_ipmi.ko.gz
-rw-r--r-- 1 root root  3354 Aug 29 23:58 acpi_memhotplug.ko.gz
-rw-r--r-- 1 root root  4628 Aug 29 23:58 acpi_pad.ko.gz
drwxr-xr-x 2 root root  4096 Aug 29 23:59 apei
-rw-r--r-- 1 root root  7120 Aug 29 23:58 battery.ko.gz
-rw-r--r-- 1 root root  3700 Aug 29 23:58 button.ko.gz
-rw-r--r-- 1 root root  2181 Aug 29 23:58 container.ko.gz
-rw-r--r-- 1 root root  1525 Aug 29 23:58 custom_method.ko.gz
-rw-r--r-- 1 root root  1909 Aug 29 23:58 ec_sys.ko.gz
-rw-r--r-- 1 root root  2001 Aug 29 23:58 fan.ko.gz
-rw-r--r-- 1 root root  1532 Aug 29 23:58 hed.ko.gz
-rw-r--r-- 1 root root  3241 Aug 29 23:58 pci_slot.ko.gz
-rw-r--r-- 1 root root 17742 Aug 29 23:58 processor.ko.gz
-rw-r--r-- 1 root root  3073 Aug 29 23:58 sbshc.ko.gz
-rw-r--r-- 1 root root  7098 Aug 29 23:58 sbs.ko.gz
-rw-r--r-- 1 root root  6311 Aug 29 23:58 thermal.ko.gz
-rw-r--r-- 1 root root  8891 Aug 29 23:58 video.ko.gz
Note
Officially supported kernels
make some modules builtin into the kernel image (
CONFIG_ACPI_*=y
[1]
), so they will not be present in the modules directory and
lsmod(8)
output.
How to select the correct ones
You have to try yourself which module works for your machine using
modprobe
yourmodule
, then check if the module is supported on your hardware by using
dmesg
. It may help to add a grep text search to narrow your results:
# dmesg | grep -i acpi
[    0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x04] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled)
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    5.066752] ACPI: acpi_idle yielding to intel_idle
[    5.438998] acpi device:04: registered as cooling_device4
You can
load the module at boot
to make the change permanent for the working ones.
Getting information
To read out battery information, you can simply
install
the package
acpi
and run
acpi -i
.
Using
/proc
to store ACPI information has been discouraged and deprecated since Linux 2.6.24. The same data is available in
/sys
now, and interested parties can (should) subscribe to ACPI events from the kernel via netlink. For example, for battery:
/sys/class/power_supply/BAT0/
Troubleshooting
DSDT fix
If problems with power management persist despite having loaded the proper modules, a Linux-unfriendly
DSDT
might be the cause.
ACPI fix for notebooks
Sometimes you see "ACPI: EC: input buffer is not empty, aborting transaction". This is a problem with ACPI, more specifically an incompatibility of the BIOS. There may be four ways to solve this issue:
If available,
flash BIOS
.
Use
acpi=off
as
kernel parameter
, however this will kill all ACPI functionality like battery charging and power saving.
In some cases disabling
DPMS
has been reported to solve the issue
[2]
. However, screen brightness may no longer be fully controllable:
$ xset dpms force off
Build a custom
kernel
with patches of
bugs.launchpad.net
.
Boot-looping
Some notebooks or motherboard may have boot issues, such as powering off during the transition from boot loader to OS due to bad ACPI firmware implementation. The following steps provide several
kernel parameters
, to be tested in order:
Set
acpi=off
. If you are able to successfully boot:
Dump the ACPI table and check for strings similar to "Windows XXXX". Find the most recent ones:
# acpidump -b && for i in *; do echo $i:; strings -a $i | grep -i windows; done
Set
acpi_osi="Windows XXXX"
.
Boot looping issues may be due to unstable C-States:
Disable ACPI C-State driver by using
processor.max_cstate=0
If you are using Intel processors, set
intel_idle.max_cstate=2
to limit C-State to C1E. Higher C-State may work, your mileage may vary.
Disable MWAIT instruction and fallback to ACPI C-State driver with
idle=nomwait
. Verify your changes by using
cpupower
:
$ cpupower idle-info
See also
Wikipedia:Advanced Configuration and Power Interface
https://unix.stackexchange.com/questions/609985/acpi-os-name-and-acpi-osi-semantics