--- /dev/null
+#!/bin/bash
+
+# https://www.kernel.org/doc/html/latest/hwmon/it87.html
+# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2cbb9c370fe32b5de5243f7338dc6ce8747d495b
+
+set -eux
+
+modprobe it87
+
+CT="$(grep -l coretemp /sys/class/hwmon/hwmon*/name | head -n1 | xargs dirname)/temp1_input"
+cd "$(grep -l it8792 /sys/class/hwmon/hwmon*/name | head -n1 | xargs dirname)"
+
+grep . pwm1* temp1*
+
+# automatic fan control - the chip seems to ignore these settings
+#echo 2 > pwm1_enable # automatic mode
+#echo 1 > pwm1_auto_channels_temp # temperature channel
+#echo 127000 > pwm1_auto_point1_temp_hyst # ??
+#echo 127000 > pwm1_auto_point1_temp # fan off temp
+#echo 127000 > pwm1_auto_point2_temp # fan start temp
+#echo 127000 > pwm1_auto_point3_temp # fan max temperature
+#echo 100 > pwm1_auto_start # start pwm value
+#echo 0 > pwm1_auto_slope # pwm slope, 1/8th pwm
+
+# manual fan control - magic incantation
+echo 1 > pwm1_enable # manual mode
+echo 200000 > pwm1_freq # quieter fan
+echo 0 > temp3_type # disabled unused sensor
+echo 4 > temp1_type # switch sensor to thermistor
+sleep 1 # wait for driver to write to chip
+echo 0 > temp1_type # disable the sensor
+echo 42 > pwm1 # set the fan speed
+
+grep . *pwm1* temp1*
+
+set +x
+OLDPWM="$(cat pwm1)"
+while sleep 1; do
+ TEMPC="$(cat "$CT")"
+ if [ "$TEMPC" -ge 85000 ]; then
+ NEWPWM=255
+ elif [ "$TEMPC" -ge 80000 ]; then
+ NEWPWM=180
+ elif [ "$TEMPC" -ge 60000 ]; then
+ NEWPWM=130
+ else
+ NEWPWM=100
+ fi
+ if [ "$OLDPWM" -ne "$NEWPWM" ]; then
+ echo "Fan speed change: OLDPWM=$OLDPWM TEMPC=$TEMPC NEWPWM=$NEWPWM"
+ echo "$NEWPWM" > pwm1
+ OLDPWM="$NEWPWM"
+ sleep 30
+ fi
+done