samus: change fan RPM values, enable fast-start

Updating the fan speeds according to the manufacturer's specs.

The fan vendor recommends that the minimum fan speed be a 20%
duty cycle. Since the built-in fan controller has a tach-based
feedback loop, I'm using the RPM value instead of the duty cycle
(20% is 2286 RPM, according to the vendor).

The vendor also wants a 30% duty cycle to start turning, but the
built-in fan controller provides support for fast-start too. The
controller's minimum fast-start duty cycle is 50%, but it also
has a programmable number of revolutions that it will wait before
backing off.

Holding my ear down close to the fans while they start and stop,
it seems that the minimum 2 revolution start period is sufficient
and provides the least noise. Of course, since I've never had any
problems starting the fans directly at 1000 RPM this noise is a
little more noticeable than that. It's quite possible that the
built-in controller is smart enough to make 1000 RPM work by
bumping the duty cycle up until the fans turn even if the fans
don't like it.

BUG=chrome-os-partner:32892
BRANCH=ToT,samus
TEST=manual

Listen closely and run the EC console "faninfo" command to see
the fans start and stop as the system boots and idles.

Change-Id: I47c9e7cef3f9f4bd815a13032fe10234decd62ed
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/224830
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
Bill Richardson
2014-10-21 14:21:45 -07:00
committed by chrome-internal-fetch
parent 7eaa290c35
commit 8cd9856cf8
3 changed files with 27 additions and 16 deletions

View File

@@ -21,8 +21,11 @@ struct fan_t {
int enable_gpio;
};
/* Values for the flags field */
#define FAN_USE_RPM_MODE (1 << 0)
/* Values for .flags field */
/* Enable automatic RPM control using tach input */
#define FAN_USE_RPM_MODE (1 << 0)
/* Require a higher duty cycle to start up than to keep running */
#define FAN_USE_FAST_START (1 << 1)
/* The list of fans is instantiated in board.c. */
extern const struct fan_t fans[];
@@ -82,9 +85,6 @@ enum fan_status {
};
enum fan_status fan_get_status(int ch);
/* Flag to enable automatic RPM control using tach input */
#define FAN_USE_RPM_MODE (1 << 0)
/* Initialize the HW according to the desired flags */
void fan_channel_setup(int ch, unsigned int flags);