mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-08-30 22:05:08 +00:00
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:
@@ -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";
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user