in windfarm_rm31.c [365:417]
static void backside_fan_tick(void)
{
s32 temp, dtemp;
int speed, dspeed, fan_min;
int err;
if (!backside_fan || !backside_temp || !dimms_temp || !backside_tick)
return;
if (--backside_tick > 0)
return;
backside_tick = backside_pid.param.interval;
DBG_LOTS("* backside fans tick\n");
/* Update fan speed from actual fans */
err = wf_control_get(backside_fan, &speed);
if (!err)
backside_pid.target = speed;
err = wf_sensor_get(backside_temp, &temp);
if (err) {
printk(KERN_WARNING "windfarm: U3 temp sensor error %d\n",
err);
failure_state |= FAILURE_SENSOR;
wf_control_set_max(backside_fan);
return;
}
speed = wf_pid_run(&backside_pid, temp);
DBG_LOTS("backside PID temp=%d.%.3d speed=%d\n",
FIX32TOPRINT(temp), speed);
err = wf_sensor_get(dimms_temp, &dtemp);
if (err) {
printk(KERN_WARNING "windfarm: DIMMs temp sensor error %d\n",
err);
failure_state |= FAILURE_SENSOR;
wf_control_set_max(backside_fan);
return;
}
dspeed = wf_pid_run(&dimms_pid, dtemp);
dimms_output_clamp = dspeed;
fan_min = (dspeed * 100) / 14000;
fan_min = max(fan_min, backside_param.min);
speed = max(speed, fan_min);
err = wf_control_set(backside_fan, speed);
if (err) {
printk(KERN_WARNING "windfarm: backside fan error %d\n", err);
failure_state |= FAILURE_FAN;
}
}