From 040d6f8222ac675b87718aa77f50692534676289 Mon Sep 17 00:00:00 2001 From: Antoine Reversat Date: Fri, 18 Jan 2019 10:34:55 -0500 Subject: [PATCH] Add support for IT8688E chip and various motherboards (#83) * Add IT8688E chip type * Add Z390 M Gaming motherboard type * Add proper voltage and temperatures for Z390 M Gaming * Add support for Z390 Aorus Ultra and Z390 UD --- Hardware/LPC/Chip.cs | 2 ++ Hardware/LPC/IT87XX.cs | 13 ++++++++++++- Hardware/LPC/LPCIO.cs | 1 + Hardware/Mainboard/Identification.cs | 6 ++++++ Hardware/Mainboard/Model.cs | 3 +++ Hardware/Mainboard/SuperIOHardware.cs | 26 ++++++++++++++++++++++++++ 6 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Hardware/LPC/Chip.cs b/Hardware/LPC/Chip.cs index c58de14..4106215 100644 --- a/Hardware/LPC/Chip.cs +++ b/Hardware/LPC/Chip.cs @@ -30,6 +30,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { IT8628E = 0x8628, IT8665E = 0x8665, IT8686E = 0x8686, + IT8688E = 0x8688, IT8705F = 0x8705, IT8712F = 0x8712, IT8716F = 0x8716, @@ -86,6 +87,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { case Chip.IT8628E: return "ITE IT8628E"; case Chip.IT8665E: return "ITE IT8665E"; case Chip.IT8686E: return "ITE IT8686E"; + case Chip.IT8688E: return "ITE IT8688E"; case Chip.IT8705F: return "ITE IT8705F"; case Chip.IT8712F: return "ITE IT8712F"; case Chip.IT8716F: return "ITE IT8716F"; diff --git a/Hardware/LPC/IT87XX.cs b/Hardware/LPC/IT87XX.cs index 502a75b..db951a0 100644 --- a/Hardware/LPC/IT87XX.cs +++ b/Hardware/LPC/IT87XX.cs @@ -64,6 +64,10 @@ namespace OpenHardwareMonitor.Hardware.LPC { Ring0.WriteIoPort(addressReg, register); byte value = Ring0.ReadIoPort(dataReg); valid = register == Ring0.ReadIoPort(addressReg); + // IT8688E doesn't return the value we wrote to + // addressReg when we read it back. + if (this.chip == Chip.IT8688E) + valid = true; return value; } @@ -198,6 +202,11 @@ namespace OpenHardwareMonitor.Hardware.LPC { fans = new float?[6]; fansDisabled = new bool[6]; controls = new float?[3]; + } else if (chip == Chip.IT8688E) { + voltages = new float?[11]; + temperatures = new float?[6]; + fans = new float?[5]; + controls = new float?[3]; } else { voltages = new float?[9]; temperatures = new float?[3]; @@ -209,7 +218,8 @@ namespace OpenHardwareMonitor.Hardware.LPC { // IT8620E, IT8628E, IT8721F, IT8728F, IT8772E and IT8686E use a 12mV resultion // ADC, all others 16mV if (chip == Chip.IT8620E || chip == Chip.IT8628E || chip == Chip.IT8721F - || chip == Chip.IT8728F || chip == Chip.IT8771E || chip == Chip.IT8772E || chip == Chip.IT8686E) + || chip == Chip.IT8728F || chip == Chip.IT8771E || chip == Chip.IT8772E + || chip == Chip.IT8686E || chip == Chip.IT8688E) { voltageGain = 0.012f; } @@ -266,6 +276,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { break; case Chip.IT8620E: case Chip.IT8628E: + case Chip.IT8688E: case Chip.IT8705F: case Chip.IT8728F: case Chip.IT8771E: diff --git a/Hardware/LPC/LPCIO.cs b/Hardware/LPC/LPCIO.cs index 2460ba0..c25a96f 100644 --- a/Hardware/LPC/LPCIO.cs +++ b/Hardware/LPC/LPCIO.cs @@ -385,6 +385,7 @@ namespace OpenHardwareMonitor.Hardware.LPC { case 0x8628: chip = Chip.IT8628E; break; case 0x8665: chip = Chip.IT8665E; break; case 0x8686: chip = Chip.IT8686E; break; + case 0x8688: chip = Chip.IT8688E; break; case 0x8705: chip = Chip.IT8705F; break; case 0x8712: chip = Chip.IT8712F; break; case 0x8716: chip = Chip.IT8716F; break; diff --git a/Hardware/Mainboard/Identification.cs b/Hardware/Mainboard/Identification.cs index 059f515..a034d0e 100644 --- a/Hardware/Mainboard/Identification.cs +++ b/Hardware/Mainboard/Identification.cs @@ -195,6 +195,12 @@ namespace OpenHardwareMonitor.Hardware.Mainboard { return Model.Z68X_UD3H_B3; case "Z68X-UD7-B3": return Model.Z68X_UD7_B3; + case "Z390 M GAMING-CF": + return Model.Z390_M_GAMING; + case "Z390 AORUS ULTRA": + return Model.Z390_AORUS_ULTRA; + case "Z390 UD": + return Model.Z390_UD; case "FH67": return Model.FH67; case "AX370-Gaming K7": diff --git a/Hardware/Mainboard/Model.cs b/Hardware/Mainboard/Model.cs index 916a649..1603939 100644 --- a/Hardware/Mainboard/Model.cs +++ b/Hardware/Mainboard/Model.cs @@ -87,6 +87,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard { Z68X_UD3H_B3, Z68X_UD7_B3, AX370_K7, + Z390_M_GAMING, + Z390_AORUS_ULTRA, + Z390_UD, // Shuttle FH67, diff --git a/Hardware/Mainboard/SuperIOHardware.cs b/Hardware/Mainboard/SuperIOHardware.cs index 2318167..8f8fcbf 100644 --- a/Hardware/Mainboard/SuperIOHardware.cs +++ b/Hardware/Mainboard/SuperIOHardware.cs @@ -176,6 +176,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard { c = new List(); switch (superIO.Chip) { + case Chip.IT8688E: case Chip.IT8705F: case Chip.IT8712F: case Chip.IT8716F: @@ -649,6 +650,31 @@ namespace OpenHardwareMonitor.Hardware.Mainboard { t.Add(new Temperature("VRM MOS", 4)); for (int i = 0; i < superIO.Fans.Length; i++) f.Add(new Fan("Fan #" + (i + 1), i)); + break; + case Model.Z390_M_GAMING: // IT8688E + case Model.Z390_AORUS_ULTRA: + case Model.Z390_UD: + v.Add(new Voltage("CPU VCore", 0)); + v.Add(new Voltage("+3.3V", 1, 6.49f, 10)); + v.Add(new Voltage("+12V", 2, 5f, 1)); + v.Add(new Voltage("+5V", 3, 1.5f, 1)); + v.Add(new Voltage("CPU VCCGT", 4)); + v.Add(new Voltage("CPU VCCSA", 5)); + v.Add(new Voltage("VDDQ", 6)); + v.Add(new Voltage("DDRVTT", 7)); + v.Add(new Voltage("PCHCore", 8)); + v.Add(new Voltage("CPU VCCIO", 9)); + v.Add(new Voltage("DDRVPP", 10)); + t.Add(new Temperature("System1", 0)); + t.Add(new Temperature("PCH", 1)); + t.Add(new Temperature("CPU", 2)); + t.Add(new Temperature("PCIEX16", 3)); + t.Add(new Temperature("VRM MOS", 4)); + t.Add(new Temperature("System2", 5)); + f.Add(new Fan("CPU Fan", 0)); + f.Add(new Fan("System Fan #1", 1)); + f.Add(new Fan("System Fan #2", 2)); + f.Add(new Fan("System Fan #3", 3)); break; default: v.Add(new Voltage("CPU VCore", 0));