Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/i2c Adapt to changes in sysmon's limit structure
details: https://anonhg.NetBSD.org/src/rev/223452b4efa6
branches: trunk
changeset: 752102:223452b4efa6
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Sun Feb 14 23:07:22 2010 +0000
description:
Adapt to changes in sysmon's limit structure
diffstat:
sys/dev/i2c/sdtemp.c | 49 +++++++++++++++++++++++++------------------------
1 files changed, 25 insertions(+), 24 deletions(-)
diffs (142 lines):
diff -r 58626aa7532f -r 223452b4efa6 sys/dev/i2c/sdtemp.c
--- a/sys/dev/i2c/sdtemp.c Sun Feb 14 23:06:58 2010 +0000
+++ b/sys/dev/i2c/sdtemp.c Sun Feb 14 23:07:22 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sdtemp.c,v 1.9 2010/01/08 20:04:31 dyoung Exp $ */
+/* $NetBSD: sdtemp.c,v 1.10 2010/02/14 23:07:22 pgoyette Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.9 2010/01/08 20:04:31 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.10 2010/02/14 23:07:22 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -63,9 +63,9 @@
static void sdtemp_refresh(struct sysmon_envsys *, envsys_data_t *);
static void sdtemp_get_limits(struct sysmon_envsys *, envsys_data_t *,
- sysmon_envsys_lim_t *);
+ sysmon_envsys_lim_t *, uint32_t *);
static void sdtemp_set_limits(struct sysmon_envsys *, envsys_data_t *,
- sysmon_envsys_lim_t *);
+ sysmon_envsys_lim_t *, uint32_t *);
#ifdef NOT_YET
static int sdtemp_read_8(struct sdtemp_softc *, uint8_t, uint8_t *);
static int sdtemp_write_8(struct sdtemp_softc *, uint8_t, uint8_t);
@@ -172,6 +172,7 @@
struct sdtemp_softc *sc = device_private(self);
struct i2c_attach_args *ia = aux;
sysmon_envsys_lim_t limits;
+ uint32_t props;
uint16_t mfgid, devid;
int i, error;
@@ -272,19 +273,19 @@
aprint_error_dev(self, "couldn't establish power handler\n");
/* Retrieve and display hardware monitor limits */
- sdtemp_get_limits(sc->sc_sme, sc->sc_sensor, &limits);
+ sdtemp_get_limits(sc->sc_sme, sc->sc_sensor, &limits, &props);
aprint_normal_dev(self, "");
i = 0;
- if (limits.sel_flags & PROP_WARNMIN) {
+ if (props & PROP_WARNMIN) {
aprint_normal("low limit %dC", __UK2C(limits.sel_warnmin));
i++;
}
- if (limits.sel_flags & PROP_WARNMAX) {
+ if (props & PROP_WARNMAX) {
aprint_normal("%shigh limit %dC ", (i)?", ":"",
__UK2C(limits.sel_warnmax));
i++;
}
- if (limits.sel_flags & PROP_CRITMAX) {
+ if (props & PROP_CRITMAX) {
aprint_normal("%scritical limit %dC ", (i)?", ":"",
__UK2C(limits.sel_critmax));
i++;
@@ -305,50 +306,50 @@
/* Retrieve current limits from device, and encode in uKelvins */
static void
sdtemp_get_limits(struct sysmon_envsys *sme, envsys_data_t *edata,
- sysmon_envsys_lim_t *limits)
+ sysmon_envsys_lim_t *limits, uint32_t *props)
{
struct sdtemp_softc *sc = sme->sme_cookie;
uint16_t lim;
- limits->sel_flags = 0;
+ *props = 0;
iic_acquire_bus(sc->sc_tag, 0);
if (sdtemp_read_16(sc, SDTEMP_REG_LOWER_LIM, &lim) == 0 && lim != 0) {
limits->sel_warnmin = sdtemp_decode_temp(sc, lim);
- limits->sel_flags |= PROP_WARNMIN;
+ *props |= PROP_WARNMIN;
}
if (sdtemp_read_16(sc, SDTEMP_REG_UPPER_LIM, &lim) == 0 && lim != 0) {
limits->sel_warnmax = sdtemp_decode_temp(sc, lim);
- limits->sel_flags |= PROP_WARNMAX;
+ *props |= PROP_WARNMAX;
}
if (sdtemp_read_16(sc, SDTEMP_REG_CRIT_LIM, &lim) == 0 && lim != 0) {
limits->sel_critmax = sdtemp_decode_temp(sc, lim);
- limits->sel_flags |= PROP_CRITMAX;
+ *props |= PROP_CRITMAX;
}
iic_release_bus(sc->sc_tag, 0);
- if (limits->sel_flags != 0)
- limits->sel_flags |= PROP_DRIVER_LIMITS;
+ if (*props != 0)
+ *props |= PROP_DRIVER_LIMITS;
}
/* Send current limit values to the device */
static void
sdtemp_set_limits(struct sysmon_envsys *sme, envsys_data_t *edata,
- sysmon_envsys_lim_t *limits)
+ sysmon_envsys_lim_t *limits, uint32_t *props)
{
uint16_t val;
struct sdtemp_softc *sc = sme->sme_cookie;
iic_acquire_bus(sc->sc_tag, 0);
- if (limits->sel_flags & PROP_WARNMIN) {
+ if (*props & PROP_WARNMIN) {
val = __UK2C(limits->sel_warnmin);
(void)sdtemp_write_16(sc, SDTEMP_REG_LOWER_LIM,
(val << 4) & SDTEMP_TEMP_MASK);
}
- if (limits->sel_flags & PROP_WARNMAX) {
+ if (*props & PROP_WARNMAX) {
val = __UK2C(limits->sel_warnmax);
(void)sdtemp_write_16(sc, SDTEMP_REG_UPPER_LIM,
(val << 4) & SDTEMP_TEMP_MASK);
}
- if (limits->sel_flags & PROP_CRITMAX) {
+ if (*props & PROP_CRITMAX) {
val = __UK2C(limits->sel_critmax);
(void)sdtemp_write_16(sc, SDTEMP_REG_CRIT_LIM,
(val << 4) & SDTEMP_TEMP_MASK);
@@ -360,12 +361,12 @@
* limits are set that we cannot handle, tell sysmon that
* the driver will take care of monitoring the limits!
*/
- if (limits->sel_flags & (PROP_CRITMIN | PROP_BATTCAP | PROP_BATTWARN))
- limits->sel_flags &= ~PROP_DRIVER_LIMITS;
- else if (limits->sel_flags & PROP_LIMITS)
- limits->sel_flags |= PROP_DRIVER_LIMITS;
+ if (*props & (PROP_CRITMIN | PROP_BATTCAP | PROP_BATTWARN))
+ *props &= ~PROP_DRIVER_LIMITS;
+ else if (*props & PROP_LIMITS)
+ *props |= PROP_DRIVER_LIMITS;
else
- limits->sel_flags &= ~PROP_DRIVER_LIMITS;
+ *props &= ~PROP_DRIVER_LIMITS;
}
#ifdef NOT_YET /* All registers on these sensors are 16-bits */
Home |
Main Index |
Thread Index |
Old Index