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 /common | |
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>
Diffstat (limited to 'common')
-rw-r--r-- | common/fan.c | 12 |
1 files changed, 12 insertions, 0 deletions
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); |