mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-09-06 01:05:35 +00:00
Added support for Fintek F71858 chips. Corrected the number of fans for Fintek.
This commit is contained in:
@@ -19,6 +19,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
W83667HG = 0xA510,
|
W83667HG = 0xA510,
|
||||||
W83667HGB = 0xB350,
|
W83667HGB = 0xB350,
|
||||||
W83687THF = 0x8541,
|
W83687THF = 0x8541,
|
||||||
|
F71858 = 0x0507,
|
||||||
F71862 = 0x0601,
|
F71862 = 0x0601,
|
||||||
F71869 = 0x0814,
|
F71869 = 0x0814,
|
||||||
F71882 = 0x0541,
|
F71882 = 0x0541,
|
||||||
|
@@ -56,7 +56,8 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
|
|
||||||
// Hardware Monitor Registers
|
// Hardware Monitor Registers
|
||||||
private const byte VOLTAGE_BASE_REG = 0x20;
|
private const byte VOLTAGE_BASE_REG = 0x20;
|
||||||
private const byte TEMPERATURE_BASE_REG = 0x72;
|
private const byte TEMPERATURE_CONFIG_REG = 0x69;
|
||||||
|
private const byte TEMPERATURE_BASE_REG = 0x70;
|
||||||
private byte[] FAN_TACHOMETER_REG = new byte[] { 0xA0, 0xB0, 0xC0, 0xD0 };
|
private byte[] FAN_TACHOMETER_REG = new byte[] { 0xA0, 0xB0, 0xC0, 0xD0 };
|
||||||
|
|
||||||
private byte ReadByte(byte register) {
|
private byte ReadByte(byte register) {
|
||||||
@@ -75,16 +76,27 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
new ParameterDescription("Offset", "Temperature offset.", 0)
|
new ParameterDescription("Offset", "Temperature offset.", 0)
|
||||||
});
|
});
|
||||||
|
|
||||||
fans = new Sensor[4];
|
fans = new Sensor[chip == Chip.F71882 ? 4 : 3];
|
||||||
for (int i = 0; i < fans.Length; i++)
|
for (int i = 0; i < fans.Length; i++)
|
||||||
fans[i] = new Sensor("Fan #" + (i + 1), i, SensorType.Fan, this);
|
fans[i] = new Sensor("Fan #" + (i + 1), i, SensorType.Fan, this);
|
||||||
|
|
||||||
voltageGains = new float[] { 1, 0.5f, 1, 1, 1, 1, 1, 1, 1 };
|
switch (chip) {
|
||||||
voltages = new Sensor[4];
|
case Chip.F71858:
|
||||||
voltages[0] = new Sensor("VCC3V", 0, SensorType.Voltage, this);
|
voltageGains = new float[] { 1, 1, 1 };
|
||||||
voltages[1] = new Sensor("CPU VCore", 1, SensorType.Voltage, this);
|
voltages = new Sensor[3];
|
||||||
voltages[2] = new Sensor("VSB3V", 7, SensorType.Voltage, this);
|
voltages[0] = new Sensor("VCC3V", 0, SensorType.Voltage, this);
|
||||||
voltages[3] = new Sensor("Battery", 8, SensorType.Voltage, this);
|
voltages[1] = new Sensor("VSB3V", 1, SensorType.Voltage, this);
|
||||||
|
voltages[2] = new Sensor("Battery", 2, SensorType.Voltage, this);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
voltageGains = new float[] { 1, 0.5f, 1, 1, 1, 1, 1, 1, 1 };
|
||||||
|
voltages = new Sensor[4];
|
||||||
|
voltages[0] = new Sensor("VCC3V", 0, SensorType.Voltage, this);
|
||||||
|
voltages[1] = new Sensor("CPU VCore", 1, SensorType.Voltage, this);
|
||||||
|
voltages[2] = new Sensor("VSB3V", 7, SensorType.Voltage, this);
|
||||||
|
voltages[3] = new Sensor("Battery", 8, SensorType.Voltage, this);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetReport() {
|
public string GetReport() {
|
||||||
@@ -121,15 +133,42 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
else
|
else
|
||||||
DeactivateSensor(sensor);
|
DeactivateSensor(sensor);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Sensor sensor in temperatures) {
|
foreach (Sensor sensor in temperatures) {
|
||||||
sbyte value = (sbyte)ReadByte((byte)(
|
switch (chip) {
|
||||||
TEMPERATURE_BASE_REG + 2 * sensor.Index));
|
case Chip.F71858: {
|
||||||
sensor.Value = value + sensor.Parameters[0].Value;
|
int tableMode = 0x3 & ReadByte((byte)(TEMPERATURE_CONFIG_REG));
|
||||||
if (value < sbyte.MaxValue && value > 0)
|
int high =
|
||||||
ActivateSensor(sensor);
|
ReadByte((byte)(TEMPERATURE_BASE_REG + 2 * sensor.Index));
|
||||||
else
|
int low =
|
||||||
DeactivateSensor(sensor);
|
ReadByte((byte)(TEMPERATURE_BASE_REG + 2 * sensor.Index + 1));
|
||||||
|
if (high != 0xbb && high != 0xcc) {
|
||||||
|
int bits = 0;
|
||||||
|
switch (tableMode) {
|
||||||
|
case 0: bits = 0; break;
|
||||||
|
case 1: bits = 0; break;
|
||||||
|
case 2: bits = (high & 0x80) << 8; break;
|
||||||
|
case 3: bits = (low & 0x01) << 15; break;
|
||||||
|
}
|
||||||
|
bits |= high << 7;
|
||||||
|
bits |= (low & 0xe0) >> 1;
|
||||||
|
short value = (short)(bits & 0xfff0);
|
||||||
|
sensor.Value = value / 128.0f;
|
||||||
|
ActivateSensor(sensor);
|
||||||
|
} else {
|
||||||
|
DeactivateSensor(sensor);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
sbyte value = (sbyte)ReadByte((byte)(
|
||||||
|
TEMPERATURE_BASE_REG + 2 * (sensor.Index + 1)));
|
||||||
|
sensor.Value = value + sensor.Parameters[0].Value;
|
||||||
|
if (value < sbyte.MaxValue && value > 0)
|
||||||
|
ActivateSensor(sensor);
|
||||||
|
else
|
||||||
|
DeactivateSensor(sensor);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Sensor sensor in fans) {
|
foreach (Sensor sensor in fans) {
|
||||||
|
@@ -137,6 +137,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
switch (id) {
|
switch (id) {
|
||||||
case 0x05:
|
case 0x05:
|
||||||
switch (revision) {
|
switch (revision) {
|
||||||
|
case 0x07:
|
||||||
|
chip = Chip.F71858;
|
||||||
|
logicalDeviceNumber = F71858_HARDWARE_MONITOR_LDN;
|
||||||
|
break;
|
||||||
case 0x41:
|
case 0x41:
|
||||||
chip = Chip.F71882;
|
chip = Chip.F71882;
|
||||||
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
|
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
|
||||||
@@ -235,9 +239,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
ushort address = ReadWord(BASE_ADDRESS_REGISTER);
|
ushort address = ReadWord(BASE_ADDRESS_REGISTER);
|
||||||
Thread.Sleep(1);
|
Thread.Sleep(1);
|
||||||
ushort verify = ReadWord(BASE_ADDRESS_REGISTER);
|
ushort verify = ReadWord(BASE_ADDRESS_REGISTER);
|
||||||
|
|
||||||
ushort vendorID = 0;
|
ushort vendorID = FINTEK_VENDOR_ID;
|
||||||
if (chip == Chip.F71862 || chip == Chip.F71882 || chip == Chip.F71889)
|
if (chip == Chip.F71858 || chip == Chip.F71862 ||
|
||||||
|
chip == Chip.F71882 || chip == Chip.F71889)
|
||||||
vendorID = ReadWord(FINTEK_VENDOR_ID_REGISTER);
|
vendorID = ReadWord(FINTEK_VENDOR_ID_REGISTER);
|
||||||
|
|
||||||
WinbondFintekExit();
|
WinbondFintekExit();
|
||||||
@@ -280,12 +285,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
if (w836XX.IsAvailable)
|
if (w836XX.IsAvailable)
|
||||||
hardware.Add(w836XX);
|
hardware.Add(w836XX);
|
||||||
break;
|
break;
|
||||||
|
case Chip.F71858:
|
||||||
case Chip.F71862:
|
case Chip.F71862:
|
||||||
case Chip.F71882:
|
case Chip.F71882:
|
||||||
case Chip.F71889:
|
case Chip.F71889:
|
||||||
if (vendorID == FINTEK_VENDOR_ID)
|
|
||||||
hardware.Add(new F718XX(chip, address));
|
|
||||||
break;
|
|
||||||
case Chip.F71869:
|
case Chip.F71869:
|
||||||
hardware.Add(new F718XX(chip, address));
|
hardware.Add(new F718XX(chip, address));
|
||||||
break;
|
break;
|
||||||
|
@@ -51,6 +51,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
|||||||
this.icon = Utilities.EmbeddedResources.GetImage("chip.png");
|
this.icon = Utilities.EmbeddedResources.GetImage("chip.png");
|
||||||
|
|
||||||
switch (chip) {
|
switch (chip) {
|
||||||
|
case Chip.F71858: name = "Fintek F71858"; break;
|
||||||
case Chip.F71862: name = "Fintek F71862"; break;
|
case Chip.F71862: name = "Fintek F71862"; break;
|
||||||
case Chip.F71869: name = "Fintek F71869"; break;
|
case Chip.F71869: name = "Fintek F71869"; break;
|
||||||
case Chip.F71882: name = "Fintek F71882"; break;
|
case Chip.F71882: name = "Fintek F71882"; break;
|
||||||
|
Reference in New Issue
Block a user