diff --git a/Hardware/LPC/Chip.cs b/Hardware/LPC/Chip.cs index adfdb67..e2f86e5 100644 --- a/Hardware/LPC/Chip.cs +++ b/Hardware/LPC/Chip.cs @@ -48,6 +48,14 @@ namespace OpenHardwareMonitor.Hardware.LPC { NCT610X = 0xC452, NCT6779D = 0xC560, NCT6791D = 0xC803, + NCT6792D = 0xC911, + NCT6792DA = 0xC913, + NCT6793D = 0xD121, + NCT6795D = 0xD352, + NCT6796D = 0xD423, + NCT6796DR = 0xD42A, + NCT6797D = 0xD451, + NCT6798D = 0xD42B, W83627DHG = 0xA020, W83627DHGP = 0xB070, @@ -101,6 +109,14 @@ namespace OpenHardwareMonitor.Hardware.LPC { case Chip.NCT6776F: return "Nuvoton NCT6776F"; case Chip.NCT6779D: return "Nuvoton NCT6779D"; case Chip.NCT6791D: return "Nuvoton NCT6791D"; + case Chip.NCT6792D: return "Nuvoton NCT6792D+"; + case Chip.NCT6792DA: return "Nuvoton NCT6792D-A"; + case Chip.NCT6793D: return "Nuvoton NCT6793D"; + case Chip.NCT6795D: return "Nuvoton NCT6795D"; + case Chip.NCT6796D: return "Nuvoton NCT6796D"; + case Chip.NCT6796DR: return "Nuvoton NCT6796D-R"; + case Chip.NCT6797D: return "Nuvoton NCT6797D"; + case Chip.NCT6798D: return "Nuvoton NCT6798D"; case Chip.W83627DHG: return "Winbond W83627DHG"; case Chip.W83627DHGP: return "Winbond W83627DHG-P"; diff --git a/Hardware/LPC/LMSensors.cs b/Hardware/LPC/LMSensors.cs index 414fffa..1b692ab 100755 --- a/Hardware/LPC/LMSensors.cs +++ b/Hardware/LPC/LMSensors.cs @@ -4,7 +4,7 @@ License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - Copyright (C) 2009-2013 Michael Möller + Copyright (C) 2009-2020 Michael Möller */ @@ -73,6 +73,18 @@ namespace OpenHardwareMonitor.Hardware.LPC { lmChips.Add(new LMChip(Chip.NCT6779D, path)); break; case "nct6791": lmChips.Add(new LMChip(Chip.NCT6791D, path)); break; + case "nct6792": + lmChips.Add(new LMChip(Chip.NCT6792D, path)); break; + case "nct6793": + lmChips.Add(new LMChip(Chip.NCT6793D, path)); break; + case "nct6795": + lmChips.Add(new LMChip(Chip.NCT6795D, path)); break; + case "nct6796": + lmChips.Add(new LMChip(Chip.NCT6796D, path)); break; + case "nct6797": + lmChips.Add(new LMChip(Chip.NCT6797D, path)); break; + case "nct6798": + lmChips.Add(new LMChip(Chip.NCT6798D, path)); break; case "w83627ehf": lmChips.Add(new LMChip(Chip.W83627EHF, path)); break; diff --git a/Hardware/LPC/LPCIO.cs b/Hardware/LPC/LPCIO.cs index bd33f18..d84ed5d 100644 --- a/Hardware/LPC/LPCIO.cs +++ b/Hardware/LPC/LPCIO.cs @@ -209,6 +209,50 @@ namespace OpenHardwareMonitor.Hardware.LPC { logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; } break; + case 0xC9: + switch (revision) { + case 0x11: + chip = Chip.NCT6792D; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + case 0x13: + chip = Chip.NCT6792DA; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + } break; + case 0xD1: + switch (revision) { + case 0x21: + chip = Chip.NCT6793D; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + } break; + case 0xD3: + switch (revision) { + case 0x52: + chip = Chip.NCT6795D; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + } break; + case 0xD4: + switch (revision) { + case 0x23: + chip = Chip.NCT6796D; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + case 0x2A: + chip = Chip.NCT6796DR; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + case 0x2B: + chip = Chip.NCT6798D; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + case 0x51: + chip = Chip.NCT6797D; + logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; + break; + } break; } if (chip == Chip.Unknown) { if (id != 0 && id != 0xff) { @@ -226,8 +270,18 @@ namespace OpenHardwareMonitor.Hardware.LPC { ushort vendorID = port.ReadWord(FINTEK_VENDOR_ID_REGISTER); - // disable the hardware monitor i/o space lock on NCT6791D chips - if (address == verify && chip == Chip.NCT6791D) { + // disable the hardware monitor i/o space lock on NCT679XD chips + if (address == verify && ( + chip == Chip.NCT6791D || + chip == Chip.NCT6792D || + chip == Chip.NCT6792DA || + chip == Chip.NCT6793D || + chip == Chip.NCT6795D || + chip == Chip.NCT6796D || + chip == Chip.NCT6796DR || + chip == Chip.NCT6797D || + chip == Chip.NCT6798D)) + { port.NuvotonDisableIOSpaceLock(); } @@ -277,6 +331,14 @@ namespace OpenHardwareMonitor.Hardware.LPC { case Chip.NCT6776F: case Chip.NCT6779D: case Chip.NCT6791D: + case Chip.NCT6792D: + case Chip.NCT6792DA: + case Chip.NCT6793D: + case Chip.NCT6795D: + case Chip.NCT6796D: + case Chip.NCT6796DR: + case Chip.NCT6797D: + case Chip.NCT6798D: superIOs.Add(new NCT677X(chip, revision, address, port)); break; case Chip.F71858: diff --git a/Hardware/LPC/NCT677X.cs b/Hardware/LPC/NCT677X.cs index 48d8d0e..f5f054b 100644 --- a/Hardware/LPC/NCT677X.cs +++ b/Hardware/LPC/NCT677X.cs @@ -4,7 +4,7 @@ License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - Copyright (C) 2010-2015 Michael Möller + Copyright (C) 2010-2020 Michael Möller Copyright (C) 2015 Dawid Gan */ @@ -63,12 +63,12 @@ namespace OpenHardwareMonitor.Hardware.LPC { private readonly ushort[] FAN_PWM_COMMAND_REG; private readonly ushort[] FAN_CONTROL_MODE_REG; - private readonly ushort fanRpmBaseRegister; + private readonly ushort[] fanRpmBaseRegister; private readonly int minFanRPM; - private bool[] restoreDefaultFanControlRequired = new bool[6]; - private byte[] initialFanControlMode = new byte[6]; - private byte[] initialFanPwmCommand = new byte[6]; + private bool[] restoreDefaultFanControlRequired = new bool[7]; + private byte[] initialFanControlMode = new byte[7]; + private byte[] initialFanPwmCommand = new byte[7]; private readonly ushort[] voltageRegisters; private readonly ushort voltageVBatRegister; @@ -205,11 +205,11 @@ namespace OpenHardwareMonitor.Hardware.LPC { VENDOR_ID_LOW_REGISTER = 0x004F; FAN_PWM_OUT_REG = new ushort[] { - 0x001, 0x003, 0x011, 0x013, 0x015, 0x017 }; + 0x001, 0x003, 0x011, 0x013, 0x015, 0x017, 0x029 }; FAN_PWM_COMMAND_REG = new ushort[] { - 0x109, 0x209, 0x309, 0x809, 0x909, 0xA09 }; + 0x109, 0x209, 0x309, 0x809, 0x909, 0xA09, 0xB09 }; FAN_CONTROL_MODE_REG = new ushort[] { - 0x102, 0x202, 0x302, 0x802, 0x902, 0xA02 }; + 0x102, 0x202, 0x302, 0x802, 0x902, 0xA02, 0xB02 }; vBatMonitorControlRegister = 0x005D; } @@ -225,7 +225,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { if (chip == Chip.NCT6771F) { fans = new float?[4]; - // min value RPM value with 16-bit fan counter + // min RPM value with 16-bit fan counter minFanRPM = (int)(1.35e6 / 0xFFFF); temperaturesSource = new byte[] { @@ -237,7 +237,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { } else { fans = new float?[5]; - // min value RPM value with 13-bit fan counter + // min RPM value with 13-bit fan counter minFanRPM = (int)(1.35e6 / 0x1FFF); temperaturesSource = new byte[] { @@ -247,7 +247,8 @@ namespace OpenHardwareMonitor.Hardware.LPC { (byte)SourceNCT6776F.SYSTIN }; } - fanRpmBaseRegister = 0x656; + fanRpmBaseRegister = new ushort[] + { 0x656, 0x658, 0x65A, 0x65C, 0x65E }; controls = new float?[3]; @@ -272,17 +273,40 @@ namespace OpenHardwareMonitor.Hardware.LPC { case Chip.NCT6779D: case Chip.NCT6791D: - if (chip == Chip.NCT6779D) { - fans = new float?[5]; - controls = new float?[5]; - } else { - fans = new float?[6]; - controls = new float?[6]; + case Chip.NCT6792D: + case Chip.NCT6792DA: + case Chip.NCT6793D: + case Chip.NCT6795D: + case Chip.NCT6796D: + case Chip.NCT6796DR: + case Chip.NCT6797D: + case Chip.NCT6798D: + switch (chip) { + case Chip.NCT6791D: + case Chip.NCT6792D: + case Chip.NCT6792DA: + case Chip.NCT6793D: + case Chip.NCT6795D: + fans = new float?[6]; + controls = new float?[6]; + break; + case Chip.NCT6796D: + case Chip.NCT6796DR: + case Chip.NCT6797D: + case Chip.NCT6798D: + fans = new float?[7]; + controls = new float?[7]; + break; + default: + fans = new float?[5]; + controls = new float?[5]; + break; } - fanRpmBaseRegister = 0x4C0; + fanRpmBaseRegister = new ushort[] + { 0x4C0, 0x4C2, 0x4C4, 0x4C6, 0x4C8, 0x4CA, 0x4CE }; - // min value RPM value with 13-bit fan counter + // min RPM value with 13-bit fan counter minFanRPM = (int)(1.35e6 / 0x1FFF); voltages = new float?[15]; @@ -320,7 +344,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { fans = new float?[3]; controls = new float?[3]; - fanRpmBaseRegister = 0x030; + fanRpmBaseRegister = new ushort[] { 0x030, 0x032, 0x034 }; // min value RPM value with 13-bit fan counter minFanRPM = (int)(1.35e6 / 0x1FFF); @@ -414,7 +438,15 @@ namespace OpenHardwareMonitor.Hardware.LPC { public float?[] Controls { get { return controls; } } private void DisableIOSpaceLock() { - if (chip != Chip.NCT6791D) + if (chip != Chip.NCT6791D && + chip != Chip.NCT6792D && + chip != Chip.NCT6792DA && + chip != Chip.NCT6793D && + chip != Chip.NCT6795D && + chip != Chip.NCT6796D && + chip != Chip.NCT6796DR && + chip != Chip.NCT6797D && + chip != Chip.NCT6798D) return; // the lock is disabled already if the vendor ID can be read @@ -482,8 +514,8 @@ namespace OpenHardwareMonitor.Hardware.LPC { } for (int i = 0; i < fans.Length; i++) { - byte high = ReadByte((ushort)(fanRpmBaseRegister + (i << 1))); - byte low = ReadByte((ushort)(fanRpmBaseRegister + (i << 1) + 1)); + byte high = ReadByte(fanRpmBaseRegister[i]); + byte low = ReadByte((ushort)(fanRpmBaseRegister[i] + 1)); int value = (high << 8) | low; fans[i] = value > minFanRPM ? value : 0; diff --git a/Hardware/Mainboard/SuperIOHardware.cs b/Hardware/Mainboard/SuperIOHardware.cs index 8b8e170..5153575 100644 --- a/Hardware/Mainboard/SuperIOHardware.cs +++ b/Hardware/Mainboard/SuperIOHardware.cs @@ -274,6 +274,14 @@ namespace OpenHardwareMonitor.Hardware.Mainboard { break; case Chip.NCT6779D: case Chip.NCT6791D: + case Chip.NCT6792D: + case Chip.NCT6792DA: + case Chip.NCT6793D: + case Chip.NCT6795D: + case Chip.NCT6796D: + case Chip.NCT6796DR: + case Chip.NCT6797D: + case Chip.NCT6798D: GetNuvotonConfigurationD(superIO, manufacturer, model, v, t, f, c); break; default: