This is kinda tech hacky stuff.
On windows we have NitroSense, it works ok, on linux we don't, but still possible to control the fans with projects like nbfc-revive and nbfc-linux, basically what these tools does is to use acpi_ec, ec_sys, ec_linux to write to the ec registries.
I know what registries I should write to and what values, I monitored them and basically it's like so:
Writing 0x0c to 0x22 enable manual fan for the CPU.
Writing 0x30 to 0x21 enable manual fan for the GPU.
Writing (0x00 to 0x64) to registry 0x37 controls the speed of fan of CPU.
Writing (0x00 to 0x64) to registry 0x3a controls the speed of fan of CPU.
So doing stuff like this should run the fans at 50% speed (but don't):
ec_probe write 0x22 0x0C
ec_probe write 0x21 0x30
ec_probe write 0x37 0x32
ec_probe write 0x3a 0x32
Also I can do something like this (is the same as the above (but just for the cpu fan, I'm tired of typing xd)):
echo -n -e "\014" | dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=34 count=1 conv=notrunc
echo -n -e "\062" | dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=55 count=1 conv=notrunc
The registries I getting write correctly I can monitor them or read the specifics registries, the values are there, but nothing happens.
On windows when I write to the sameh registries of the EC it works normally.
It's like something on linux is ignoring the values.
Like the only distro I tested was on Arch Linux, so I don't know if it's happening on other distros too.