add some more ADM1031 support:

- additional temperature and fan speed sensors work now
- limits on should work on all temperature sensors
Controlling fan behaviour doesn't work yet, the ADM1031 uses the same
register for both fans which doesn't quite fit with the way the dbcool
driver works.
This commit is contained in:
macallan 2010-04-01 04:29:35 +00:00
parent 624dd7e525
commit a6ad2de3be
2 changed files with 76 additions and 6 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: dbcool.c,v 1.21 2010/03/31 18:07:13 macallan Exp $ */
/* $NetBSD: dbcool.c,v 1.22 2010/04/01 04:29:35 macallan Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.21 2010/03/31 18:07:13 macallan Exp $");
__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.22 2010/04/01 04:29:35 macallan Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -529,7 +529,7 @@ struct dbcool_sensor ADM1030_sensor_table[] = {
{ DBC_CTL, { DBCOOL_ADM1030_R_TMIN,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 1, 8, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_L_TTHRESH,
{ DBC_CTL, { DBCOOL_ADM1030_R_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 1, 9, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_R_TTHRESH,
@ -545,6 +545,61 @@ struct dbcool_power_control ADM1030_power_table[] = {
{ { 0, 0, 0, 0 }, NULL }
};
struct dbcool_sensor ADM1031_sensor_table[] = {
{ DBC_TEMP, { DBCOOL_ADM1030_L_TEMP,
DBCOOL_ADM1030_L_HI_LIM,
DBCOOL_ADM1030_L_LO_LIM }, 0, 0, 0 },
{ DBC_TEMP, { DBCOOL_ADM1030_R_TEMP,
DBCOOL_ADM1030_R_HI_LIM,
DBCOOL_ADM1030_R_LO_LIM }, 1, 0, 0 },
{ DBC_TEMP, { DBCOOL_ADM1031_R2_TEMP,
DBCOOL_ADM1031_R2_HI_LIM,
DBCOOL_ADM1031_R2_LO_LIM }, 2, 0, 0 },
{ DBC_FAN, { DBCOOL_ADM1030_FAN_TACH,
DBCOOL_NO_REG,
DBCOOL_ADM1030_FAN_LO_LIM }, 5, 0, 0 },
{ DBC_FAN, { DBCOOL_ADM1031_FAN2_TACH,
DBCOOL_NO_REG,
DBCOOL_ADM1031_FAN2_LO_LIM }, 6, 0, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_L_TMIN,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 0, 8, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_L_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 0, 9, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_L_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 0, 6, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_R_TMIN,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 1, 8, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_R_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 1, 9, 0 },
{ DBC_CTL, { DBCOOL_ADM1030_R_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 1, 6, 0 },
{ DBC_CTL, { DBCOOL_ADM1031_R2_TMIN,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 2, 8, 0 },
{ DBC_CTL, { DBCOOL_ADM1031_R2_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 2, 9, 0 },
{ DBC_CTL, { DBCOOL_ADM1031_R2_TTHRESH,
DBCOOL_NO_REG,
DBCOOL_NO_REG }, 2, 6, 0 },
{ DBC_EOF, {0, 0, 0 }, 0, 0, 0 }
};
struct dbcool_power_control ADM1031_power_table[] = {
{ { DBCOOL_ADM1030_CFG1, DBCOOL_NO_REG, DBCOOL_NO_REG,
DBCOOL_ADM1030_FAN_SPEED_CFG },
"fan_control_1" },
{ { DBCOOL_ADM1030_CFG1, DBCOOL_NO_REG, DBCOOL_NO_REG,
DBCOOL_ADM1030_FAN_SPEED_CFG },
"fan_control_2" },
{ { 0, 0, 0, 0 }, NULL }
};
struct chip_id chip_table[] = {
{ DBCOOL_COMPANYID, ADT7490_DEVICEID, ADT7490_REV_ID,
ADT7490_sensor_table, ADT7475_power_table,
@ -593,7 +648,7 @@ struct chip_id chip_table[] = {
DBCFLAG_ADM1030 | DBCFLAG_NO_READBYTE,
11250 * 60, "ADM1030" },
{ DBCOOL_COMPANYID, ADM1031_DEVICEID, 0xff,
ADM1030_sensor_table, ADM1030_power_table,
ADM1031_sensor_table, ADM1030_power_table,
DBCFLAG_ADM1030 | DBCFLAG_NO_READBYTE,
11250 * 60, "ADM1031" },
{ 0, 0, 0, NULL, NULL, 0, 0, NULL }
@ -794,6 +849,8 @@ dbcool_read_temp(struct dbcool_softc *sc, uint8_t reg, bool extres)
ext = sc->sc_dc.dc_readreg(&sc->sc_dc, DBCOOL_ADM1030_TEMP_EXTRES);
if (reg == DBCOOL_ADM1030_L_TEMP)
ext >>= 6;
else if (reg == DBCOOL_ADM1031_R2_TEMP)
ext >>= 4;
else
ext >>= 1;
ext &= 0x03;

View File

@ -1,4 +1,4 @@
/* $NetBSD: dbcool_reg.h,v 1.4 2010/03/31 18:07:13 macallan Exp $ */
/* $NetBSD: dbcool_reg.h,v 1.5 2010/04/01 04:29:35 macallan Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -37,7 +37,7 @@
#define DBCOOLREG_H
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: dbcool_reg.h,v 1.4 2010/03/31 18:07:13 macallan Exp $");
__KERNEL_RCSID(0, "$NetBSD: dbcool_reg.h,v 1.5 2010/04/01 04:29:35 macallan Exp $");
#define DBCOOL_ADDRMASK 0x7c
#define DBCOOL_ADDR 0x2c /* Some chips have multiple addrs */
@ -321,6 +321,10 @@ __KERNEL_RCSID(0, "$NetBSD: dbcool_reg.h,v 1.4 2010/03/31 18:07:13 macallan Exp
/*
* Even though it's not really a member of the dbCool family, we also
* support the ADM1030 chip. It has a different register set.
* the ADM1030 is in fact a cut down ADM1031 - the register set is identical
* except the registers used for the extra temperature and fan control sensors
* DBCOOL_ADM1030_* are present in both chips with identical functionality
* DBCOOL_ADM1031_* are ADM1031 only
*/
#define DBCOOL_ADM1030_CFG1 0x00
#define DBCOOL_ADM1030_CFG2 0x01
@ -329,22 +333,31 @@ __KERNEL_RCSID(0, "$NetBSD: dbcool_reg.h,v 1.4 2010/03/31 18:07:13 macallan Exp
#define DBCOOL_ADM1030_TEMP_EXTRES 0x06
#define DBCOOL_ADM1030_TEST_REG 0x07
#define DBCOOL_ADM1030_FAN_TACH 0x08
#define DBCOOL_ADM1031_FAN2_TACH 0x09
#define DBCOOL_ADM1030_L_TEMP 0x0A
#define DBCOOL_ADM1030_R_TEMP 0x0B
#define DBCOOL_ADM1031_R2_TEMP 0x0C
#define DBCOOL_ADM1030_L_OFFSET 0x0D
#define DBCOOL_ADM1030_R_OFFSET 0x0E
#define DBCOOL_ADM1031_R2_OFFSET 0x0F
#define DBCOOL_ADM1030_FAN_LO_LIM 0x10
#define DBCOOL_ADM1031_FAN2_LO_LIM 0x11
#define DBCOOL_ADM1030_L_HI_LIM 0x14
#define DBCOOL_ADM1030_L_LO_LIM 0x15
#define DBCOOL_ADM1030_L_TTHRESH 0x16
#define DBCOOL_ADM1030_R_HI_LIM 0x18
#define DBCOOL_ADM1030_R_LO_LIM 0x19
#define DBCOOL_ADM1030_R_TTHRESH 0x1A
#define DBCOOL_ADM1031_R2_HI_LIM 0x1C
#define DBCOOL_ADM1031_R2_LO_LIM 0x1D
#define DBCOOL_ADM1031_R2_TTHRESH 0x1E
#define DBCOOL_ADM1030_FAN_CHAR 0x20
#define DBCOOL_ADM1031_FAN2_CHAR 0x21
#define DBCOOL_ADM1030_FAN_SPEED_CFG 0x22
#define DBCOOL_ADM1030_FAN_FILTER 0x23
#define DBCOOL_ADM1030_L_TMIN 0x24
#define DBCOOL_ADM1030_R_TMIN 0x25
#define DBCOOL_ADM1031_R2_TMIN 0x26
#define DBCOOL_ADM1030_DEVICEID DBCOOL_DEVICEID_REG
#define DBCOOL_ADM1030_COMPANYID DBCOOL_COMPANYID_REG
#define DBCOOL_ADM1030_REVISION DBCOOL_REVISION_REG