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>
This commit is contained in:
Alcolawl
2026-02-02 15:40:09 +01:00
committed by GitHub
co-authored by PhyxionNL
parent 2423b1b7f1
commit 0b42635cf6
4 changed files with 23 additions and 19 deletions
@@ -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):
@@ -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:
@@ -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,
@@ -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)