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:
committed by
Jeremy Soller
parent
84f9aad7d8
commit
ee8ba5b72e
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user