diff options
-rw-r--r-- | sys/arch/loongson/dev/kb3310.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/arch/loongson/dev/kb3310.c b/sys/arch/loongson/dev/kb3310.c index e445bda5ba0..600a5c24cac 100644 --- a/sys/arch/loongson/dev/kb3310.c +++ b/sys/arch/loongson/dev/kb3310.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kb3310.c,v 1.3 2010/02/24 17:38:39 deraadt Exp $ */ +/* $OpenBSD: kb3310.c,v 1.4 2010/02/24 18:29:39 otto Exp $ */ /* * Copyright (c) 2010 Otto Moerbeek <otto@drijf.net> * @@ -249,7 +249,7 @@ ykbec_refresh(void *arg) u_int val, bat_charge, bat_status, charge_status, bat_state, power_flag; int current; - val = ykbec_read16(sc, REG_FAN_SPEED_HIGH); + val = ykbec_read16(sc, REG_FAN_SPEED_HIGH) & 0xfffff; if (val != 0) val = KB3310_FAN_SPEED_DIVIDER / val; else @@ -262,11 +262,12 @@ ykbec_refresh(void *arg) sc->sc_sensor[2].value = ykbec_read16(sc, REG_DESIGN_CAP_HIGH) * 1000; sc->sc_sensor[3].value = ykbec_read16(sc, REG_FULLCHG_CAP_HIGH) * 1000; sc->sc_sensor[4].value = ykbec_read16(sc, REG_DESIGN_VOL_HIGH) * 1000; + current = ykbec_read16(sc, REG_CURRENT_HIGH); - if (current & 0x8000) - sc->sc_sensor[5].value = (0xffff - current) * 1000; - else - sc->sc_sensor[5].value = current * 1000; + /* sign extend short -> int, int -> int64 will be done next statement */ + current |= -(current & 0x8000); + sc->sc_sensor[5].value = current * -1000; + sc->sc_sensor[6].value = ykbec_read16(sc, REG_VOLTAGE_HIGH) * 1000; val = ykbec_read16(sc, REG_TEMPERATURE_HIGH); |