linux - Writing to Embedded Controller registers in Ubuntu 14.04 -
i have been trying adjust fan speed of laptop, can achieve in windows setting address 20 (0x14) of ec value between 28 (0x1c) , 41 (0x29)
(i derive these numbers file: https://github.com/hirschmann/nbfc/blob/master/configs/hp%20envy%20m6%20sleekbook.xml)
when in windows works correctly. i'm trying replicate in ubuntu 14.04. below tried:
- first of probed
ec_sysmodule writingsudo modprobe ec_sys write_support=1made/sys/kernel/debug/ec/ec0/ioavailable. turns out if omitwrite_support=1receive "permission denied" error in next step. - i tried run
printf '\x1c' | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=20 count=1 conv=notrunccan write0x1c (28)address20 (0x14)of ec , adjust fan speed. i check if aforementioned register updated typing
sudo od -t x1 /sys/kernel/debug/ec/ec0/io, outputs:0000000 00 00 00 00 00 01 50 04 00 00 ff 10 00 33 13 05 0000020 00 19 24 19 1c 00 ff ff ff ff ff ff 00 00 00 00 ...
now, may appear capable of updating register, not affect fan speed. furthermore, when tried write 41 (0x29) same address later on, did not change value.
the config file (for provided link above) says read register fan speed on address 17 (0x11) i'd expect contents of these 2 addresses same (which case in windows). observe address 17 has same value address 19 instead. when attempted @ writing on address, not make changes. super confused.
it turns out 15th register responsible enabling write, write 0d location first, notebook fancontrol does, start controlling fan speed above. below full code if interested (it works on hp envy m6 series laptops. should first install lm-sensors)
sudo modprobe -r ec_sys sudo modprobe ec_sys write_support=1 echo -n -e "\015" | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=15 count=1 conv=notrunc 2> /dev/null echo "fan control enabled" while [ 1 ]; $(if [ "0$(bc -q <<< $(echo "`sensors -a -u | grep "temp1_input" --max-count=2 | tail -n1 | cut -d 'n' -f 2 | tr -cd '0123456789\.'`-0 > 54");)" -eq 1 ]; echo -n -e "\051"; else echo -n -e "\031"; fi | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=20 count=1 conv=notrunc 2> /dev/null); sleep 1; done
Comments
Post a Comment