summaryrefslogtreecommitdiff
path: root/chip/lm4/fan.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/lm4/fan.c')
-rw-r--r--chip/lm4/fan.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/chip/lm4/fan.c b/chip/lm4/fan.c
index 8ec25bc1f8..1180d51906 100644
--- a/chip/lm4/fan.c
+++ b/chip/lm4/fan.c
@@ -132,7 +132,9 @@ int fan_is_stalled(int ch)
void fan_channel_setup(int ch, unsigned int flags)
{
- if (flags & FAN_USE_RPM_MODE) {
+ uint32_t init;
+
+ if (flags & FAN_USE_RPM_MODE)
/*
* Configure automatic/feedback mode:
* 0x8000 = bit 15 = auto-restart
@@ -146,8 +148,8 @@ void fan_channel_setup(int ch, unsigned int flags)
* (see note at top of file)
* 0x0000 = bit 0 = automatic control
*/
- LM4_FAN_FANCH(ch) = 0x802c;
- } else {
+ init = 0x802c;
+ else
/*
* Configure drive-only mode:
* 0x0000 = bit 15 = no auto-restart
@@ -159,8 +161,17 @@ void fan_channel_setup(int ch, unsigned int flags)
* 0x0000 = bits 3:2 = 1 pulses per revolution
* 0x0001 = bit 0 = manual control
*/
- LM4_FAN_FANCH(ch) = 0x0001;
- }
+ init = 0x0001;
+
+ if (flags & FAN_USE_FAST_START)
+ /*
+ * Configure fast-start mode
+ * 0x0000 = bits 10:8 = start period (2<<0) edges
+ * 0x0040 = bits 7:6 = fast start at 50% duty
+ */
+ init |= 0x0040;
+
+ LM4_FAN_FANCH(ch) = init;
}
static void fan_init(void)