Improve handling of second fan

Replace hard-coded PWM channels with defines so the second fan on darp10
can be handled like the second fan on units with a dGPU.

Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
Tim Crawford
2024-07-03 17:32:44 -06:00
committed by Tim Crawford
parent f8697a7ec4
commit e75a2f1e10
46 changed files with 125 additions and 50 deletions

View File

@@ -251,35 +251,32 @@ static uint8_t get_fan2_duty(void) {
}
#endif // CONFIG_HAVE_DGPU
static void fan_duty_set(uint8_t fan1_duty, uint8_t fan2_duty) __reentrant {
void fan_update_duty(void) {
uint8_t fan1_duty = get_fan1_duty();
#ifdef FAN2_PWM
uint8_t fan2_duty = get_fan2_duty();
#if SYNC_FANS != 0
fan1_duty = fan1_duty > fan2_duty ? fan1_duty : fan2_duty;
fan2_duty = fan1_duty > fan2_duty ? fan1_duty : fan2_duty;
#endif
fan1_duty = MAX(fan1_duty, fan2_duty);
fan2_duty = MAX(fan1_duty, fan2_duty);
#endif // SYNC_FANS
#endif // FAN2_PWM
// set FAN1 duty
if (fan1_duty != DCR2) {
if (fan1_duty != FAN1_PWM) {
TRACE("FAN1 fan_duty_raw=%d\n", fan1_duty);
last_fan1_duty = fan1_duty = fan_smooth(last_fan1_duty, fan1_duty);
DCR2 = fan_max ? MAX_FAN_SPEED : fan1_duty;
#if HAVE_CPU_FAN2
// FIXME: Handle better
DCR3 = fan_max ? MAX_FAN_SPEED : fan1_duty;
#endif
FAN1_PWM = fan_max ? MAX_FAN_SPEED : fan1_duty;
TRACE("FAN1 fan_duty_smoothed=%d\n", fan1_duty);
}
#ifdef FAN2_PWM
// set FAN2 duty
if (fan2_duty != DCR4) {
if (fan2_duty != FAN2_PWM) {
TRACE("FAN2 fan_duty_raw=%d\n", fan2_duty);
last_fan2_duty = fan2_duty = fan_smooth(last_fan2_duty, fan2_duty);
DCR4 = fan_max ? MAX_FAN_SPEED : fan2_duty;
FAN2_PWM = fan_max ? MAX_FAN_SPEED : fan2_duty;
TRACE("FAN2 fan_duty_smoothed=%d\n", fan2_duty);
}
}
void fan_update_duty(void) {
uint8_t fan1_duty = get_fan1_duty();
uint8_t fan2_duty = get_fan2_duty();
fan_duty_set(fan1_duty, fan2_duty);
#endif
}