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>
#if SMOOTH_FANS != 0
static const uint8_t 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_UP ((MAX_FAN_SPEED - MIN_FAN_SPEED) / (uint8_t)SMOOTH_FANS_UP)
#define MAX_JUMP_DOWN ((MAX_FAN_SPEED - MIN_FAN_SPEED) / (uint8_t)SMOOTH_FANS_DOWN)
#else
static const uint8_t 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_UP (MAX_FAN_SPEED - MIN_FAN_SPEED)
#define MAX_JUMP_DOWN (MAX_FAN_SPEED - MIN_FAN_SPEED)
#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;
uint8_t last_duty_dgpu = 0;
@ -121,12 +121,12 @@ uint8_t fan_smooth(uint8_t last_duty, uint8_t duty) __reentrant {
// ramping down
if (duty < last_duty) {
// 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
: last_duty - max_jump_down;
: last_duty - MAX_JUMP_DOWN;
// 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;
}
}
@ -134,12 +134,12 @@ uint8_t fan_smooth(uint8_t last_duty, uint8_t duty) __reentrant {
// ramping up
if (duty > last_duty) {
// 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
: last_duty + max_jump_up;
: last_duty + MAX_JUMP_UP;
// 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;
}
}