Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev Add support for Nuvoton NCT6776F from OpenBSD



details:   https://anonhg.NetBSD.org/src/rev/50890feed3d9
branches:  trunk
changeset: 815707:50890feed3d9
user:      pgoyette <pgoyette%NetBSD.org@localhost>
date:      Wed Jun 01 02:37:47 2016 +0000

description:
Add support for Nuvoton NCT6776F from OpenBSD

>From PR kern/49747

diffstat:

 sys/dev/ic/nslm7x.c         |  182 ++++++++++++++++++++++++++++++++++++++++++-
 sys/dev/ic/nslm7xvar.h      |    6 +-
 sys/dev/isa/lm_isa_common.c |    6 +-
 sys/dev/isa/wbsio.c         |   24 ++++-
 4 files changed, 205 insertions(+), 13 deletions(-)

diffs (truncated from 383 to 300 lines):

diff -r 95a310b6174c -r 50890feed3d9 sys/dev/ic/nslm7x.c
--- a/sys/dev/ic/nslm7x.c       Wed Jun 01 02:15:26 2016 +0000
+++ b/sys/dev/ic/nslm7x.c       Wed Jun 01 02:37:47 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: nslm7x.c,v 1.62 2015/04/23 23:23:00 pgoyette Exp $ */
+/*     $NetBSD: nslm7x.c,v 1.63 2016/06/01 02:37:47 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.62 2015/04/23 23:23:00 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.63 2016/06/01 02:37:47 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1619,6 +1619,154 @@
        { .desc = NULL }
 };
 
+/*  NCT6776F */
+static struct lm_sensor nct6776f_sensors[] = {
+       /* Voltage */
+       {
+               .desc = "VCore",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x20,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT_NONE / 2
+       },
+       {
+               .desc = "+12V",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x21,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT(56, 10) / 2
+       },
+       {
+               .desc = "AVCC",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x22,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT(34, 34) / 2
+       },
+       {
+               .desc = "+3.3V",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x23,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT(34, 34) / 2
+       },
+       {
+               .desc = "-12V",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x24,
+               .refresh = wb_w83627ehf_refresh_nvolt,
+               .rfact = 0
+       },
+       {
+               .desc = "+5V",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x25,
+               .refresh = lm_refresh_volt,
+               .rfact = 16000
+       },
+       {
+               .desc = "VIN3",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 0,
+               .reg = 0x26,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT_NONE
+       },
+       {
+               .desc = "+3.3VSB",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 5,
+               .reg = 0x50,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT(34, 34) / 2
+       },
+       {
+               .desc = "VBAT",
+               .type = ENVSYS_SVOLTS_DC,
+               .bank = 5,
+               .reg = 0x51,
+               .refresh = lm_refresh_volt,
+               .rfact = RFACT(34, 34) / 2
+       },
+
+       /* Temperature */
+       {
+               .desc = "MB Temperature",
+               .type = ENVSYS_STEMP,
+               .bank = 0,
+               .reg = 0x27,
+               .refresh = lm_refresh_temp,
+               .rfact = 0
+       },
+       {
+               .desc = "CPU Temperature",
+               .type = ENVSYS_STEMP,
+               .bank = 1,
+               .reg = 0x50,
+               .refresh = wb_refresh_temp,
+               .rfact = 0
+       },
+       {
+               .desc = "Aux Temp",
+               .type = ENVSYS_STEMP,
+               .bank = 2,
+               .reg = 0x50,
+               .refresh = wb_refresh_temp,
+               .rfact = 0
+       },
+
+       /* Fans */
+       {
+               .desc = "System Fan",
+               .type = ENVSYS_SFANRPM,
+               .bank = 6,
+               .reg = 0x56,
+               .refresh = wb_nct6776f_refresh_fanrpm,
+               .rfact = 0
+       },
+       {
+               .desc = "CPU Fan",
+               .type = ENVSYS_SFANRPM,
+               .bank = 6,
+               .reg = 0x58,
+               .refresh = wb_nct6776f_refresh_fanrpm,
+               .rfact = 0
+       },
+       {
+               .desc = "Aux Fan0",
+               .type = ENVSYS_SFANRPM,
+               .bank = 6,
+               .reg = 0x5a,
+               .refresh = wb_nct6776f_refresh_fanrpm,
+               .rfact = 0
+       },
+       {
+               .desc = "Aux Fan1",
+               .type = ENVSYS_SFANRPM,
+               .bank = 6,
+               .reg = 0x5c,
+               .refresh = wb_nct6776f_refresh_fanrpm,
+               .rfact = 0
+       },
+
+       {
+               .desc = "Aux Fan2",
+               .type = ENVSYS_SFANRPM,
+               .bank = 6,
+               .reg = 0x5e,
+               .refresh = wb_nct6776f_refresh_fanrpm,
+               .rfact = 0
+       },
+
+       { .desc = NULL }
+};
+
 static void
 lm_generic_banksel(struct lm_softc *lmsc, int bank)
 {
@@ -1819,6 +1967,7 @@
 wb_match(struct lm_softc *sc)
 {
        const char *model = NULL;
+       const char *vendor = "Winbond";
        int banksel, vendid, cf_flags;
 
        aprint_naive("\n");
@@ -1866,8 +2015,14 @@
                wb_temp_diode_type(sc, cf_flags);
                break;
        case WB_CHIPID_W83627DHG:
-               model = "W83627DHG";
-               lm_setup_sensors(sc, w83627dhg_sensors);
+               if (sc->sioid == WBSIO_ID_NCT6776F) {
+                       vendor = "Nuvoton";
+                       model = "NCT6776F";
+                       lm_setup_sensors(sc, nct6776f_sensors);
+               } else {
+                       model = "W83627DHG";
+                       lm_setup_sensors(sc, w83627dhg_sensors);
+               }
                wb_temp_diode_type(sc, cf_flags);
                break;
        case WB_CHIPID_W83637HF:
@@ -1912,6 +2067,7 @@
                lm_setup_sensors(sc, w83792d_sensors);
                break;
        case WB_CHIPID_AS99127F:
+               vendor = "ASUS";
                if (vendid == WB_VENDID_ASUS) {
                        model = "AS99127F";
                        lm_setup_sensors(sc, w83781d_sensors);
@@ -1929,7 +2085,7 @@
                return 1;
        }
 
-       aprint_normal_dev(sc->sc_dev, "Winbond %s Hardware monitor\n", model);
+       aprint_normal_dev(sc->sc_dev, "%s %s Hardware monitor\n", vendor, model);
 
        sc->refresh_sensor_data = wb_refresh_sensor_data;
        return 1;
@@ -2193,6 +2349,22 @@
 }
 
 static void
+wb_nct6776f_refresh_fanrpm(struct lm_softc *sc, int n)
+{
+       int datah, datal;
+
+       datah = (*sc->lm_readreg)(sc, sc->lm_sensors[n].reg);
+       datal = (*sc->lm_readreg)(sc, sc->lm_sensors[n].reg + 1);
+
+       if ((datah == 0xff) || (datah == 0)) {
+               sc->sensors[n].state = ENVSYS_SINVALID;
+       } else {
+               sc->sensors[n].state = ENVSYS_SVALID;
+               sc->sensors[n].value_cur = (datah << 8) | datal;
+       }
+}
+
+static void
 wb_w83792d_refresh_fanrpm(struct lm_softc *sc, int n)
 {
        int reg, shift, data, divisor = 1;
diff -r 95a310b6174c -r 50890feed3d9 sys/dev/ic/nslm7xvar.h
--- a/sys/dev/ic/nslm7xvar.h    Wed Jun 01 02:15:26 2016 +0000
+++ b/sys/dev/ic/nslm7xvar.h    Wed Jun 01 02:37:47 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: nslm7xvar.h,v 1.28 2012/01/17 16:14:47 jakllsch Exp $ */
+/*     $NetBSD: nslm7xvar.h,v 1.29 2016/06/01 02:37:47 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -144,6 +144,9 @@
 #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
 
@@ -170,6 +173,7 @@
        struct lm_sensor *lm_sensors;
        uint8_t chipid;
        uint8_t vrm9;
+       uint8_t sioid;
 };
 
 struct lm_sensor {
diff -r 95a310b6174c -r 50890feed3d9 sys/dev/isa/lm_isa_common.c
--- a/sys/dev/isa/lm_isa_common.c       Wed Jun 01 02:15:26 2016 +0000
+++ b/sys/dev/isa/lm_isa_common.c       Wed Jun 01 02:37:47 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lm_isa_common.c,v 1.3 2012/01/18 00:11:43 jakllsch Exp $ */
+/*     $NetBSD: lm_isa_common.c,v 1.4 2016/06/01 02:37:47 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lm_isa_common.c,v 1.3 2012/01/18 00:11:43 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lm_isa_common.c,v 1.4 2016/06/01 02:37:47 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -121,6 +121,8 @@
        sc->lmsc.sc_dev = self;
        sc->lmsc.lm_writereg = lm_isa_writereg;
        sc->lmsc.lm_readreg = lm_isa_readreg;
+       /* pass wbsio Device ID */
+       sc->lmsc.sioid = (uint8_t)(uintptr_t)ia->ia_aux;
 
        lm_attach(&sc->lmsc);
 }
diff -r 95a310b6174c -r 50890feed3d9 sys/dev/isa/wbsio.c
--- a/sys/dev/isa/wbsio.c       Wed Jun 01 02:15:26 2016 +0000
+++ b/sys/dev/isa/wbsio.c       Wed Jun 01 02:37:47 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: wbsio.c,v 1.9 2012/01/18 00:23:30 jakllsch Exp $       */
+/*     $NetBSD: wbsio.c,v 1.10 2016/06/01 02:37:47 pgoyette Exp $      */
 /*     $OpenBSD: wbsio.c,v 1.5 2009/03/29 21:53:52 sthen Exp $ */
 /*



Home | Main Index | Thread Index | Old Index