Module Name: src Committed By: msaitoh Date: Tue Jul 11 10:10:51 UTC 2017
Modified Files: src/sys/dev/ic: nslm7x.c nslm7xvar.h src/sys/dev/isa: wbsio.c wbsioreg.h Log Message: lm(4): Add suport for NCT5174D, NCT6775F, NCT6779D and NCT679[1235]D. wbsio(4): Add support for NCT6795D. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/sys/dev/ic/nslm7x.c cvs rdiff -u -r1.29 -r1.30 src/sys/dev/ic/nslm7xvar.h cvs rdiff -u -r1.11 -r1.12 src/sys/dev/isa/wbsio.c cvs rdiff -u -r1.1 -r1.2 src/sys/dev/isa/wbsioreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/nslm7x.c diff -u src/sys/dev/ic/nslm7x.c:1.64 src/sys/dev/ic/nslm7x.c:1.65 --- src/sys/dev/ic/nslm7x.c:1.64 Wed Jun 1 08:06:38 2016 +++ src/sys/dev/ic/nslm7x.c Tue Jul 11 10:10:51 2017 @@ -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 #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_so 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_sof } } +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) { Index: src/sys/dev/ic/nslm7xvar.h diff -u src/sys/dev/ic/nslm7xvar.h:1.29 src/sys/dev/ic/nslm7xvar.h:1.30 --- src/sys/dev/ic/nslm7xvar.h:1.29 Wed Jun 1 02:37:47 2016 +++ src/sys/dev/ic/nslm7xvar.h Tue Jul 11 10:10:51 2017 @@ -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; Index: src/sys/dev/isa/wbsio.c diff -u src/sys/dev/isa/wbsio.c:1.11 src/sys/dev/isa/wbsio.c:1.12 --- src/sys/dev/isa/wbsio.c:1.11 Fri Jul 7 08:42:15 2017 +++ src/sys/dev/isa/wbsio.c Tue Jul 11 10:10:51 2017 @@ -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 <kette...@openbsd.org> @@ -126,11 +126,11 @@ wbsio_probe(device_t parent, cfdata_t ma 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 s 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 */ Index: src/sys/dev/isa/wbsioreg.h diff -u src/sys/dev/isa/wbsioreg.h:1.1 src/sys/dev/isa/wbsioreg.h:1.2 --- src/sys/dev/isa/wbsioreg.h:1.1 Fri Jul 7 08:42:15 2017 +++ src/sys/dev/isa/wbsioreg.h Tue Jul 11 10:10:51 2017 @@ -1,4 +1,3 @@ -/* $Id */ /* $OpenBSD: wbsioreg.h,v 1.4 2015/01/02 23:02:54 chris Exp $ */ /* * Copyright (c) 2008 Mark Kettenis <kette...@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