Download: smm-fan-dist.tar.bz2
On some Dell laptops SMM BIOS fan speed control prevents proper setting of fan speed from userspace because it takes back control one or two seconds after disabling it.
There is a utility to change this behavior in i8kutils however it is only a 32-bit version. Trying to compile it on a 64-bit system without multilib gives the following error message:
$ gcc -m32 -o smm smm.c
In file included from /usr/include/features.h:392:0,
from /usr/include/stdio.h:27,
from smm.c:27:
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory
# include <gnu/stubs-32.h>
^
compilation terminated.
Most sites suggest that on 64-bit systems the only solution is to install
gcc-multilib [1,2,3,4]. As it turned out the original
smm.c
code can be converted to a 64-bit version (saving me from having to
change Gentoo profile from no-multilib to multilib).
The current 64-bit solution is based on:
dell-smm-hwmon.c
-- Linux driver for accessing the SMM BIOS on Dell laptopssmm.c
-- Utility to test SMM BIOS calls on Inspiron 8000 laptops from i8kutils
Tested on Dell Latitude E6530 and works flawlessly. But as usual, use at your own risk.
Usage:
$ make
# ./smm-fan
./smm-fan: expected 1 parameter defining state
usage: ./smm-fan state
set SMM BIOS fan control state = { 0, 1 }; (0: disabled, 1: enabled)
Disabling SMM BIOS fan control:
# ./smm-fan 0