diff options
| author | msaitoh <msaitoh@NetBSD.org> | 2017-07-11 10:10:51 +0000 |
|---|---|---|
| committer | msaitoh <msaitoh@NetBSD.org> | 2017-07-11 10:10:51 +0000 |
| commit | 4a6ec8da65c00a400e6456b0e8f37b80b22bf710 (patch) | |
| tree | 95468e5772031851a7b455598a5c60a0683e10d1 | |
| parent | 2b15f85ef632c56df7f20a13126b07848d2758b5 (diff) | |
lm(4): Add suport for NCT5174D, NCT6775F, NCT6779D and NCT679[1235]D.
wbsio(4): Add support for NCT6795D.
| -rw-r--r-- | sys/dev/ic/nslm7x.c | 280 | ||||
| -rw-r--r-- | sys/dev/ic/nslm7xvar.h | 7 | ||||
| -rw-r--r-- | sys/dev/isa/wbsio.c | 34 | ||||
| -rw-r--r-- | sys/dev/isa/wbsioreg.h | 14 |
4 files changed, 302 insertions, 33 deletions
diff --git a/sys/dev/ic/nslm7x.c b/sys/dev/ic/nslm7x.c index 920f79e4473..b5cdb0e0a93 100644 --- a/sys/dev/ic/nslm7x.c +++ b/sys/dev/ic/nslm7x.c @@ -1,4 +1,4 @@ -/* $NetBSD: nslm7x.c,v 1.64 2016/06/01 08:06:38 pgoyette Exp $ */ +/* $NetBSD: nslm7x.c,v 1.65 2017/07/11 10:10:51 msaitoh Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.64 2016/06/01 08:06:38 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.65 2017/07/11 10:10:51 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -45,6 +45,7 @@ __KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.64 2016/06/01 08:06:38 pgoyette Exp $") #include <dev/isa/isareg.h> #include <dev/isa/isavar.h> +#include <dev/isa/wbsioreg.h> #include <dev/sysmon/sysmonvar.h> @@ -93,6 +94,8 @@ static void wb_refresh_temp(struct lm_softc *, int); static void wb_refresh_fanrpm(struct lm_softc *, int); static void wb_w83792d_refresh_fanrpm(struct lm_softc *, int); static void wb_nct6776f_refresh_fanrpm(struct lm_softc *, int); +static const char * wm_nct67xx_id2str(uint8_t); + static void as_refresh_temp(struct lm_softc *, int); struct lm_chip { @@ -105,6 +108,20 @@ static struct lm_chip lm_chips[] = { { def_match } /* Must be last */ }; +static struct { + uint8_t id; + const char *str; +} nct_chips[] = { + {WBSIO_ID_NCT6775F, "NCT6775F"}, + {WBSIO_ID_NCT6776F, "NCT6776F"}, + {WBSIO_ID_NCT5104D, "NCT5104D or 610[246]D"}, + {WBSIO_ID_NCT6779D, "NCT6779D"}, + {WBSIO_ID_NCT6791D, "NCT6791D"}, + {WBSIO_ID_NCT6792D, "NCT6792D"}, + {WBSIO_ID_NCT6793D, "NCT6793D"}, + {WBSIO_ID_NCT6795D, "NCT6795D"}, +}; + /* LM78/78J/79/81 */ static struct lm_sensor lm78_sensors[] = { /* Voltage */ @@ -1619,7 +1636,7 @@ static struct lm_sensor as99127f_sensors[] = { { .desc = NULL } }; -/* NCT6776F */ +/* NCT6776F */ static struct lm_sensor nct6776f_sensors[] = { /* Voltage */ { @@ -1767,6 +1784,225 @@ static struct lm_sensor nct6776f_sensors[] = { { .desc = NULL } }; +/* NCT6779D */ +static struct lm_sensor nct6779d_sensors[] = { + /* Voltage */ + { + .desc = "VCore", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x80, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE / 2 + }, + { + .desc = "VIN1", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x81, + .refresh = lm_refresh_volt, + .rfact = RFACT(56, 10) / 2 + }, + { + .desc = "AVCC", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x82, + .refresh = lm_refresh_volt, + .rfact = RFACT(34, 34) / 2 + }, + { + .desc = "+3.3V", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x83, + .refresh = lm_refresh_volt, + .rfact = RFACT(34, 34) / 2 + }, + { + .desc = "VIN0", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x84, + .refresh = lm_refresh_volt, + .rfact = RFACT(48600, 10000) + }, + { + .desc = "VIN8", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x85, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE / 2 + }, + { + .desc = "VIN4", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x86, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE + }, + { + .desc = "+3.3VSB", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x87, + .refresh = lm_refresh_volt, + .rfact = RFACT(34, 34) / 2 + }, + { + .desc = "VBAT", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x88, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE + }, + { + .desc = "VTT", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x89, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE + }, + { + .desc = "VIN5", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x8a, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE + }, + { + .desc = "VIN6", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x8b, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE + }, + { + .desc = "VIN2", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x8c, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE + }, + { + .desc = "VIN3", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x8d, + .refresh = lm_refresh_volt, + .rfact = RFACT(14414, 10000) + }, + { + .desc = "VIN7", + .type = ENVSYS_SVOLTS_DC, + .bank = 4, + .reg = 0x8e, + .refresh = lm_refresh_volt, + .rfact = RFACT_NONE / 2 + }, + + /* Temperature */ + { + .desc = "MB Temperature", + .type = ENVSYS_STEMP, + .bank = 4, + .reg = 0x90, + .refresh = lm_refresh_temp, + .rfact = 0 + }, + { + .desc = "CPU Temperature", + .type = ENVSYS_STEMP, + .bank = 4, + .reg = 0x91, + .refresh = wb_refresh_temp, + .rfact = 0 + }, + { + .desc = "Aux Temp0", + .type = ENVSYS_STEMP, + .bank = 4, + .reg = 0x92, + .refresh = wb_refresh_temp, + .rfact = 0 + }, + { + .desc = "Aux Temp1", + .type = ENVSYS_STEMP, + .bank = 4, + .reg = 0x93, + .refresh = wb_refresh_temp, + .rfact = 0 + }, + { + .desc = "Aux Temp2", + .type = ENVSYS_STEMP, + .bank = 4, + .reg = 0x94, + .refresh = wb_refresh_temp, + .rfact = 0 + }, + { + .desc = "Aux Temp3", + .type = ENVSYS_STEMP, + .bank = 4, + .reg = 0x95, + .refresh = wb_refresh_temp, + .rfact = 0 + }, + + /* Fans */ + { + .desc = "System Fan", + .type = ENVSYS_SFANRPM, + .bank = 4, + .reg = 0xb0, + .refresh = wb_nct6776f_refresh_fanrpm, + .rfact = 0 + }, + { + .desc = "CPU Fan", + .type = ENVSYS_SFANRPM, + .bank = 4, + .reg = 0xb2, + .refresh = wb_nct6776f_refresh_fanrpm, + .rfact = 0 + }, + { + .desc = "Aux Fan0", + .type = ENVSYS_SFANRPM, + .bank = 4, + .reg = 0xb4, + .refresh = wb_nct6776f_refresh_fanrpm, + .rfact = 0 + }, + { + .desc = "Aux Fan1", + .type = ENVSYS_SFANRPM, + .bank = 4, + .reg = 0xb6, + .refresh = wb_nct6776f_refresh_fanrpm, + .rfact = 0 + }, + { + .desc = "Aux Fan2", + .type = ENVSYS_SFANRPM, + .bank = 4, + .reg = 0xb8, + .refresh = wb_nct6776f_refresh_fanrpm, + .rfact = 0 + }, + + { .desc = NULL } +}; + static void lm_generic_banksel(struct lm_softc *lmsc, int bank) { @@ -2015,13 +2251,31 @@ wb_match(struct lm_softc *sc) wb_temp_diode_type(sc, cf_flags); break; case WB_CHIPID_W83627DHG: - if (sc->sioid == WBSIO_ID_NCT6776F) { + model = wm_nct67xx_id2str(sc->sioid); + if (model != NULL) { vendor = "Nuvoton"; - model = "NCT6776F"; - lm_setup_sensors(sc, nct6776f_sensors); + switch (sc->sioid) { + case WBSIO_ID_NCT6775F: + case WBSIO_ID_NCT6776F: + case WBSIO_ID_NCT5104D: + lm_setup_sensors(sc, nct6776f_sensors); + break; + case WBSIO_ID_NCT6779D: + case WBSIO_ID_NCT6791D: + case WBSIO_ID_NCT6792D: + case WBSIO_ID_NCT6793D: + case WBSIO_ID_NCT6795D: + lm_setup_sensors(sc, nct6779d_sensors); + break; + default: + panic("%s: unknown id (%02x)", __func__, + sc->sioid); + break; + } } else { model = "W83627DHG"; lm_setup_sensors(sc, w83627dhg_sensors); + break; } wb_temp_diode_type(sc, cf_flags); break; @@ -2364,6 +2618,20 @@ wb_nct6776f_refresh_fanrpm(struct lm_softc *sc, int n) } } +static const char * +wm_nct67xx_id2str(uint8_t id) +{ + int i; + + for (i = 0; i < __arraycount(nct_chips); i++) { + if (nct_chips[i].id == id) + return nct_chips[i].str; + } + + /* Not Found */ + return NULL; +} + static void wb_w83792d_refresh_fanrpm(struct lm_softc *sc, int n) { diff --git a/sys/dev/ic/nslm7xvar.h b/sys/dev/ic/nslm7xvar.h index 5087426f1c0..759c80a3aef 100644 --- a/sys/dev/ic/nslm7xvar.h +++ b/sys/dev/ic/nslm7xvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: nslm7xvar.h,v 1.29 2016/06/01 02:37:47 pgoyette Exp $ */ +/* $NetBSD: nslm7xvar.h,v 1.30 2017/07/11 10:10:51 msaitoh Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -144,9 +144,6 @@ #define WB_CHIPID_W83627EHF 0xa1 #define WB_CHIPID_W83627DHG 0xc1 -/* wbsio Device IDs */ -#define WBSIO_ID_NCT6776F 0xc3 - /* Config bits */ #define WB_CONFIG_VMR9 0x01 @@ -154,7 +151,7 @@ #define WB_VREF 3600 #define WB_W83627EHF_VREF 2048 -#define WB_MAX_SENSORS 19 +#define WB_MAX_SENSORS 36 struct lm_softc { device_t sc_dev; diff --git a/sys/dev/isa/wbsio.c b/sys/dev/isa/wbsio.c index e7e3d14aa8c..df00548c2c5 100644 --- a/sys/dev/isa/wbsio.c +++ b/sys/dev/isa/wbsio.c @@ -1,4 +1,4 @@ -/* $NetBSD: wbsio.c,v 1.11 2017/07/07 08:42:15 msaitoh Exp $ */ +/* $NetBSD: wbsio.c,v 1.12 2017/07/11 10:10:51 msaitoh Exp $ */ /* $OpenBSD: wbsio.c,v 1.10 2015/03/14 03:38:47 jsg Exp $ */ /* * Copyright (c) 2008 Mark Kettenis <kettenis@openbsd.org> @@ -126,11 +126,11 @@ wbsio_probe(device_t parent, cfdata_t match, void *aux) case WBSIO_ID_W83697HF: case WBSIO_ID_W83697UG: case WBSIO_ID_NCT5104D: - case WBSIO_ID_NCT6775: + case WBSIO_ID_NCT6775F: case WBSIO_ID_NCT6776F: - case WBSIO_ID_NCT6779: - case WBSIO_ID_NCT6791: - case WBSIO_ID_NCT6792: + case WBSIO_ID_NCT6779D: + case WBSIO_ID_NCT6791D: + case WBSIO_ID_NCT6792D: ia->ia_nio = 1; ia->ia_io[0].ir_size = WBSIO_IOSIZE; ia->ia_niomem = 0; @@ -212,29 +212,33 @@ wbsio_attach(device_t parent, device_t self, void *aux) vendor = "Nuvoton"; printf("NCT5104D"); break; - case WBSIO_ID_NCT6775: + case WBSIO_ID_NCT6775F: vendor = "Nuvoton"; - desc = "NCT6775"; + desc = "NCT6775F"; break; case WBSIO_ID_NCT6776F: vendor = "Nuvoton"; desc = "NCT6776F"; break; - case WBSIO_ID_NCT6779: + case WBSIO_ID_NCT6779D: vendor = "Nuvoton"; - desc = "NCT6779"; + desc = "NCT6779D"; break; - case WBSIO_ID_NCT6791: + case WBSIO_ID_NCT6791D: vendor = "Nuvoton"; - desc = "NCT6791"; + desc = "NCT6791D"; break; - case WBSIO_ID_NCT6792: + case WBSIO_ID_NCT6792D: vendor = "Nuvoton"; - desc = "NCT6792"; + desc = "NCT6792D"; break; - case WBSIO_ID_NCT6793: + case WBSIO_ID_NCT6793D: vendor = "Nuvoton"; - desc = "NCT6793"; + desc = "NCT6793D"; + break; + case WBSIO_ID_NCT6795D: + vendor = "Nuvoton"; + desc = "NCT6795D"; break; } /* Read device revision */ diff --git a/sys/dev/isa/wbsioreg.h b/sys/dev/isa/wbsioreg.h index fab8bd5c5a4..69798346161 100644 --- a/sys/dev/isa/wbsioreg.h +++ b/sys/dev/isa/wbsioreg.h @@ -1,4 +1,3 @@ -/* $Id */ /* $OpenBSD: wbsioreg.h,v 1.4 2015/01/02 23:02:54 chris Exp $ */ /* * Copyright (c) 2008 Mark Kettenis <kettenis@openbsd.org> @@ -47,13 +46,14 @@ #define WBSIO_ID_W83667HG 0xa5 #define WBSIO_ID_W83627DHGP 0xb0 #define WBSIO_ID_W83667HGB 0xb3 -#define WBSIO_ID_NCT6775 0xb4 +#define WBSIO_ID_NCT6775F 0xb4 #define WBSIO_ID_NCT6776F 0xc3 -#define WBSIO_ID_NCT5104D 0xc4 /* XXX 6102 or 6106? */ -#define WBSIO_ID_NCT6779 0xc5 -#define WBSIO_ID_NCT6791 0xc8 -#define WBSIO_ID_NCT6792 0xc9 -#define WBSIO_ID_NCT6793 0xd1 +#define WBSIO_ID_NCT5104D 0xc4 /* 610[246]D */ +#define WBSIO_ID_NCT6779D 0xc5 +#define WBSIO_ID_NCT6791D 0xc8 +#define WBSIO_ID_NCT6792D 0xc9 +#define WBSIO_ID_NCT6793D 0xd1 +#define WBSIO_ID_NCT6795D 0xd3 /* Logical Device Number (LDN) Assignments */ #define WBSIO_LDN_HM 0x0b |
