From 0b42635cf60a48a37f5f4b8e148a438eb4971479 Mon Sep 17 00:00:00 2001 From: Alcolawl <5004749+Alcolawl@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:40:09 -0500 Subject: [PATCH] Add support for MSI PRO B850M-A Project Zero (#2190) * Support for 10 new MSI motherboards with NCT6687D-R SIO controller * Support for newly established fan and control register structure WILL ABSOLUTELY BREAK FAN CONTROL CONFIGS FOR NCT6687DR USERS. This introduces Support for 16 System Fans and Controls, including EZ-Connect, Pump Fan 2, and System Fan 7. Also improved the logic for nct6687dr control. * Add support for X870E Tomahawk WIFI, fix B850 Gaming Plus WIFI PZ identification Additionally sync with upstream * Add support for B850M Gaming Plus WIFI and Z890 Unify-X Also removes duplicate model identification case for B850M GAMING PLUS WIFI6E * Rename temperature sensor to proper name for X870E Carbon Wifi and GODLIKE motherboards * Add support for MSI PRO B850M-A Project Zero (MS-7E78) * Rename 'T_Sensor' to 'Temperature Sensor' for clarity * T Sensor > Temperature Sensor * Rename Temperature Sensors to Thermistor Sensors --------- Co-authored-by: PhyxionNL <7643972+PhyxionNL@users.noreply.github.com> --- .../Hardware/Motherboard/Identification.cs | 2 + .../Hardware/Motherboard/Lpc/LpcIO.cs | 1 + .../Hardware/Motherboard/Model.cs | 1 + .../Hardware/Motherboard/SuperIOHardware.cs | 38 +++++++++---------- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Identification.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Identification.cs index d3bdfd5..8f9a059 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Identification.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Identification.cs @@ -693,6 +693,8 @@ internal class Identification return Model.B850S_PRO_WIFI6E; case var _ when name.Equals("PRO B850M-A WIFI (MS-7E66)", StringComparison.OrdinalIgnoreCase): return Model.B850MA_PRO_WIFI; + case var _ when name.Equals("PRO B850M-A WIFI PZ (MS-7E78)", StringComparison.OrdinalIgnoreCase): + return Model.B850MA_PRO_WIFI_PZ; case var _ when name.Equals("PRO B850M-P WIFI (MS-7E71)", StringComparison.OrdinalIgnoreCase): return Model.B850MP_PRO_WIFI; case var _ when name.Equals("B850 GAMING PLUS WIFI (MS-7E56)", StringComparison.OrdinalIgnoreCase): diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs index 2f2918b..f0dab81 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs @@ -421,6 +421,7 @@ internal class LpcIO case Model.B850M_GAMING_PLUS_WIFI6E: case Model.B850P_PRO_WIFI: case Model.B850MA_PRO_WIFI: + case Model.B850MA_PRO_WIFI_PZ: case Model.B850MP_PRO_WIFI: case Model.B850M_MORTAR: case Model.B850M_MORTAR_WIFI: diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Model.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Model.cs index fdb23c6..241712a 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Model.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Model.cs @@ -171,6 +171,7 @@ public enum Model B650M_PROJECT_ZERO, B850P_PRO_WIFI, B850MA_PRO_WIFI, + B850MA_PRO_WIFI_PZ, B850MP_PRO_WIFI, B850_EDGE_TI_WIFI, B850I_EDGE_TI_WIFI, diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs index b603ca4..f3a9d48 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs @@ -550,8 +550,8 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("VRM MOS", 2)); t.Add(new Temperature("PCH", 3)); t.Add(new Temperature("CPU Socket", 4)); - t.Add(new Temperature("Temperature Sensor 1", 5)); - t.Add(new Temperature("Temperature Sensor 2", 6)); + t.Add(new Temperature("Thermistor Sensor 1", 5)); + t.Add(new Temperature("Thermistor Sensor 2", 6)); t.Add(new Temperature("PCIe #1", 7)); t.Add(new Temperature("PCIe #2", 8)); t.Add(new Temperature("M2 #1", 9)); @@ -701,7 +701,7 @@ internal sealed class SuperIOHardware : Hardware v.Add(new Voltage("CMOS Battery", 13)); t.Add(new Temperature("PCIe x1", 5)); - t.Add(new Temperature("M2 #1", 6)); + t.Add(new Temperature("Thermistor Sensor", 6)); break; @@ -1448,7 +1448,7 @@ internal sealed class SuperIOHardware : Hardware v.Add(new Voltage("CMOS Battery", 8, 10, 10)); t.Add(new Temperature("CPU", 0)); t.Add(new Temperature("Motherboard", 1)); - t.Add(new Temperature("T_Sensor", 2)); + t.Add(new Temperature("Thermistor Sensor", 2)); t.Add(new Temperature("PCIe x16", 3)); t.Add(new Temperature("VRM", 4)); t.Add(new Temperature("Temperature #6", 5)); @@ -3941,7 +3941,7 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("CPU", 1)); t.Add(new Temperature("Motherboard", 2)); t.Add(new Temperature("PCH TS10", 9)); - t.Add(new Temperature("T_Sensor", 24)); + t.Add(new Temperature("Thermistor Sensor", 24)); f.Add(new Fan("CPU Fan #1", 1)); // CPU_FAN1 f.Add(new Fan("CPU Fan #2 / Pump", 0)); // CPU_FAN2/PUMP @@ -3970,9 +3970,9 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("Motherboard", 2)); - t.Add(new Temperature("Thermistor Sensor #1", 5)); // T_SENSOR 1 - t.Add(new Temperature("Thermistor Sensor #2", 6)); // T_SENSOR 2 - t.Add(new Temperature("Thermistor Sensor #3", 8)); // T_SENSOR 3 + t.Add(new Temperature("Thermistor Sensor #1", 5)); // Thermistor Sensor 1 + t.Add(new Temperature("Thermistor Sensor #2", 6)); // Thermistor Sensor 2 + t.Add(new Temperature("Thermistor Sensor #3", 8)); // Thermistor Sensor 3 f.Add(new Fan("CPU Fan #1", 1)); // CPU_FAN1 f.Add(new Fan("CPU Fan #2", 2)); // CPU_FAN2 @@ -4011,10 +4011,10 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("Motherboard", 1)); // SYSTIN t.Add(new Temperature("Auxiliary #0", 2)); // AUXTIN0 t.Add(new Temperature("Auxiliary #1", 3)); // AUXTIN1 - t.Add(new Temperature("Thermistor Sensor #1", 4)); // AUXTIN2 (T_SENSOR1) - t.Add(new Temperature("Thermistor Sensor #2", 5)); // AUXTIN3 (T_SENSOR2) + t.Add(new Temperature("Thermistor Sensor #1", 4)); // AUXTIN2 (Thermistor Sensor1) + t.Add(new Temperature("Thermistor Sensor #2", 5)); // AUXTIN3 (Thermistor Sensor2) t.Add(new Temperature("Auxiliary #4", 6)); // AUXTIN4 - t.Add(new Temperature("Thermistor Sensor #3", 7)); // AUXTIN5 (T_SENSOR3) + t.Add(new Temperature("Thermistor Sensor #3", 7)); // AUXTIN5 (Thermistor Sensor3) t.Add(new Temperature("CPU Core", 8)); // SMBUSMASTER0 (CPU Core) t.Add(new Temperature("CPU (PECI)", 9)); // CPU (PECI) t.Add(new Temperature("Virtual", 10)); // VIRTUAL_TEMP @@ -4576,7 +4576,7 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("PCH", 12)); // Chipset. Match HWinfo & Armoury Crate t.Add(new Temperature("CPU", 21)); // Matches CPU in HWinfo & Armoury Crate. - // note that CPU Opt Fan is on the ASUS EC controller. Together with VRM, T_Sensor, WaterIn, WaterOut and WaterFlow + additional sensors. + // note that CPU Opt Fan is on the ASUS EC controller. Together with VRM, Temperature Sensor, WaterIn, WaterOut and WaterFlow + additional sensors. fanControlNames = ["Chassis Fan 1", "CPU Fan", "Chassis Fan 2", "Chassis Fan 3", "Chassis Fan 4", "Waterpump", "AIO Pump"]; System.Diagnostics.Debug.Assert(fanControlNames.Length == superIO.Fans.Length, @@ -4732,8 +4732,8 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("CPU Package", 0)); t.Add(new Temperature("CPU", 1)); t.Add(new Temperature("Motherboard", 2)); - t.Add(new Temperature("VRM Thermistor", 3)); - t.Add(new Temperature("T Sensor", 8)); + t.Add(new Temperature("VRM", 3)); + t.Add(new Temperature("Thermistor Sensor", 8)); t.Add(new Temperature("PCH", 13)); t.Add(new Temperature("CPU Calibrated", 22)); @@ -5030,7 +5030,7 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("Temperature #6", 6)); // No matching temp value t.Add(new Temperature("Temperature #7", 8)); // Matches MB in HWinfo t.Add(new Temperature("CPU", 22)); // Matches MB in HWinfo - t.Add(new Temperature("T Sensor", 24)); + t.Add(new Temperature("Thermistor Sensor", 24)); for (int i = 0; i < superIO.Fans.Length; i++) f.Add(new Fan("Fan #" + (i + 1), i)); @@ -5065,7 +5065,7 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("Temperature #4", 4)); // No matching temp value t.Add(new Temperature("Temperature #5", 5)); // No matching temp value t.Add(new Temperature("Temperature #6", 6)); // No matching temp value - t.Add(new Temperature("T Sensor", 24)); // Aligned with Armoury Crate ROG_STRIX_X670E_E_GAMING_WIFI + t.Add(new Temperature("Thermistor Sensor", 24)); // Aligned with Armoury Crate ROG_STRIX_X670E_E_GAMING_WIFI for (int i = 0; i < superIO.Fans.Length; i++) f.Add(new Fan("Fan #" + (i + 1), i)); @@ -5115,7 +5115,7 @@ internal sealed class SuperIOHardware : Hardware //v.Add(new Voltage("CPU Termination", 9)); // This is wrong t.Add(new Temperature("CPU", 22)); t.Add(new Temperature("Motherboard", 2)); - t.Add(new Temperature("T_Sensor", 24)); // Aligned with Armoury Crate + t.Add(new Temperature("Thermistor Sensor", 24)); // Aligned with Armoury Crate t.Add(new Temperature("Temperature #1", 1)); // Unknown, Possibly VRM with 23 offset for (int i = 0; i < superIO.Fans.Length; i++) @@ -5322,7 +5322,7 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("CPU Package", 0)); // PECI_0, CPU Package t.Add(new Temperature("CPU", 1)); // CPUTIN, CPU t.Add(new Temperature("Motherboard", 2)); // SYSTIN, MOTHERBOARD - t.Add(new Temperature("T Sensor", 8)); // TSENSOR + t.Add(new Temperature("Thermistor Sensor", 8)); // TSENSOR t.Add(new Temperature("PCH", 13)); // PCH_CHIP_TEMP t.Add(new Temperature("PECI 0 Calibrated", 22)); // PECI_0_CAL, CPU @@ -5655,7 +5655,7 @@ internal sealed class SuperIOHardware : Hardware t.Add(new Temperature("VRM MOS", 3)); // AUXTIN0, CPUMOSTIN, 10k at left side of cpu vrm t.Add(new Temperature("Chipset", 5)); // AUXTIN2, 10k at back side of the chipset t.Add(new Temperature("CPU", 23)); - // Add temperature sensors for voltage inputs that are marked ad + // Add Thermistor Sensors for voltage inputs that are marked ad t.Add(new Temperature("MOS CPU", 24)); // (VIN 4 Voltage) NTC Near MOSFET CPU VRM t.Add(new Temperature("PCH", 25)); // (Voltage #6) X570 Platform Control HUB TEMP (NTC On Bottom of PCB)