Added experimental support for the Nuvoton NCT6792D, NCT6792D-A, NCT6793D, NCT6795D, NCT6796D, NCT6796D-R, NCT6797D, NCT6798D super I/O chips.

This commit is contained in:
Michael Möller
2020-02-09 12:15:35 +01:00
parent 83be65ab94
commit b4485c80d7
5 changed files with 156 additions and 26 deletions

View File

@@ -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";

View File

@@ -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 <mmoeller@openhardwaremonitor.org>
Copyright (C) 2009-2020 Michael Möller <mmoeller@openhardwaremonitor.org>
*/
@@ -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;

View File

@@ -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:

View File

@@ -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 <mmoeller@openhardwaremonitor.org>
Copyright (C) 2010-2020 Michael Möller <mmoeller@openhardwaremonitor.org>
Copyright (C) 2015 Dawid Gan <deveee@gmail.com>
*/
@@ -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;

View File

@@ -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: