Saturday, July 11, 2009

Lenovo 3000 N100 and ACPI

There was a bug in BIOS of my laptop that annoyed me for long time:

In two words, after resume from hibernate (suspend to disk) fan sticks to the one state. I.e. it's always working (annoying but not dangerous), or it's always stopped (dangerous, can cause overheat) - it's state is not depend on CPU temperature.

Here's some links about it:

http://bugzilla.kernel.org/show_bug.cgi?id=10223

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/114312


Zhang Rui (thanks to him!) pointed right direction: he provided customized DSDT table with extra debug output in _TMP method. I've tried it, and it showed that one of two thermal sensors shows wrong info after resume. So I wrote new _TMP method that uses only one thermal sensor.

There was one more issue in BIOS - /proc/acpi/battery/BAT1/{info,state} shows hardcoded values, and doesn't perform real query to the smart battery.

I've googled a little bit and found this:
http://hughsient.livejournal.com/5884.html

So, after all I have custom DSDT table that works fine for me :)

Here's patch for DSDT table and here's manual that describes how to apply it.
Also consult http://www.lesswatts.org/projects/acpi/overridingDSDT.php

No comments: