diff options
author | Bill Richardson <wfrichar@chromium.org> | 2015-02-17 12:27:04 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-02-18 04:53:30 +0000 |
commit | d64bb99149e013a02b0db6ac1313080ad298f2f0 (patch) | |
tree | b7c7593600659525edf60a739522cfccef4b1c1c | |
parent | a573a6c0fd051599c711c8748c4fe92743d93b6c (diff) | |
download | chrome-ec-d64bb99149e013a02b0db6ac1313080ad298f2f0.tar.gz |
samus: Only update fan speeds every N seconds
This adds CONFIG_FAN_UPDATE_PERIOD to limit the frequency at which
the fan speeds are updated. Short version: the CPU core temp
fluctuates rapidly, causing the fans turn off and on annoyingly
often (assuming you have good hearing and are in a quiet room).
With this CL, we limit the speed changes to only once every N
seconds. N should be long enough to be less annoying, yet short
enough that the CPU doesn't overheat while we're not looking.
BUG=chrome-os-partner:34789
BRANCH=ToT,samus
TEST=manual
Let it sit quietly, then visit a busy webpage, then let it sit a
while. The fan speed should only change every 10 seconds or so,
not every second.
Change-Id: Id985350394f24d56dc4a1e51af09487ac643285b
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/250501
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
-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 */ |