mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-08-31 22:35:11 +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,
|
||||
W83667HGB = 0xB350,
|
||||
W83687THF = 0x8541,
|
||||
F71858 = 0x0507,
|
||||
F71862 = 0x0601,
|
||||
F71869 = 0x0814,
|
||||
F71882 = 0x0541,
|
||||
|
@@ -56,7 +56,8 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
|
||||
// Hardware Monitor Registers
|
||||
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 ReadByte(byte register) {
|
||||
@@ -75,16 +76,27 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
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++)
|
||||
fans[i] = new Sensor("Fan #" + (i + 1), i, SensorType.Fan, this);
|
||||
|
||||
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);
|
||||
switch (chip) {
|
||||
case Chip.F71858:
|
||||
voltageGains = new float[] { 1, 1, 1 };
|
||||
voltages = new Sensor[3];
|
||||
voltages[0] = new Sensor("VCC3V", 0, 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() {
|
||||
@@ -123,13 +135,40 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
}
|
||||
|
||||
foreach (Sensor sensor in temperatures) {
|
||||
sbyte value = (sbyte)ReadByte((byte)(
|
||||
TEMPERATURE_BASE_REG + 2 * sensor.Index));
|
||||
sensor.Value = value + sensor.Parameters[0].Value;
|
||||
if (value < sbyte.MaxValue && value > 0)
|
||||
ActivateSensor(sensor);
|
||||
else
|
||||
DeactivateSensor(sensor);
|
||||
switch (chip) {
|
||||
case Chip.F71858: {
|
||||
int tableMode = 0x3 & ReadByte((byte)(TEMPERATURE_CONFIG_REG));
|
||||
int high =
|
||||
ReadByte((byte)(TEMPERATURE_BASE_REG + 2 * sensor.Index));
|
||||
int low =
|
||||
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) {
|
||||
|
@@ -137,6 +137,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
switch (id) {
|
||||
case 0x05:
|
||||
switch (revision) {
|
||||
case 0x07:
|
||||
chip = Chip.F71858;
|
||||
logicalDeviceNumber = F71858_HARDWARE_MONITOR_LDN;
|
||||
break;
|
||||
case 0x41:
|
||||
chip = Chip.F71882;
|
||||
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
|
||||
@@ -236,8 +240,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
Thread.Sleep(1);
|
||||
ushort verify = ReadWord(BASE_ADDRESS_REGISTER);
|
||||
|
||||
ushort vendorID = 0;
|
||||
if (chip == Chip.F71862 || chip == Chip.F71882 || chip == Chip.F71889)
|
||||
ushort vendorID = FINTEK_VENDOR_ID;
|
||||
if (chip == Chip.F71858 || chip == Chip.F71862 ||
|
||||
chip == Chip.F71882 || chip == Chip.F71889)
|
||||
vendorID = ReadWord(FINTEK_VENDOR_ID_REGISTER);
|
||||
|
||||
WinbondFintekExit();
|
||||
@@ -280,12 +285,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
if (w836XX.IsAvailable)
|
||||
hardware.Add(w836XX);
|
||||
break;
|
||||
case Chip.F71858:
|
||||
case Chip.F71862:
|
||||
case Chip.F71882:
|
||||
case Chip.F71889:
|
||||
if (vendorID == FINTEK_VENDOR_ID)
|
||||
hardware.Add(new F718XX(chip, address));
|
||||
break;
|
||||
case Chip.F71869:
|
||||
hardware.Add(new F718XX(chip, address));
|
||||
break;
|
||||
|
@@ -51,6 +51,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
|
||||
this.icon = Utilities.EmbeddedResources.GetImage("chip.png");
|
||||
|
||||
switch (chip) {
|
||||
case Chip.F71858: name = "Fintek F71858"; break;
|
||||
case Chip.F71862: name = "Fintek F71862"; break;
|
||||
case Chip.F71869: name = "Fintek F71869"; break;
|
||||
case Chip.F71882: name = "Fintek F71882"; break;
|
||||
|
Reference in New Issue
Block a user