diff options
-rw-r--r-- | board/samus/board.h | 1 | ||||
-rw-r--r-- | common/fan.c | 12 | ||||
-rw-r--r-- | include/config.h | 7 |
3 files changed, 20 insertions, 0 deletions
diff --git a/board/samus/board.h b/board/samus/board.h index da51e73631..05bb3c6961 100644 --- a/board/samus/board.h +++ b/board/samus/board.h @@ -53,6 +53,7 @@ #define CONFIG_CHARGER_DISCHARGE_ON_AC #define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1 #define CONFIG_FANS 2 +#define CONFIG_FAN_UPDATE_PERIOD 10 #define CONFIG_GESTURE_DETECTION #define CONFIG_GESTURE_SAMPLING_INTERVAL_MS 5 #undef CONFIG_HIBERNATE_DELAY_SEC diff --git a/common/fan.c b/common/fan.c index cb080c15c9..9196ddf36b 100644 --- a/common/fan.c +++ b/common/fan.c @@ -19,6 +19,11 @@ * things manually. */ static int thermal_control_enabled[CONFIG_FANS]; +#ifdef CONFIG_FAN_UPDATE_PERIOD +/* Should we ignore the fans for a while? */ +static int fan_update_counter[CONFIG_FANS]; +#endif + #ifndef CONFIG_FAN_RPM_CUSTOM /* This is the default implementation. It's only called over [0,100]. * Convert the percentage to a target RPM. We can't simply scale all @@ -49,6 +54,13 @@ test_mockable void fan_set_percent_needed(int fan, int pct) if (!thermal_control_enabled[fan]) return; +#ifdef CONFIG_FAN_UPDATE_PERIOD + /* Only set each fan every so often, to avoid rapid changes. */ + fan_update_counter[fan] %= CONFIG_FAN_UPDATE_PERIOD; + if (fan_update_counter[fan]++) + return; +#endif + new_rpm = fan_percent_to_rpm(fan, pct); actual_rpm = fan_get_rpm_actual(fans[fan].ch); diff --git a/include/config.h b/include/config.h index 9e4e1999f7..9fb9508644 100644 --- a/include/config.h +++ b/include/config.h @@ -551,6 +551,13 @@ */ #undef CONFIG_FAN_RPM_CUSTOM +/* + * We normally check and update the fans once per second (HOOK_SECOND). If this + * is #defined to a postive integer N, we will only update the fans every N + * seconds instead. + */ +#undef CONFIG_FAN_UPDATE_PERIOD + /*****************************************************************************/ /* Flash configuration */ |