fan: Replace 'static const' with defines

SDCC is not able to optimize statics [1]. Replace their use with defines
so significantly better code is generated.

[1]: https://sourceforge.net/p/sdcc/feature-requests/414/

Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
Tim Crawford
2021-12-16 16:59:39 -07:00
committed by Jeremy Soller
parent 84f9aad7d8
commit ee8ba5b72e

View File

@ -5,14 +5,14 @@
#include <ec/pwm.h> #include <ec/pwm.h>
#if SMOOTH_FANS != 0 #if SMOOTH_FANS != 0
static const uint8_t max_jump_up = (MAX_FAN_SPEED - MIN_FAN_SPEED) / (uint8_t) SMOOTH_FANS_UP; #define MAX_JUMP_UP ((MAX_FAN_SPEED - MIN_FAN_SPEED) / (uint8_t)SMOOTH_FANS_UP)
static const uint8_t max_jump_down = (MAX_FAN_SPEED - MIN_FAN_SPEED) / (uint8_t) SMOOTH_FANS_DOWN; #define MAX_JUMP_DOWN ((MAX_FAN_SPEED - MIN_FAN_SPEED) / (uint8_t)SMOOTH_FANS_DOWN)
#else #else
static const uint8_t max_jump_up = MAX_FAN_SPEED - MIN_FAN_SPEED; #define MAX_JUMP_UP (MAX_FAN_SPEED - MIN_FAN_SPEED)
static const uint8_t max_jump_down = MAX_FAN_SPEED - MIN_FAN_SPEED; #define MAX_JUMP_DOWN (MAX_FAN_SPEED - MIN_FAN_SPEED)
#endif #endif
static const uint8_t min_speed_to_smooth = PWM_DUTY(SMOOTH_FANS_MIN); #define MIN_SPEED_TO_SMOOTH PWM_DUTY(SMOOTH_FANS_MIN)
bool fan_max = false; bool fan_max = false;
uint8_t last_duty_dgpu = 0; uint8_t last_duty_dgpu = 0;
@ -121,12 +121,12 @@ uint8_t fan_smooth(uint8_t last_duty, uint8_t duty) __reentrant {
// ramping down // ramping down
if (duty < last_duty) { if (duty < last_duty) {
// out of bounds (lower) safeguard // out of bounds (lower) safeguard
uint8_t smoothed = last_duty < MIN_FAN_SPEED + max_jump_down uint8_t smoothed = last_duty < MIN_FAN_SPEED + MAX_JUMP_DOWN
? MIN_FAN_SPEED ? MIN_FAN_SPEED
: last_duty - max_jump_down; : last_duty - MAX_JUMP_DOWN;
// use smoothed value if above min and if smoothed is closer than raw // use smoothed value if above min and if smoothed is closer than raw
if (last_duty > min_speed_to_smooth && smoothed > duty) { if (last_duty > MIN_SPEED_TO_SMOOTH && smoothed > duty) {
next_duty = smoothed; next_duty = smoothed;
} }
} }
@ -134,12 +134,12 @@ uint8_t fan_smooth(uint8_t last_duty, uint8_t duty) __reentrant {
// ramping up // ramping up
if (duty > last_duty) { if (duty > last_duty) {
// out of bounds (higher) safeguard // out of bounds (higher) safeguard
uint8_t smoothed = last_duty > MAX_FAN_SPEED - max_jump_up uint8_t smoothed = last_duty > MAX_FAN_SPEED - MAX_JUMP_UP
? MAX_FAN_SPEED ? MAX_FAN_SPEED
: last_duty + max_jump_up; : last_duty + MAX_JUMP_UP;
// use smoothed value if above min and if smoothed is closer than raw // use smoothed value if above min and if smoothed is closer than raw
if (duty > min_speed_to_smooth && smoothed < duty) { if (duty > MIN_SPEED_TO_SMOOTH && smoothed < duty) {
next_duty = smoothed; next_duty = smoothed;
} }
} }