Added support for Fintek F71858 chips. Corrected the number of fans for Fintek.

This commit is contained in:
Michael Möller
2010-03-02 20:32:24 +00:00
parent b839e338d6
commit 97dcca5177
4 changed files with 66 additions and 22 deletions

View File

@@ -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,

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;