mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 13:41:55 +00:00
778b4d742b
A few ThinkPads fail to initialize EC register 0x2f both in the EC firmware and ACPI DSDT. If the BIOS and the ACPI DSDT also do not initialize it, then the initial status of that register does not correspond to reality. On all reported buggy machines, EC 0x2f will read 0x07 (fan level 7) upon cold boot, when the EC is actually in mode 0x80 (auto mode). Since returning a text string ("unknown") would break a number of userspace programs, instead we correct the reading for the most probably correct answer, and return it is in auto mode. The workaround flags the status and level as unknown on module load/kernel boot, until we are certain at least one fan control command was issued, either by us, or by something else. We don't work around the bug by doing a "fan enable" at module load/startup (which would initialize the EC register) because it is not known if these ThinkPad ACPI DSDT might have set the fan to level 7 instead of "auto" (we don't know if they can do this or not) due to a thermal condition, and we don't want to override that, should they be capable of it. We should be setting the workaround flag to "status known" upon resume, as both reports and a exaustive search on the DSDT tables at acpi.sf.net show that the DSDTs always enable the fan on resume, thus working around the bug. But since we don't have suspend/resume handlers in ibm-acpi yet and the "EC register 0x2f was modified" logic is likely to catch the change anyway, we don't. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
||
---|---|---|
.. | ||
dispatcher | ||
events | ||
executer | ||
hardware | ||
namespace | ||
parser | ||
resources | ||
sleep | ||
tables | ||
utilities | ||
ac.c | ||
acpi_memhotplug.c | ||
asus_acpi.c | ||
battery.c | ||
blacklist.c | ||
bus.c | ||
button.c | ||
cm_sbs.c | ||
container.c | ||
debug.c | ||
dock.c | ||
ec.c | ||
event.c | ||
fan.c | ||
glue.c | ||
hotkey.c | ||
i2c_ec.c | ||
i2c_ec.h | ||
ibm_acpi.c | ||
Kconfig | ||
Makefile | ||
motherboard.c | ||
numa.c | ||
osl.c | ||
pci_bind.c | ||
pci_irq.c | ||
pci_link.c | ||
pci_root.c | ||
power.c | ||
processor_core.c | ||
processor_idle.c | ||
processor_perflib.c | ||
processor_thermal.c | ||
processor_throttling.c | ||
sbs.c | ||
scan.c | ||
system.c | ||
tables.c | ||
thermal.c | ||
toshiba_acpi.c | ||
utils.c | ||
video.c |