blob: 73a0d0dd10d52436cd473bdd795b654f75796b26 [file] [log] [blame]
#!/bin/sh
set -e
. $(dirname $0)/Config.sh
. $(dirname $0)/utils.sh
error=
cleanup()
{
echo "restoring fan settings"
restorefanstate_gfrg200
}
fantest_gfrg200()
{
run savefanstate_gfrg200
run enabletach_gfrg200
# set freq to 23 (360khz / (2*23) = 7.8khz pulse?)
# or set freq to 9 (360khz / (2*9) = 10khz pulse?)
freq=23
# look for values within 15% of what is expected
range=$(($fan_max_rpm * 15 / 100))
run setfanfreq_gfrg200_i2c $freq
# turn off fan
run setfanrpm_gfrg200_sys 0 # 0% speed
echo "fan at 0%"
sleep 3 # why not, I'm thinking
rpm=$(getfanrpm_gfrg200_i2c)
echo RPM at 0% is $rpm
if ! near 0 $range $rpm; then
error="wanted 0 rpm, got $rpm for 0% duty cycle"
cleanup
return 1
fi
# write with /sys interface, check with i2cget
run setfanrpm_gfrg200_sys 255 # 100% speed
val=$(getfanspeed_gfrg200_i2c)
want=$(speedtopercent_gfrg200_i2c $val)
if [ $val != $want ]; then
error="wanted $want, got $val for 100% duty cycle"
cleanup
return 1
fi
echo "fan at 100%"
sleep 3
rpm=$(getfanrpm_gfrg200_i2c)
rpmsave=$rpm
echo RPM at 100% is $rpm
if ! near $fan_max_rpm $range $rpm; then
error="wanted $fan_max_rpm rpm, got $rpm for 100% duty cycle"
cleanup
return 1
fi
# write with i2cset, verify with pwm1
run setfanrpm_gfrg200_i2c 50 # 50%
val=$(getfanrpm_gfrg200_sys)
if [ $val != 128 ]; then
error="wanted 128, got $val for 50% duty cycle"
cleanup
return 1
fi
echo "fan at 50%"
sleep 3
want=$(($fan_max_rpm / 2))
rpm=$(getfanrpm_gfrg200_i2c)
echo RPM at 50% is $rpm
if ! near $want $range $rpm; then
error="wanted $want rpm, got $rpm for 50% duty cycle"
cleanup
return 1
fi
# check temp sensors
t1=$(gettemp_gfrg200 1)
echo t1 is $t1
if [ $t1 -lt $fan_temp1_min ] || [ $t1 -gt $fan_temp1_max ]; then
error="wanted $fan_temp1_min-$fan_temp1_max, got $t1 for temp1_input"
cleanup
return 1
fi
t2=$(gettemp_gfrg200 2)
echo t2 is $t2
if [ $t2 -lt $fan_temp2_min ] || [ $t2 -gt $fan_temp2_max ]; then
error="wanted $fan_temp2_min-$fan_temp2_max, got $t2 for temp2_input"
cleanup
return 1
fi
result="rpm=$rpmsave t1=$t1 t2=$t2"
cleanup
return 0
}
case "$1" in
diag | quick)
if fantest_gfrg200; then
echo PASS "$result"
else
echo FAIL "$error"
fi
;;
*)
echo "Usage: $0 {diag|quick}"
exit 1
esac