Move the {read,write}reg() routine addresses into the dbcool_softc so

that we can use different routines for macppc's ki2c attachment.  Fixes
problems reported by Robert Fritzsche on current-users@ list.
This commit is contained in:
pgoyette 2008-10-12 12:49:04 +00:00
parent 76528ab801
commit a3cdedf605
3 changed files with 113 additions and 80 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: dbcool_ki2c.c,v 1.2 2008/10/09 03:11:29 pgoyette Exp $ */
/* $NetBSD: dbcool_ki2c.c,v 1.3 2008/10/12 12:49:04 pgoyette Exp $ */
/*-
* Copyright (C) 2005 Michael Lorenz
@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: dbcool_ki2c.c,v 1.2 2008/10/09 03:11:29 pgoyette Exp $");
__KERNEL_RCSID(0, "$NetBSD: dbcool_ki2c.c,v 1.3 2008/10/12 12:49:04 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -50,6 +50,8 @@ __KERNEL_RCSID(0, "$NetBSD: dbcool_ki2c.c,v 1.2 2008/10/09 03:11:29 pgoyette Exp
static void dbcool_ki2c_attach(device_t, device_t, void *);
static int dbcool_ki2c_match(device_t, cfdata_t, void *);
static uint8_t dbcool_ki2c_readreg(struct dbcool_softc *, uint8_t);
static void dbcool_ki2c_writereg(struct dbcool_softc *, uint8_t, uint8_t);
CFATTACH_DECL_NEW(dbcool_ki2c, sizeof(struct dbcool_softc),
dbcool_ki2c_match, dbcool_ki2c_attach, NULL, NULL);
@ -83,13 +85,16 @@ dbcool_ki2c_attach(device_t parent, device_t self, void *aux)
sc->sc_tag = ka->ka_tag;
sc->sc_addr = ka->ka_addr & 0xfe;
sc->sc_readreg = dbcool_ki2c_readreg;
sc->sc_writereg = dbcool_ki2c_writereg;
if (dbcool_chip_ident(sc) < 0) {
aprint_error_dev(self, "Unrecognized dbCool chip - "
"set-up aborted\n");
return;
}
ver = dbcool_readreg(sc, DBCOOL_REVISION_REG);
ver = sc->sc_readreg(sc, DBCOOL_REVISION_REG);
if (sc->sc_chip->flags & DBCFLAG_4BIT_VER)
aprint_normal_dev(self, "%s dBCool(tm) Controller "
@ -104,3 +109,25 @@ dbcool_ki2c_attach(device_t parent, device_t self, void *aux)
if (!pmf_device_register(self, dbcool_pmf_suspend, dbcool_pmf_resume))
aprint_error_dev(self, "couldn't establish power handler\n");
}
static uint8_t
dbcool_ki2c_readreg(struct dbcool_softc *sc, uint8_t reg)
{
uint8_t data = 0;
iic_acquire_bus(sc->sc_tag, 0);
iic_exec(sc->sc_tag, I2C_OP_READ, sc->sc_addr, &reg, 1,
&data, 1, 0);
iic_release_bus(sc->sc_tag, 0);
return data;
}
static void
dbcool_ki2c_writereg(struct dbcool_softc *sc, uint8_t reg, uint8_t data)
{
uint8_t mdata[2] = {reg, data};
iic_acquire_bus(sc->sc_tag, 0);
iic_exec(sc->sc_tag, I2C_OP_WRITE, sc->sc_addr, &mdata, 2, NULL, 0, 0);
iic_release_bus(sc->sc_tag, 0);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: dbcool.c,v 1.4 2008/10/10 13:08:29 pgoyette Exp $ */
/* $NetBSD: dbcool.c,v 1.5 2008/10/12 12:49:04 pgoyette Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.4 2008/10/10 13:08:29 pgoyette Exp $");
__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.5 2008/10/12 12:49:04 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -591,6 +591,8 @@ dbcool_match(device_t parent, cfdata_t cf, void *aux)
struct dbcool_softc sc;
sc.sc_tag = ia->ia_tag;
sc.sc_addr = ia->ia_addr;
sc.sc_readreg = dbcool_readreg;
sc.sc_writereg = dbcool_writereg;
/* no probing if we attach to iic, but verify chip id */
if (dbcool_chip_ident(&sc) >= 0)
@ -609,12 +611,14 @@ dbcool_attach(device_t parent, device_t self, void *aux)
sc->sc_addr = args->ia_addr;
sc->sc_tag = args->ia_tag;
sc->sc_dev = self;
sc->sc_readreg = dbcool_readreg;
sc->sc_writereg = dbcool_writereg;
(void)dbcool_chip_ident(sc);
aprint_naive("\n");
aprint_normal("\n");
ver = dbcool_readreg(sc, DBCOOL_REVISION_REG);
ver = sc->sc_readreg(sc, DBCOOL_REVISION_REG);
if (sc->sc_chip->flags & DBCFLAG_4BIT_VER)
aprint_normal_dev(self, "%s dBCool(tm) Controller "
"(rev 0x%02x, stepping 0x%02x)\n", sc->sc_chip->name,
@ -656,10 +660,10 @@ bool dbcool_pmf_suspend(device_t dev PMF_FN_ARGS)
reg = DBCOOL_CONFIG2_REG;
bit = DBCOOL_CFG2_SHDN;
}
cfg = dbcool_readreg(sc, reg);
cfg = sc->sc_readreg(sc, reg);
sc->sc_suspend = cfg & bit;
cfg |= bit;
dbcool_writereg(sc, reg, cfg);
sc->sc_writereg(sc, reg, cfg);
return true;
}
@ -680,9 +684,9 @@ bool dbcool_pmf_resume(device_t dev PMF_FN_ARGS)
reg = DBCOOL_CONFIG2_REG;
bit = DBCOOL_CFG2_SHDN;
}
cfg = dbcool_readreg(sc, reg);
cfg = sc->sc_readreg(sc, reg);
cfg &= ~sc->sc_suspend;
dbcool_writereg(sc, reg, cfg);
sc->sc_writereg(sc, reg, cfg);
return true;
@ -733,7 +737,7 @@ dbcool_islocked(struct dbcool_softc *sc)
else
cfg_reg = DBCOOL_CONFIG1_REG;
if (dbcool_readreg(sc, cfg_reg) & DBCOOL_CFG1_LOCK)
if (sc->sc_readreg(sc, cfg_reg) & DBCOOL_CFG1_LOCK)
return 1;
else
return 0;
@ -749,31 +753,31 @@ dbcool_read_temp(struct dbcool_softc *sc, uint8_t reg, bool extres)
/*
* ADT7466 temps are in strange location
*/
ext = dbcool_readreg(sc, DBCOOL_ADT7466_CONFIG1);
val = dbcool_readreg(sc, reg);
ext = sc->sc_readreg(sc, DBCOOL_ADT7466_CONFIG1);
val = sc->sc_readreg(sc, reg);
if (extres)
ext = dbcool_readreg(sc, reg + 1);
ext = sc->sc_readreg(sc, reg + 1);
} else if (sc->sc_chip->flags & DBCFLAG_ADM1030) {
/*
* ADM1030 temps are in their own special place, too
*/
if (extres) {
ext = dbcool_readreg(sc, DBCOOL_ADM1030_TEMP_EXTRES);
ext = sc->sc_readreg(sc, DBCOOL_ADM1030_TEMP_EXTRES);
if (reg == DBCOOL_ADM1030_L_TEMP)
ext >>= 6;
else
ext >>= 1;
ext &= 0x03;
}
val = dbcool_readreg(sc, reg);
val = sc->sc_readreg(sc, reg);
} else if (extres) {
ext = dbcool_readreg(sc, DBCOOL_EXTRES2_REG);
ext = sc->sc_readreg(sc, DBCOOL_EXTRES2_REG);
/* Read all msb regs to unlatch them */
t1 = dbcool_readreg(sc, DBCOOL_12VIN);
t1 = dbcool_readreg(sc, DBCOOL_REMOTE1_TEMP);
t2 = dbcool_readreg(sc, DBCOOL_REMOTE2_TEMP);
t3 = dbcool_readreg(sc, DBCOOL_LOCAL_TEMP);
t1 = sc->sc_readreg(sc, DBCOOL_12VIN);
t1 = sc->sc_readreg(sc, DBCOOL_REMOTE1_TEMP);
t2 = sc->sc_readreg(sc, DBCOOL_REMOTE2_TEMP);
t3 = sc->sc_readreg(sc, DBCOOL_LOCAL_TEMP);
switch (reg) {
case DBCOOL_REMOTE1_TEMP:
val = t1;
@ -794,7 +798,7 @@ dbcool_read_temp(struct dbcool_softc *sc, uint8_t reg, bool extres)
ext &= 0x03;
}
else
val = dbcool_readreg(sc, reg);
val = sc->sc_readreg(sc, reg);
/* Check for invalid temp values */
if ((sc->sc_temp_offset == 0 && val == 0x80) ||
@ -822,11 +826,11 @@ dbcool_read_rpm(struct dbcool_softc *sc, uint8_t reg)
int rpm;
uint8_t rpm_lo, rpm_hi;
rpm_lo = dbcool_readreg(sc, reg);
rpm_lo = sc->sc_readreg(sc, reg);
if (sc->sc_chip->flags & DBCFLAG_ADM1030)
rpm_hi = (rpm_lo == 0xff)?0xff:0x0;
else
rpm_hi = dbcool_readreg(sc, reg + 1);
rpm_hi = sc->sc_readreg(sc, reg + 1);
rpm = (rpm_hi << 8) | rpm_lo;
if (rpm == 0xffff)
@ -840,12 +844,12 @@ static int
dbcool_supply_voltage(struct dbcool_softc *sc)
{
if (sc->sc_chip->flags & DBCFLAG_MULTI_VCC) {
if (dbcool_readreg(sc, DBCOOL_CONFIG1_REG) & DBCOOL_CFG1_Vcc)
if (sc->sc_readreg(sc, DBCOOL_CONFIG1_REG) & DBCOOL_CFG1_Vcc)
return 5002500;
else
return 3300000;
} else if (sc->sc_chip->flags & DBCFLAG_ADT7466) {
if (dbcool_readreg(sc, DBCOOL_ADT7466_CONFIG1) &
if (sc->sc_readreg(sc, DBCOOL_ADT7466_CONFIG1) &
DBCOOL_ADT7466_CFG1_Vcc)
return 5000000;
else
@ -870,7 +874,7 @@ dbcool_read_volt(struct dbcool_softc *sc, uint8_t reg, int nom_idx, bool extres)
/* ADT7466 voltages are in strange locations with only 8-bits */
if (sc->sc_chip->flags & DBCFLAG_ADT7466)
val = dbcool_readreg(sc, reg);
val = sc->sc_readreg(sc, reg);
else
/*
* It's a "normal" dbCool chip - check for regs that
@ -878,15 +882,15 @@ dbcool_read_volt(struct dbcool_softc *sc, uint8_t reg, int nom_idx, bool extres)
* read all the MSB registers to unlatch them.
*/
if (!extres)
val = dbcool_readreg(sc, reg);
val = sc->sc_readreg(sc, reg);
else if (reg == DBCOOL_12VIN) {
ext = dbcool_readreg(sc, DBCOOL_EXTRES2_REG) && 0x03;
val = dbcool_readreg(sc, reg);
ext = sc->sc_readreg(sc, DBCOOL_EXTRES2_REG) && 0x03;
val = sc->sc_readreg(sc, reg);
(void)dbcool_read_temp(sc, DBCOOL_LOCAL_TEMP, true);
} else if (reg == DBCOOL_VTT || reg == DBCOOL_IMON) {
ext = dbcool_readreg(sc, DBCOOL_EXTRES_VTT_IMON);
v1 = dbcool_readreg(sc, DBCOOL_IMON);
v2 = dbcool_readreg(sc, DBCOOL_VTT);
ext = sc->sc_readreg(sc, DBCOOL_EXTRES_VTT_IMON);
v1 = sc->sc_readreg(sc, DBCOOL_IMON);
v2 = sc->sc_readreg(sc, DBCOOL_VTT);
if (reg == DBCOOL_IMON) {
val = v1;
ext >>= 6;
@ -895,11 +899,11 @@ dbcool_read_volt(struct dbcool_softc *sc, uint8_t reg, int nom_idx, bool extres)
ext >>= 4;
ext &= 0x0f;
} else {
ext = dbcool_readreg(sc, DBCOOL_EXTRES1_REG);
v1 = dbcool_readreg(sc, DBCOOL_25VIN);
v2 = dbcool_readreg(sc, DBCOOL_VCCP);
v3 = dbcool_readreg(sc, DBCOOL_VCC);
v4 = dbcool_readreg(sc, DBCOOL_5VIN);
ext = sc->sc_readreg(sc, DBCOOL_EXTRES1_REG);
v1 = sc->sc_readreg(sc, DBCOOL_25VIN);
v2 = sc->sc_readreg(sc, DBCOOL_VCCP);
v3 = sc->sc_readreg(sc, DBCOOL_VCC);
v4 = sc->sc_readreg(sc, DBCOOL_5VIN);
switch (reg) {
case DBCOOL_25VIN:
@ -959,10 +963,10 @@ sysctl_dbcool_temp(SYSCTLFN_ARGS)
chipreg = node.sysctl_num & 0xff;
if (sc->sc_temp_offset) {
reg = dbcool_readreg(sc, chipreg);
reg = sc->sc_readreg(sc, chipreg);
reg -= sc->sc_temp_offset;
} else
reg = (int8_t)dbcool_readreg(sc, chipreg);
reg = (int8_t)sc->sc_readreg(sc, chipreg);
node.sysctl_data = &reg;
error = sysctl_lookup(SYSCTLFN_CALL(&node));
@ -977,7 +981,7 @@ sysctl_dbcool_temp(SYSCTLFN_ARGS)
newreg = *(int *)node.sysctl_data;
newreg += sc->sc_temp_offset;
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -993,7 +997,7 @@ sysctl_adm1030_temp(SYSCTLFN_ARGS)
sc = (struct dbcool_softc *)node.sysctl_data;
chipreg = node.sysctl_num & 0xff;
oldreg = (int8_t)dbcool_readreg(sc, chipreg);
oldreg = (int8_t)sc->sc_readreg(sc, chipreg);
reg = (oldreg >> 1) & ~0x03;
node.sysctl_data = &reg;
@ -1010,7 +1014,7 @@ sysctl_adm1030_temp(SYSCTLFN_ARGS)
newreg &= ~0x03;
newreg <<= 1;
newreg |= (oldreg & 0x07);
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -1026,7 +1030,7 @@ sysctl_adm1030_trange(SYSCTLFN_ARGS)
sc = (struct dbcool_softc *)node.sysctl_data;
chipreg = node.sysctl_num & 0xff;
oldreg = (int8_t)dbcool_readreg(sc, chipreg);
oldreg = (int8_t)sc->sc_readreg(sc, chipreg);
reg = oldreg & 0x07;
node.sysctl_data = &reg;
@ -1052,7 +1056,7 @@ sysctl_adm1030_trange(SYSCTLFN_ARGS)
return EINVAL;
newreg |= (oldreg & ~0x07);
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -1068,7 +1072,7 @@ sysctl_dbcool_duty(SYSCTLFN_ARGS)
sc = (struct dbcool_softc *)node.sysctl_data;
chipreg = node.sysctl_num & 0xff;
oldreg = dbcool_readreg(sc, chipreg);
oldreg = sc->sc_readreg(sc, chipreg);
reg = (uint32_t)oldreg;
if (sc->sc_chip->flags & DBCFLAG_ADM1030)
reg = ((reg & 0x0f) * 100) / 15;
@ -1089,7 +1093,7 @@ sysctl_dbcool_duty(SYSCTLFN_ARGS)
newreg |= oldreg & 0xf0;
} else
newreg = *(uint8_t *)(node.sysctl_data) * 255 / 100;
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -1105,10 +1109,10 @@ sysctl_dbcool_behavior(SYSCTLFN_ARGS)
sc = (struct dbcool_softc *)node.sysctl_data;
chipreg = node.sysctl_num & 0xff;
oldreg = dbcool_readreg(sc, chipreg);
oldreg = sc->sc_readreg(sc, chipreg);
if (sc->sc_chip->flags & DBCFLAG_ADM1030) {
if ((dbcool_readreg(sc, DBCOOL_ADM1030_CFG2) & 1) == 0)
if ((sc->sc_readreg(sc, DBCOOL_ADM1030_CFG2) & 1) == 0)
reg = 4;
else if ((oldreg & 0x80) == 0)
reg = 7;
@ -1141,9 +1145,9 @@ sysctl_dbcool_behavior(SYSCTLFN_ARGS)
* nor do we support Manual-RPM-feedback.
*/
if (newreg == 4) {
oldreg = dbcool_readreg(sc, DBCOOL_ADM1030_CFG2);
oldreg = sc->sc_readreg(sc, DBCOOL_ADM1030_CFG2);
oldreg &= ~0x01;
dbcool_writereg(sc, DBCOOL_ADM1030_CFG2, oldreg);
sc->sc_writereg(sc, DBCOOL_ADM1030_CFG2, oldreg);
} else {
if (newreg == 0)
newreg = 4;
@ -1155,13 +1159,13 @@ sysctl_dbcool_behavior(SYSCTLFN_ARGS)
return EINVAL;
newreg <<= 5;
newreg |= (oldreg & 0x1f);
dbcool_writereg(sc, chipreg, newreg);
oldreg = dbcool_readreg(sc, DBCOOL_ADM1030_CFG2) | 1;
dbcool_writereg(sc, DBCOOL_ADM1030_CFG2, oldreg);
sc->sc_writereg(sc, chipreg, newreg);
oldreg = sc->sc_readreg(sc, DBCOOL_ADM1030_CFG2) | 1;
sc->sc_writereg(sc, DBCOOL_ADM1030_CFG2, oldreg);
}
} else {
newreg = (dbcool_readreg(sc, chipreg) & 0x1f) | (i << 5);
dbcool_writereg(sc, chipreg, newreg);
newreg = (sc->sc_readreg(sc, chipreg) & 0x1f) | (i << 5);
sc->sc_writereg(sc, chipreg, newreg);
}
return 0;
}
@ -1179,7 +1183,7 @@ sysctl_dbcool_slope(SYSCTLFN_ARGS)
sc = (struct dbcool_softc *)node.sysctl_data;
chipreg = node.sysctl_num & 0xff;
reg = (dbcool_readreg(sc, chipreg) >> 4) & 0x0f;
reg = (sc->sc_readreg(sc, chipreg) >> 4) & 0x0f;
node.sysctl_data = &reg;
error = sysctl_lookup(SYSCTLFN_CALL(&node));
@ -1190,9 +1194,9 @@ sysctl_dbcool_slope(SYSCTLFN_ARGS)
if (*(int *)node.sysctl_data < 0 || *(int *)node.sysctl_data > 0x0f)
return EINVAL;
newreg = (dbcool_readreg(sc, chipreg) & 0x0f) |
newreg = (sc->sc_readreg(sc, chipreg) & 0x0f) |
(*(int *)node.sysctl_data << 4);
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -1221,7 +1225,7 @@ sysctl_dbcool_volt_limit(SYSCTLFN_ARGS)
/*
* Use int64_t for calculation to avoid overflow
*/
val = dbcool_readreg(sc, chipreg);
val = sc->sc_readreg(sc, chipreg);
val *= nom;
val /= 0xc0; /* values are scaled so 0xc0 == nominal voltage */
reg = val;
@ -1244,7 +1248,7 @@ sysctl_dbcool_volt_limit(SYSCTLFN_ARGS)
return EINVAL;
newreg = newval;
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -1262,10 +1266,10 @@ sysctl_dbcool_temp_limit(SYSCTLFN_ARGS)
/* If using offset mode, adjust, else treat as signed */
if (sc->sc_temp_offset) {
reg = dbcool_readreg(sc, chipreg);
reg = sc->sc_readreg(sc, chipreg);
reg -= sc->sc_temp_offset;
} else
reg = (int8_t)dbcool_readreg(sc, chipreg);
reg = (int8_t)sc->sc_readreg(sc, chipreg);
node.sysctl_data = &reg;
error = sysctl_lookup(SYSCTLFN_CALL(&node));
@ -1278,7 +1282,7 @@ sysctl_dbcool_temp_limit(SYSCTLFN_ARGS)
if (newtemp < 0 || newtemp > 0xff)
return EINVAL;
dbcool_writereg(sc, chipreg, newtemp);
sc->sc_writereg(sc, chipreg, newtemp);
return 0;
}
@ -1325,9 +1329,9 @@ sysctl_dbcool_fan_limit(SYSCTLFN_ARGS)
/* Update the on-chip registers with new value */
newreg = newrpm & 0xff;
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
newreg = (newrpm >> 8) & 0xff;
dbcool_writereg(sc, chipreg + 1, newreg);
sc->sc_writereg(sc, chipreg + 1, newreg);
return 0;
}
@ -1344,7 +1348,7 @@ sysctl_dbcool_vid(SYSCTLFN_ARGS)
chipreg = node.sysctl_num;
/* retrieve 5- or 6-bit value */
newreg = dbcool_readreg(sc, chipreg);
newreg = sc->sc_readreg(sc, chipreg);
if ((sc->sc_chip->flags & DBCFLAG_HAS_VID_SEL) &&
(reg & 0x80))
reg = newreg & 0x3f;
@ -1374,7 +1378,7 @@ sysctl_dbcool_thyst(SYSCTLFN_ARGS)
chipreg = node.sysctl_num & 0x7f;
/* retrieve 4-bit value */
newreg = dbcool_readreg(sc, chipreg);
newreg = sc->sc_readreg(sc, chipreg);
if ((node.sysctl_num & 0x80) == 0)
reg = newreg >> 4;
else
@ -1400,7 +1404,7 @@ sysctl_dbcool_thyst(SYSCTLFN_ARGS)
newreg &= 0xf0;
newreg |= newhyst;
}
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
@ -1450,7 +1454,7 @@ sysctl_dbcool_reg_access(SYSCTLFN_ARGS)
sc = (struct dbcool_softc *)node.sysctl_data;
chipreg = sc->sc_user_reg;
reg = dbcool_readreg(sc, chipreg);
reg = sc->sc_readreg(sc, chipreg);
node.sysctl_data = &reg;
error = sysctl_lookup(SYSCTLFN_CALL(&node));
@ -1458,7 +1462,7 @@ sysctl_dbcool_reg_access(SYSCTLFN_ARGS)
return error;
newreg = *(int *)node.sysctl_data;
dbcool_writereg(sc, chipreg, newreg);
sc->sc_writereg(sc, chipreg, newreg);
return 0;
}
#endif /* DBCOOL_DEBUG */
@ -1484,12 +1488,12 @@ dbcool_setup(device_t self)
* to 1 for compatability with other chips that report 2s complement.
*/
if (sc->sc_chip->flags & DBCFLAG_ADT7466) {
if (dbcool_readreg(sc, DBCOOL_ADT7466_CONFIG1) & 0x80)
if (sc->sc_readreg(sc, DBCOOL_ADT7466_CONFIG1) & 0x80)
sc->sc_temp_offset = 64;
else
sc->sc_temp_offset = 0;
} else if (sc->sc_chip->flags & DBCFLAG_TEMPOFFSET) {
if (dbcool_readreg(sc, DBCOOL_CONFIG5_REG) &
if (sc->sc_readreg(sc, DBCOOL_CONFIG5_REG) &
DBCOOL_CFG5_TWOSCOMP)
sc->sc_temp_offset = 0;
else
@ -1558,10 +1562,10 @@ dbcool_setup(device_t self)
cfg_reg = DBCOOL_ADT7466_CONFIG1;
else
cfg_reg = DBCOOL_CONFIG1_REG;
cfg_val = dbcool_readreg(sc, DBCOOL_CONFIG1_REG);
cfg_val = sc->sc_readreg(sc, DBCOOL_CONFIG1_REG);
if ((cfg_val & DBCOOL_CFG1_START) == 0) {
cfg_val |= DBCOOL_CFG1_START;
dbcool_writereg(sc, cfg_reg, cfg_val);
sc->sc_writereg(sc, cfg_reg, cfg_val);
}
if (dbcool_islocked(sc))
aprint_normal_dev(self, "configuration locked\n");
@ -1844,9 +1848,9 @@ dbcool_chip_ident(struct dbcool_softc *sc)
uint8_t c_id, d_id, r_id;
int i;
c_id = dbcool_readreg(sc, DBCOOL_COMPANYID_REG);
d_id = dbcool_readreg(sc, DBCOOL_DEVICEID_REG);
r_id = dbcool_readreg(sc, DBCOOL_REVISION_REG);
c_id = sc->sc_readreg(sc, DBCOOL_COMPANYID_REG);
d_id = sc->sc_readreg(sc, DBCOOL_DEVICEID_REG);
r_id = sc->sc_readreg(sc, DBCOOL_REVISION_REG);
for (i = 0; chip_table[i].company != 0; i++)
if ((c_id == chip_table[i].company) &&

View File

@ -1,4 +1,4 @@
/* $NetBSD: dbcool_var.h,v 1.3 2008/10/09 10:25:47 pgoyette Exp $ */
/* $NetBSD: dbcool_var.h,v 1.4 2008/10/12 12:49:04 pgoyette Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: dbcool_var.h,v 1.3 2008/10/09 10:25:47 pgoyette Exp $");
__KERNEL_RCSID(0, "$NetBSD: dbcool_var.h,v 1.4 2008/10/12 12:49:04 pgoyette Exp $");
#include <dev/i2c/i2cvar.h>
@ -118,6 +118,8 @@ struct dbcool_softc {
int sc_temp_offset;
int64_t sc_supply_voltage;
bool sc_suspend;
void (*sc_writereg)(struct dbcool_softc *, uint8_t, uint8_t);
uint8_t (*sc_readreg)(struct dbcool_softc *, uint8_t);
#ifdef DBCOOL_DEBUG
uint8_t sc_user_reg;
#endif