windfarm_pm81.c (57b8628bb0ac4e47c806e45c5bbd89282e93869b) windfarm_pm81.c (33e6820b767a5bfa4a0d579da6ee4568a2b1e730)
1/*
2 * Windfarm PowerMac thermal control. iMac G5
3 *
4 * (c) Copyright 2005 Benjamin Herrenschmidt, IBM Corp.
5 * <benh@kernel.crashing.org>
6 *
7 * Released under the term of the GNU GPL v2.
8 *

--- 288 unchanged lines hidden (view full) ---

297
298 /* Fill PID params */
299 pid_param.gd = param->gd;
300 pid_param.gp = param->gp;
301 pid_param.gr = param->gr;
302 pid_param.interval = WF_SMU_SYS_FANS_INTERVAL;
303 pid_param.history_len = WF_SMU_SYS_FANS_HISTORY_SIZE;
304 pid_param.itarget = param->itarget;
1/*
2 * Windfarm PowerMac thermal control. iMac G5
3 *
4 * (c) Copyright 2005 Benjamin Herrenschmidt, IBM Corp.
5 * <benh@kernel.crashing.org>
6 *
7 * Released under the term of the GNU GPL v2.
8 *

--- 288 unchanged lines hidden (view full) ---

297
298 /* Fill PID params */
299 pid_param.gd = param->gd;
300 pid_param.gp = param->gp;
301 pid_param.gr = param->gr;
302 pid_param.interval = WF_SMU_SYS_FANS_INTERVAL;
303 pid_param.history_len = WF_SMU_SYS_FANS_HISTORY_SIZE;
304 pid_param.itarget = param->itarget;
305 pid_param.min = fan_system->ops->get_min(fan_system);
306 pid_param.max = fan_system->ops->get_max(fan_system);
305 pid_param.min = wf_control_get_min(fan_system);
306 pid_param.max = wf_control_get_max(fan_system);
307 if (fan_hd) {
308 pid_param.min =
307 if (fan_hd) {
308 pid_param.min =
309 max(pid_param.min,fan_hd->ops->get_min(fan_hd));
309 max(pid_param.min, wf_control_get_min(fan_hd));
310 pid_param.max =
310 pid_param.max =
311 min(pid_param.max,fan_hd->ops->get_max(fan_hd));
311 min(pid_param.max, wf_control_get_max(fan_hd));
312 }
313 wf_pid_init(&wf_smu_sys_fans->pid, &pid_param);
314
315 DBG("wf: System Fan control initialized.\n");
316 DBG(" itarged=%d.%03d, min=%d RPM, max=%d RPM\n",
317 FIX32TOPRINT(pid_param.itarget), pid_param.min, pid_param.max);
318 return;
319

--- 12 unchanged lines hidden (view full) ---

332
333 if (--st->ticks != 0) {
334 if (wf_smu_readjust)
335 goto readjust;
336 return;
337 }
338 st->ticks = WF_SMU_SYS_FANS_INTERVAL;
339
312 }
313 wf_pid_init(&wf_smu_sys_fans->pid, &pid_param);
314
315 DBG("wf: System Fan control initialized.\n");
316 DBG(" itarged=%d.%03d, min=%d RPM, max=%d RPM\n",
317 FIX32TOPRINT(pid_param.itarget), pid_param.min, pid_param.max);
318 return;
319

--- 12 unchanged lines hidden (view full) ---

332
333 if (--st->ticks != 0) {
334 if (wf_smu_readjust)
335 goto readjust;
336 return;
337 }
338 st->ticks = WF_SMU_SYS_FANS_INTERVAL;
339
340 rc = sensor_hd_temp->ops->get_value(sensor_hd_temp, &temp);
340 rc = wf_sensor_get(sensor_hd_temp, &temp);
341 if (rc) {
342 printk(KERN_WARNING "windfarm: HD temp sensor error %d\n",
343 rc);
344 wf_smu_failure_state |= FAILURE_SENSOR;
345 return;
346 }
347
348 DBG("wf_smu: System Fans tick ! HD temp: %d.%03d\n",

--- 19 unchanged lines hidden (view full) ---

368 DBG("wf_smu: adjusted setpoint: %d RPM\n", (int)scaled);
369
370 if (st->sys_setpoint == scaled && new_setpoint == st->hd_setpoint)
371 return;
372 st->sys_setpoint = scaled;
373 st->hd_setpoint = new_setpoint;
374 readjust:
375 if (fan_system && wf_smu_failure_state == 0) {
341 if (rc) {
342 printk(KERN_WARNING "windfarm: HD temp sensor error %d\n",
343 rc);
344 wf_smu_failure_state |= FAILURE_SENSOR;
345 return;
346 }
347
348 DBG("wf_smu: System Fans tick ! HD temp: %d.%03d\n",

--- 19 unchanged lines hidden (view full) ---

368 DBG("wf_smu: adjusted setpoint: %d RPM\n", (int)scaled);
369
370 if (st->sys_setpoint == scaled && new_setpoint == st->hd_setpoint)
371 return;
372 st->sys_setpoint = scaled;
373 st->hd_setpoint = new_setpoint;
374 readjust:
375 if (fan_system && wf_smu_failure_state == 0) {
376 rc = fan_system->ops->set_value(fan_system, st->sys_setpoint);
376 rc = wf_control_set(fan_system, st->sys_setpoint);
377 if (rc) {
378 printk(KERN_WARNING "windfarm: Sys fan error %d\n",
379 rc);
380 wf_smu_failure_state |= FAILURE_FAN;
381 }
382 }
383 if (fan_hd && wf_smu_failure_state == 0) {
377 if (rc) {
378 printk(KERN_WARNING "windfarm: Sys fan error %d\n",
379 rc);
380 wf_smu_failure_state |= FAILURE_FAN;
381 }
382 }
383 if (fan_hd && wf_smu_failure_state == 0) {
384 rc = fan_hd->ops->set_value(fan_hd, st->hd_setpoint);
384 rc = wf_control_set(fan_hd, st->hd_setpoint);
385 if (rc) {
386 printk(KERN_WARNING "windfarm: HD fan error %d\n",
387 rc);
388 wf_smu_failure_state |= FAILURE_FAN;
389 }
390 }
391}
392

--- 49 unchanged lines hidden (view full) ---

442 tdelta = ((s32)piddata->target_temp_delta) << 16;
443 maxpow = ((s32)piddata->max_power) << 16;
444 powadj = ((s32)piddata->power_adj) << 16;
445
446 pid_param.tmax = tmax;
447 pid_param.ttarget = tmax - tdelta;
448 pid_param.pmaxadj = maxpow - powadj;
449
385 if (rc) {
386 printk(KERN_WARNING "windfarm: HD fan error %d\n",
387 rc);
388 wf_smu_failure_state |= FAILURE_FAN;
389 }
390 }
391}
392

--- 49 unchanged lines hidden (view full) ---

442 tdelta = ((s32)piddata->target_temp_delta) << 16;
443 maxpow = ((s32)piddata->max_power) << 16;
444 powadj = ((s32)piddata->power_adj) << 16;
445
446 pid_param.tmax = tmax;
447 pid_param.ttarget = tmax - tdelta;
448 pid_param.pmaxadj = maxpow - powadj;
449
450 pid_param.min = fan_cpu_main->ops->get_min(fan_cpu_main);
451 pid_param.max = fan_cpu_main->ops->get_max(fan_cpu_main);
450 pid_param.min = wf_control_get_min(fan_cpu_main);
451 pid_param.max = wf_control_get_max(fan_cpu_main);
452
453 wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param);
454
455 DBG("wf: CPU Fan control initialized.\n");
456 DBG(" ttarged=%d.%03d, tmax=%d.%03d, min=%d RPM, max=%d RPM\n",
457 FIX32TOPRINT(pid_param.ttarget), FIX32TOPRINT(pid_param.tmax),
458 pid_param.min, pid_param.max);
459

--- 16 unchanged lines hidden (view full) ---

476
477 if (--st->ticks != 0) {
478 if (wf_smu_readjust)
479 goto readjust;
480 return;
481 }
482 st->ticks = WF_SMU_CPU_FANS_INTERVAL;
483
452
453 wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param);
454
455 DBG("wf: CPU Fan control initialized.\n");
456 DBG(" ttarged=%d.%03d, tmax=%d.%03d, min=%d RPM, max=%d RPM\n",
457 FIX32TOPRINT(pid_param.ttarget), FIX32TOPRINT(pid_param.tmax),
458 pid_param.min, pid_param.max);
459

--- 16 unchanged lines hidden (view full) ---

476
477 if (--st->ticks != 0) {
478 if (wf_smu_readjust)
479 goto readjust;
480 return;
481 }
482 st->ticks = WF_SMU_CPU_FANS_INTERVAL;
483
484 rc = sensor_cpu_temp->ops->get_value(sensor_cpu_temp, &temp);
484 rc = wf_sensor_get(sensor_cpu_temp, &temp);
485 if (rc) {
486 printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n",
487 rc);
488 wf_smu_failure_state |= FAILURE_SENSOR;
489 return;
490 }
491
485 if (rc) {
486 printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n",
487 rc);
488 wf_smu_failure_state |= FAILURE_SENSOR;
489 return;
490 }
491
492 rc = sensor_cpu_power->ops->get_value(sensor_cpu_power, &power);
492 rc = wf_sensor_get(sensor_cpu_power, &power);
493 if (rc) {
494 printk(KERN_WARNING "windfarm: CPU power sensor error %d\n",
495 rc);
496 wf_smu_failure_state |= FAILURE_SENSOR;
497 return;
498 }
499
500 DBG("wf_smu: CPU Fans tick ! CPU temp: %d.%03d, power: %d.%03d\n",

--- 19 unchanged lines hidden (view full) ---

520
521 DBG("wf_smu: adjusted setpoint: %d RPM\n", (int)new_setpoint);
522
523 if (st->cpu_setpoint == new_setpoint)
524 return;
525 st->cpu_setpoint = new_setpoint;
526 readjust:
527 if (fan_cpu_main && wf_smu_failure_state == 0) {
493 if (rc) {
494 printk(KERN_WARNING "windfarm: CPU power sensor error %d\n",
495 rc);
496 wf_smu_failure_state |= FAILURE_SENSOR;
497 return;
498 }
499
500 DBG("wf_smu: CPU Fans tick ! CPU temp: %d.%03d, power: %d.%03d\n",

--- 19 unchanged lines hidden (view full) ---

520
521 DBG("wf_smu: adjusted setpoint: %d RPM\n", (int)new_setpoint);
522
523 if (st->cpu_setpoint == new_setpoint)
524 return;
525 st->cpu_setpoint = new_setpoint;
526 readjust:
527 if (fan_cpu_main && wf_smu_failure_state == 0) {
528 rc = fan_cpu_main->ops->set_value(fan_cpu_main,
529 st->cpu_setpoint);
528 rc = wf_control_set(fan_cpu_main, st->cpu_setpoint);
530 if (rc) {
531 printk(KERN_WARNING "windfarm: CPU main fan"
532 " error %d\n", rc);
533 wf_smu_failure_state |= FAILURE_FAN;
534 }
535 }
536}
537

--- 273 unchanged lines hidden ---
529 if (rc) {
530 printk(KERN_WARNING "windfarm: CPU main fan"
531 " error %d\n", rc);
532 wf_smu_failure_state |= FAILURE_FAN;
533 }
534 }
535}
536

--- 273 unchanged lines hidden ---