Provide multiple fan support within the EC itself

This adds explicit "int fan" args to the exported functions from
common/fan.c: fan_set_percent_needed() and fan_percent_to_rpm(). Within that
file, multiple fans are handled independently.

This is not complete, though. Host commands and sysjump support still only
handle a single fan, so at the moment multiple fans are treated identically
in those cases.

BUG=chrome-os-partner:23530
BRANCH=none
TEST=manual

All boards build, "make runtests" passes.

On a multi-fan system, the EC command "faninfo" displays multiple results:

  > faninfo
  Fan 0 Actual:    0 rpm
  Fan 0 Target:    0 rpm
  Fan 0 Duty:   0%
  Fan 0 Status: 0 (not spinning)
  Fan 0 Mode:   rpm
  Fan 0 Auto:   yes
  Fan 0 Enable: yes

  Fan 1 Actual:    0 rpm
  Fan 1 Target:    0 rpm
  Fan 1 Duty:   0%
  Fan 1 Status: 0 (not spinning)
  Fan 1 Mode:   rpm
  Fan 1 Auto:   no
  Fan 1 Enable: no
  >

and the "fanduty", "fanset", and "fanauto" all require the fan number as the
first arg:

  > fanduty 0 30
  Setting fan 0 duty cycle to 30%
  > fanset 1 2000
  Setting fan 1 rpm target to 2000
  > fanauto 0
  > fanauto 1

On single-fan systems, there is no visible change.

Change-Id: Idb8b818122e157960d56779b2a86e5ba433bee1b
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/175368
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
Bill Richardson
2013-11-01 11:11:09 -07:00
committed by chrome-internal-fetch
parent 00682eb80f
commit 88503ab4ec
8 changed files with 205 additions and 105 deletions

View File

@@ -32,19 +32,21 @@ extern const struct fan_t fans[];
* Set the amount of active cooling needed. The thermal control task will call
* this frequently, and the fan control logic will attempt to provide it.
*
* @param fan Fan number (index into fans[])
* @param pct Percentage of cooling effort needed (0 - 100)
*/
void fan_set_percent_needed(int pct); /* HEY: need fan arg */
void fan_set_percent_needed(int fan, int pct);
/**
* This function translates the percentage of cooling needed into a target RPM.
* The default implementation should be sufficient for most needs, but
* individual boards may provide a custom version if needed (see config.h).
*
* @param fan Fan number (index into fans[])
* @param pct Percentage of cooling effort needed (always in [0,100])
* Return Target RPM for fan
*/
int fan_percent_to_rpm(int pct); /* HEY: need fan arg */
int fan_percent_to_rpm(int fan, int pct);
/**