This commit is contained in:
Phyxion
2017-12-29 13:24:46 +01:00
5 changed files with 36 additions and 6 deletions
+2
View File
@@ -19,6 +19,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
F71862 = 0x0601,
F71869 = 0x0814,
F71869A = 0x1007,
F71878AD = 0x1106,
F71882 = 0x0541,
F71889AD = 0x1005,
F71889ED = 0x0909,
@@ -70,6 +71,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
View File
@@ -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();
}
+3 -1
View File
@@ -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":
+8
View File
@@ -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:
@@ -306,6 +313,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:
+5 -2
View File
@@ -214,7 +214,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:
@@ -969,7 +969,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:
@@ -1023,6 +1023,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;
}
}