summaryrefslogtreecommitdiff
path: root/common/fan.c
diff options
context:
space:
mode:
authorDevin Lu <devin.lu@quantatw.com>2019-11-26 16:19:26 +0800
committerCommit Bot <commit-bot@chromium.org>2020-01-31 03:05:02 +0000
commit876de6a603072fe121afe99fbda5d4f0e9efd266 (patch)
treed7a515b7e3c05ebe5a15ba9d9427169a9fb2c994 /common/fan.c
parentd1af13802e268f629e0f591b8f4f16543ebc6322 (diff)
downloadchrome-ec-876de6a603072fe121afe99fbda5d4f0e9efd266.tar.gz
jinlon: add dual fan control by ec
This patch allows the ec to manage two fans. Currently common/thermal.c cannot monitor more than 1 fan at the same time. This CL implements a board-specific thermal policy with multiple fans. BUG=b:141259174 BRANCH=hatch TEST=thermal team verified thermal policy is expected. Change-Id: I6ababcb0795408e8062b7605bc749e23b8bde45a Signed-off-by: Devin Lu <Devin.Lu@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1936077 Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Diffstat (limited to 'common/fan.c')
-rw-r--r--common/fan.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/common/fan.c b/common/fan.c
index f3ee013a4c..c91fa1b318 100644
--- a/common/fan.c
+++ b/common/fan.c
@@ -20,6 +20,11 @@
* things manually. */
static int thermal_control_enabled[CONFIG_FANS];
+int is_thermal_control_enabled(int idx)
+{
+ return thermal_control_enabled[idx];
+}
+
#ifdef CONFIG_FAN_UPDATE_PERIOD
/* Should we ignore the fans for a while? */
static int fan_update_counter[CONFIG_FANS];
@@ -72,7 +77,7 @@ test_mockable void fan_set_percent_needed(int fan, int pct)
{
int actual_rpm, new_rpm;
- if (!thermal_control_enabled[fan])
+ if (!is_thermal_control_enabled(fan))
return;
#ifdef CONFIG_FAN_UPDATE_PERIOD
@@ -195,7 +200,7 @@ static int cc_faninfo(int argc, char **argv)
ccprintf("%sMode: %s\n", leader,
fan_get_rpm_mode(FAN_CH(fan)) ? "rpm" : "duty");
ccprintf("%sAuto: %s\n", leader,
- thermal_control_enabled[fan] ? "yes" : "no");
+ is_thermal_control_enabled(fan) ? "yes" : "no");
ccprintf("%sEnable: %s\n", leader,
fan_get_enabled(FAN_CH(fan)) ? "yes" : "no");
is_pgood = is_powered(fan);
@@ -317,7 +322,7 @@ int dptf_get_fan_duty_target(void)
if (fan_count == 0)
return -1;
- if (thermal_control_enabled[fan] || fan_get_rpm_mode(FAN_CH(fan)))
+ if (is_thermal_control_enabled(fan) || fan_get_rpm_mode(FAN_CH(fan)))
return -1;
return fan_get_duty(FAN_CH(fan));
@@ -551,7 +556,7 @@ static void pwm_fan_preserve_state(void)
/* TODO(crosbug.com/p/23530): Still treating all fans as one. */
if (fan_get_enabled(FAN_CH(fan)))
state.flag |= FAN_STATE_FLAG_ENABLED;
- if (thermal_control_enabled[fan])
+ if (is_thermal_control_enabled(fan))
state.flag |= FAN_STATE_FLAG_THERMAL;
state.rpm = fan_get_rpm_target(FAN_CH(fan));