mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-08-30 22:05:08 +00:00
Added a mainboard specific configuration for the ASUS P8P67-M Pro and fixed a few problems in the NCT677X implementation.
This commit is contained in:
@@ -47,7 +47,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
private readonly Chip chip;
|
||||
|
||||
private readonly float?[] voltages = new float?[9];
|
||||
private readonly float?[] temperatures = new float?[3];
|
||||
private readonly float?[] temperatures = new float?[4];
|
||||
private readonly float?[] fans = new float?[0];
|
||||
|
||||
// Hardware Monitor
|
||||
@@ -73,12 +73,13 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
private const ushort VOLTAGE_VBAT_REG = 0x0551;
|
||||
|
||||
private readonly ushort[] TEMPERATURE_REG =
|
||||
{ 0x150, 0x250, 0x27, 0x62B, 0x62C, 0x62D };
|
||||
{ 0x027, 0x73, 0x75, 0x77, 0x150, 0x250, 0x62B, 0x62C, 0x62D };
|
||||
private readonly ushort[] TEMPERATURE_HALF_REG =
|
||||
{ 0x151, 0x251, 0, 0x62E, 0x62E, 0x62E };
|
||||
{ 0, 0x74, 0x76, 0x78, 0x151, 0x251, 0x62E, 0x62E, 0x62E };
|
||||
private readonly ushort[] TEMPERATURE_SRC_REG =
|
||||
{ 0x621, 0x622, 0x623, 0x624, 0x625, 0x626 };
|
||||
private readonly int[] TEMPERATURE_HALF_BIT = { 7, 7, -1, 0, 1, 2 };
|
||||
{ 0x621, 0x100, 0x200, 0x300, 0x622, 0x623, 0x624, 0x625, 0x626 };
|
||||
private readonly int[] TEMPERATURE_HALF_BIT =
|
||||
{ -1, 7, 7, 7, 7, 7, 0, 1, 2 };
|
||||
private readonly ushort[] VOLTAGE_REG =
|
||||
{ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x550, 0x551 };
|
||||
private readonly ushort[] FAN_RPM_REG =
|
||||
@@ -86,19 +87,19 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
|
||||
private readonly int minFanRPM;
|
||||
|
||||
private enum TemperatureSource : byte {
|
||||
private enum SourceNCT6771F : byte {
|
||||
SYSTIN = 1,
|
||||
CPUTIN = 2,
|
||||
AUXTIN = 3,
|
||||
SMBUSMASTER = 4,
|
||||
PECI0 = 5,
|
||||
PECI1 = 6,
|
||||
PECI2 = 7,
|
||||
PECI3 = 8,
|
||||
PECI4 = 9,
|
||||
PECI5 = 10,
|
||||
PECI6 = 11,
|
||||
PECI7 = 12,
|
||||
PECI_0 = 5,
|
||||
PECI_1 = 6,
|
||||
PECI_2 = 7,
|
||||
PECI_3 = 8,
|
||||
PECI_4 = 9,
|
||||
PECI_5 = 10,
|
||||
PECI_6 = 11,
|
||||
PECI_7 = 12,
|
||||
PCH_CHIP_CPU_MAX_TEMP = 13,
|
||||
PCH_CHIP_TEMP = 14,
|
||||
PCH_CPU_TEMP = 15,
|
||||
@@ -109,6 +110,31 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
PCH_DIM3_TEMP = 20
|
||||
}
|
||||
|
||||
private enum SourceNCT6776F : byte {
|
||||
SYSTIN = 1,
|
||||
CPUTIN = 2,
|
||||
AUXTIN = 3,
|
||||
SMBUSMASTER_0 = 4,
|
||||
SMBUSMASTER_1 = 5,
|
||||
SMBUSMASTER_2 = 6,
|
||||
SMBUSMASTER_3 = 7,
|
||||
SMBUSMASTER_4 = 8,
|
||||
SMBUSMASTER_5 = 9,
|
||||
SMBUSMASTER_6 = 10,
|
||||
SMBUSMASTER_7 = 11,
|
||||
PECI_0 = 12,
|
||||
PECI_1 = 13,
|
||||
PCH_CHIP_CPU_MAX_TEMP = 14,
|
||||
PCH_CHIP_TEMP = 15,
|
||||
PCH_CPU_TEMP = 16,
|
||||
PCH_MCH_TEMP = 17,
|
||||
PCH_DIM0_TEMP = 18,
|
||||
PCH_DIM1_TEMP = 19,
|
||||
PCH_DIM2_TEMP = 20,
|
||||
PCH_DIM3_TEMP = 21,
|
||||
BYTE_TEMP = 22
|
||||
}
|
||||
|
||||
public NCT677X(Chip chip, byte revision, ushort port) {
|
||||
this.chip = chip;
|
||||
this.revision = revision;
|
||||
@@ -162,25 +188,36 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
voltages[i] = valid ? value : (float?)null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < TEMPERATURE_REG.Length; i++) {
|
||||
for (int i = TEMPERATURE_REG.Length - 1; i >= 0 ; i--) {
|
||||
int value = ((sbyte)ReadByte(TEMPERATURE_REG[i])) << 1;
|
||||
if (TEMPERATURE_HALF_BIT[i] > 0) {
|
||||
value |= ((ReadByte(TEMPERATURE_HALF_REG[i]) >>
|
||||
TEMPERATURE_HALF_BIT[i]) & 0x1);
|
||||
}
|
||||
|
||||
TemperatureSource source = (TemperatureSource)
|
||||
ReadByte(TEMPERATURE_SRC_REG[i]);
|
||||
byte source = ReadByte(TEMPERATURE_SRC_REG[i]);
|
||||
|
||||
float? temperature = 0.5f * value;
|
||||
if (temperature > 125 || temperature < -55)
|
||||
temperature = null;
|
||||
|
||||
switch (source) {
|
||||
case TemperatureSource.CPUTIN: temperatures[0] = temperature; break;
|
||||
case TemperatureSource.AUXTIN: temperatures[1] = temperature; break;
|
||||
case TemperatureSource.SYSTIN: temperatures[2] = temperature; break;
|
||||
}
|
||||
switch (chip) {
|
||||
case Chip.NCT6771F:
|
||||
switch ((SourceNCT6771F)source) {
|
||||
case SourceNCT6771F.PECI_0: temperatures[0] = temperature; break;
|
||||
case SourceNCT6771F.CPUTIN: temperatures[1] = temperature; break;
|
||||
case SourceNCT6771F.AUXTIN: temperatures[2] = temperature; break;
|
||||
case SourceNCT6771F.SYSTIN: temperatures[3] = temperature; break;
|
||||
|
||||
} break;
|
||||
case Chip.NCT6776F:
|
||||
switch ((SourceNCT6776F)source) {
|
||||
case SourceNCT6776F.PECI_0: temperatures[0] = temperature; break;
|
||||
case SourceNCT6776F.CPUTIN: temperatures[1] = temperature; break;
|
||||
case SourceNCT6776F.AUXTIN: temperatures[2] = temperature; break;
|
||||
case SourceNCT6776F.SYSTIN: temperatures[3] = temperature; break;
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < fans.Length; i++) {
|
||||
|
@@ -50,6 +50,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
P5W_DH_Deluxe,
|
||||
P6X58D_E,
|
||||
P8P67_PRO,
|
||||
P8P67_M_PRO,
|
||||
Rampage_Extreme,
|
||||
Rampage_II_GENE,
|
||||
|
||||
|
@@ -324,6 +324,8 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
return Model.P6X58D_E;
|
||||
case "P8P67 PRO":
|
||||
return Model.P8P67_PRO;
|
||||
case "P8P67-M PRO":
|
||||
return Model.P8P67_M_PRO;
|
||||
case "Rampage Extreme":
|
||||
return Model.Rampage_Extreme;
|
||||
case "Rampage II GENE":
|
||||
|
@@ -757,15 +757,33 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
v.Add(new Voltage("Voltage #7", 6, true));
|
||||
v.Add(new Voltage("3VSB", 7, 34, 34));
|
||||
v.Add(new Voltage("VBAT", 8, 34, 34));
|
||||
t.Add(new Temperature("CPU", 0));
|
||||
t.Add(new Temperature("Auxiliary", 1));
|
||||
t.Add(new Temperature("System", 2));
|
||||
t.Add(new Temperature("CPU", 1));
|
||||
t.Add(new Temperature("Auxiliary", 2));
|
||||
t.Add(new Temperature("System", 3));
|
||||
f.Add(new Fan("System Fan", 0));
|
||||
f.Add(new Fan("CPU Fan", 1));
|
||||
f.Add(new Fan("Auxiliary Fan", 2));
|
||||
f.Add(new Fan("Auxiliary Fan #2", 3));
|
||||
f.Add(new Fan("Auxiliary Fan #3", 4));
|
||||
break;
|
||||
case Model.P8P67_M_PRO: // NCT6776F
|
||||
v.Add(new Voltage("CPU VCore", 0));
|
||||
v.Add(new Voltage("+12V", 1, 11, 1));
|
||||
v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
|
||||
v.Add(new Voltage("+3V", 3, 34, 34));
|
||||
v.Add(new Voltage("+5V", 4, 12, 3));
|
||||
v.Add(new Voltage("Voltage #6", 5, true));
|
||||
v.Add(new Voltage("Voltage #7", 6, true));
|
||||
v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
|
||||
v.Add(new Voltage("VBAT", 8, 34, 34));
|
||||
t.Add(new Temperature("CPU", 0));
|
||||
t.Add(new Temperature("Motherboard", 3));
|
||||
f.Add(new Fan("Chassis Fan #1", 0));
|
||||
f.Add(new Fan("CPU Fan", 1));
|
||||
f.Add(new Fan("Chassis Fan #2", 2));
|
||||
f.Add(new Fan("Power Fan", 3));
|
||||
f.Add(new Fan("Auxiliary Fan", 4));
|
||||
break;
|
||||
default:
|
||||
v.Add(new Voltage("CPU VCore", 0));
|
||||
v.Add(new Voltage("Voltage #2", 1, true));
|
||||
@@ -777,8 +795,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
v.Add(new Voltage("3VSB", 7, 34, 34));
|
||||
v.Add(new Voltage("VBAT", 8, 34, 34));
|
||||
t.Add(new Temperature("CPU", 0));
|
||||
t.Add(new Temperature("Auxiliary", 1));
|
||||
t.Add(new Temperature("System", 2));
|
||||
t.Add(new Temperature("CPU", 1));
|
||||
t.Add(new Temperature("Auxiliary", 2));
|
||||
t.Add(new Temperature("System", 3));
|
||||
for (int i = 0; i < superIO.Fans.Length; i++)
|
||||
f.Add(new Fan("Fan #" + (i + 1), i));
|
||||
break;
|
||||
@@ -795,8 +814,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
v.Add(new Voltage("3VSB", 7, 34, 34));
|
||||
v.Add(new Voltage("VBAT", 8, 34, 34));
|
||||
t.Add(new Temperature("CPU", 0));
|
||||
t.Add(new Temperature("Auxiliary", 1));
|
||||
t.Add(new Temperature("System", 2));
|
||||
t.Add(new Temperature("CPU", 1));
|
||||
t.Add(new Temperature("Auxiliary", 2));
|
||||
t.Add(new Temperature("System", 3));
|
||||
for (int i = 0; i < superIO.Fans.Length; i++)
|
||||
f.Add(new Fan("Fan #" + (i + 1), i));
|
||||
break;
|
||||
|
Reference in New Issue
Block a user