Module Name: src
Committed By: macallan
Date: Wed Mar 21 15:41:34 UTC 2018
Modified Files:
src/sys/dev/i2c: fcu.c
Log Message:
effectively enforce fan speed limits, deal with negatives properly
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/i2c/fcu.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/i2c/fcu.c
diff -u src/sys/dev/i2c/fcu.c:1.2 src/sys/dev/i2c/fcu.c:1.3
--- src/sys/dev/i2c/fcu.c:1.2 Fri Mar 16 22:11:53 2018
+++ src/sys/dev/i2c/fcu.c Wed Mar 21 15:41:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: fcu.c,v 1.2 2018/03/16 22:11:53 macallan Exp $ */
+/* $NetBSD: fcu.c,v 1.3 2018/03/21 15:41:34 macallan Exp $ */
/*-
* Copyright (c) 2018 Michael Lorenz
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.2 2018/03/16 22:11:53 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.3 2018/03/21 15:41:34 macallan Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -163,10 +163,10 @@ fcu_attach(device_t parent, device_t sel
/* init zones */
sc->sc_zones[FCU_ZONE_CPU_A].filter = is_cpu_a;
- sc->sc_zones[FCU_ZONE_CPU_A].threshold = 45;
+ sc->sc_zones[FCU_ZONE_CPU_A].threshold = 50;
sc->sc_zones[FCU_ZONE_CPU_A].nfans = 0;
sc->sc_zones[FCU_ZONE_CPU_B].filter = is_cpu_b;
- sc->sc_zones[FCU_ZONE_CPU_B].threshold = 45;
+ sc->sc_zones[FCU_ZONE_CPU_B].threshold = 50;
sc->sc_zones[FCU_ZONE_CPU_B].nfans = 0;
sc->sc_zones[FCU_ZONE_CASE].filter = is_case;
sc->sc_zones[FCU_ZONE_CASE].threshold = 50;
@@ -401,13 +401,14 @@ fcu_set_fan_rpm(struct fcu_softc *sc, fc
int error;
uint8_t cmd;
+ if (speed > f->max_rpm) speed = f->max_rpm;
+ if (speed < f->base_rpm) speed = f->base_rpm;
+
if (f->reg < 0x30) {
uint16_t data;
/* simple rpm fan, just poke the register */
if (f->target == speed) return;
- speed = min(speed, f->max_rpm);
- speed = max(speed, f->base_rpm);
iic_acquire_bus(sc->sc_i2c, 0);
cmd = f->reg;
data = (speed << 3);
@@ -469,7 +470,8 @@ fcu_adjust_zone(struct fcu_softc *sc, in
}
temp = (temp - 273150000) / 1000000;
- diff = (temp - z->threshold);
+ diff = temp - z->threshold;
+ if (diff < 0) diff = 0;
/* now adjust each fan to the new duty cycle */
for (i = 0; i < z->nfans; i++) {
@@ -479,6 +481,7 @@ fcu_adjust_zone(struct fcu_softc *sc, in
}
f = &sc->sc_fans[z->fans[i]];
speed = f->base_rpm + diff * f->step;
+ DPRINTF("diff %d base %d sp %d\n", diff, f->base_rpm, speed);
fcu_set_fan_rpm(sc, f, speed);
}
}