Friday, November 26, 2010

lenovo 3000 n100 custom bios

As one may know, Lenovo 3000 n100 has broken DSDT ACPI table, and as result it reports battery status incorrectly, i.e. BIOS says 'hey, battery status is 20%!', but actually it's 0%, and laptop will shutdown in few minutes. Lenovo engineers were stupid enought to hardcode some values instead of querying smart battery. You can easily check if your laptop is affected:

$ cat /proc/acpi/battery/BAT1/info
present: yes
design capacity: 5200 mAh
last full capacity: 5200 mAh

See? 'design capacity' and 'last full capacity' are hardcoded. Also BIOS reports incorrect values for 'present rate' and 'present voltage' in /proc/acpi/battery/BAT1/state. Here's how these values should look like:

$ cat /proc/acpi/battery/BAT1/state
present: yes
capacity state: ok
charging state: discharging
present rate: 1875 mA
remaining capacity: 4378 mAh
present voltage: 12285 mV

$ cat /proc/acpi/battery/BAT1/info
present: yes
design capacity: 5183 mAh
last full capacity: 4517 mAh

In July'09 I wrote a post how to fix it via custom DSDT, but it requires kernel patching and it's not easy/userfriendly, especially in non-source-based distros. And I pretty sure it's not possible in MS Windows (tm)

Last night I got BIOS for my laptop fixed (at last!). I've used Phoenix BIOS editor to perform modifications, main problem was PBE fails to disassemble DSDT table (ad.exe crashes), but workaround is easy - PBE unpacks bios into Program Files/Phoenix Bios Editor/TMP, just take ACPI0.aml from it, disassemble/modify/compile it via iasl, and put it back into this directory. Then just build BIOS and flash it via phlash16 from freedos liveusb :) That's it! No need in putting custom DSDT table into kernel (or initramdisk for old kernels - but it is not working anymore - patch was rejected by kernel developers).

You can take fixed bios here. It can be used with Lenovo 3000 N100 with AD codec (not suitable for laptops with realtek codec).

Disclaimer: I'm not responsible for any damage you can done to your laptop by following these instructions/flashing my custom BIOS