Added support for Fintek F71878AD (vendorId 0x1106)
This commit is contained in:
@@ -19,6 +19,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
F71862 = 0x0601,
|
||||
F71869 = 0x0814,
|
||||
F71869A = 0x1007,
|
||||
F71878AD = 0x1106,
|
||||
F71882 = 0x0541,
|
||||
F71889AD = 0x1005,
|
||||
F71889ED = 0x0909,
|
||||
@@ -65,6 +66,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
case Chip.F71858: return "Fintek F71858";
|
||||
case Chip.F71862: return "Fintek F71862";
|
||||
case Chip.F71869: return "Fintek F71869";
|
||||
case Chip.F71878AD: return "Fintek F71878AD";
|
||||
case Chip.F71869A: return "Fintek F71869A";
|
||||
case Chip.F71882: return "Fintek F71882";
|
||||
case Chip.F71889AD: return "Fintek F71889AD";
|
||||
|
||||
+18
-3
@@ -26,18 +26,27 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
private const byte ADDRESS_REGISTER_OFFSET = 0x05;
|
||||
private const byte DATA_REGISTER_OFFSET = 0x06;
|
||||
|
||||
private const byte PWM_VALUES_OFFSET = 0x2D;
|
||||
|
||||
// Hardware Monitor Registers
|
||||
private const byte VOLTAGE_BASE_REG = 0x20;
|
||||
private const byte TEMPERATURE_CONFIG_REG = 0x69;
|
||||
private const byte TEMPERATURE_BASE_REG = 0x70;
|
||||
private readonly byte[] FAN_TACHOMETER_REG =
|
||||
new byte[] { 0xA0, 0xB0, 0xC0, 0xD0 };
|
||||
private readonly byte[] FAN_PWM_REG =
|
||||
new byte[] { 0xA3, 0xB3, 0xC3, 0xD3 };
|
||||
|
||||
private byte ReadByte(byte register) {
|
||||
Ring0.WriteIoPort(
|
||||
(ushort)(address + ADDRESS_REGISTER_OFFSET), register);
|
||||
return Ring0.ReadIoPort((ushort)(address + DATA_REGISTER_OFFSET));
|
||||
}
|
||||
private void WriteByte(byte register, byte value) {
|
||||
Ring0.WriteIoPort(
|
||||
(ushort)(address + ADDRESS_REGISTER_OFFSET), register);
|
||||
Ring0.WriteIoPort((ushort)(address + DATA_REGISTER_OFFSET), value);
|
||||
}
|
||||
|
||||
public byte? ReadGPIO(int index) {
|
||||
return null;
|
||||
@@ -45,7 +54,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
|
||||
public void WriteGPIO(int index, byte value) { }
|
||||
|
||||
public void SetControl(int index, byte? value) { }
|
||||
public void SetControl(int index, byte? value) {
|
||||
if(index < controls.Length)
|
||||
WriteByte(FAN_PWM_REG[index], value ?? 128);
|
||||
}
|
||||
|
||||
public F718XX(Chip chip, ushort address) {
|
||||
this.address = address;
|
||||
@@ -54,7 +66,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
voltages = new float?[chip == Chip.F71858 ? 3 : 9];
|
||||
temperatures = new float?[chip == Chip.F71808E ? 2 : 3];
|
||||
fans = new float?[chip == Chip.F71882 || chip == Chip.F71858 ? 4 : 3];
|
||||
controls = new float?[0];
|
||||
controls = new float?[chip == Chip.F71878AD ? 3 : 0];
|
||||
}
|
||||
|
||||
public Chip Chip { get { return chip; } }
|
||||
@@ -145,7 +157,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < fans.Length; i++) {
|
||||
int value = ReadByte(FAN_TACHOMETER_REG[i]) << 8;
|
||||
value |= ReadByte((byte)(FAN_TACHOMETER_REG[i] + 1));
|
||||
@@ -155,6 +167,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
else
|
||||
fans[i] = null;
|
||||
}
|
||||
for (int i = 0; i < controls.Length; i++) {
|
||||
controls[i] = (100*ReadByte((byte)(PWM_VALUES_OFFSET + i)))/256.0f;
|
||||
}
|
||||
|
||||
Ring0.ReleaseIsaBusMutex();
|
||||
}
|
||||
|
||||
@@ -46,7 +46,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
case "f71882fg":
|
||||
lmChips.Add(new LMChip(Chip.F71882, path)); break;
|
||||
case "f71889a":
|
||||
lmChips.Add(new LMChip(Chip.F71889AD, path)); break;
|
||||
lmChips.Add(new LMChip(Chip.F71889AD, path)); break;
|
||||
case "f71878ad":
|
||||
lmChips.Add(new LMChip(Chip.F71878AD, path)); break;
|
||||
case "f71889ed":
|
||||
lmChips.Add(new LMChip(Chip.F71889ED, path)); break;
|
||||
case "f71889fg":
|
||||
|
||||
@@ -115,6 +115,13 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
|
||||
break;
|
||||
} break;
|
||||
case 0x11:
|
||||
switch (revision) {
|
||||
case 0x06:
|
||||
chip = Chip.F71878AD;
|
||||
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
|
||||
break;
|
||||
} break;
|
||||
case 0x52:
|
||||
switch (revision) {
|
||||
case 0x17:
|
||||
@@ -282,6 +289,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
case Chip.F71858:
|
||||
case Chip.F71862:
|
||||
case Chip.F71869:
|
||||
case Chip.F71878AD:
|
||||
case Chip.F71869A:
|
||||
case Chip.F71882:
|
||||
case Chip.F71889AD:
|
||||
|
||||
@@ -212,7 +212,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
case Chip.F71889ED:
|
||||
case Chip.F71889F:
|
||||
case Chip.F71808E:
|
||||
GetFintekConfiguration(superIO, manufacturer, model, v, t, f);
|
||||
GetFintekConfiguration(superIO, manufacturer, model, v, t, f, c);
|
||||
break;
|
||||
|
||||
case Chip.W83627EHF:
|
||||
@@ -906,7 +906,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
|
||||
private static void GetFintekConfiguration(ISuperIO superIO,
|
||||
Manufacturer manufacturer, Model model,
|
||||
IList<Voltage> v, IList<Temperature> t, IList<Fan> f)
|
||||
IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c)
|
||||
{
|
||||
switch (manufacturer) {
|
||||
case Manufacturer.EVGA:
|
||||
@@ -960,6 +960,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
|
||||
t.Add(new Temperature("Temperature #" + (i + 1), i));
|
||||
for (int i = 0; i < superIO.Fans.Length; i++)
|
||||
f.Add(new Fan("Fan #" + (i + 1), i));
|
||||
for (int i = 0; i < superIO.Controls.Length; i++)
|
||||
c.Add(new Ctrl("Fan Control #" + (i + 1), i));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user