Added support for Fintek F71862, F71869, F71889.
1.1 --- a/Hardware/LPC/Chip.cs Sun Jan 31 22:00:31 2010 +0000
1.2 +++ b/Hardware/LPC/Chip.cs Mon Feb 01 20:16:26 2010 +0000
1.3 @@ -7,12 +7,15 @@
1.4
1.5 public enum Chip : ushort {
1.6 Unknown = 0,
1.7 - IT8716F = 0x8716,
1.8 - IT8718F = 0x8718,
1.9 - IT8720F = 0x8720,
1.10 - IT8726F = 0x8726,
1.11 + IT8716 = 0x8716,
1.12 + IT8718 = 0x8718,
1.13 + IT8720 = 0x8720,
1.14 + IT8726 = 0x8726,
1.15 W83627DHG = 0xA020,
1.16 - F71882FG = 0x0541
1.17 + F71862 = 0x0601,
1.18 + F71869 = 0x0814,
1.19 + F71882 = 0x0541,
1.20 + F71889 = 0x0723
1.21 }
1.22
1.23 }
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/Hardware/LPC/F718XX.cs Mon Feb 01 20:16:26 2010 +0000
2.3 @@ -0,0 +1,199 @@
2.4 +/*
2.5 +
2.6 + Version: MPL 1.1/GPL 2.0/LGPL 2.1
2.7 +
2.8 + The contents of this file are subject to the Mozilla Public License Version
2.9 + 1.1 (the "License"); you may not use this file except in compliance with
2.10 + the License. You may obtain a copy of the License at
2.11 +
2.12 + http://www.mozilla.org/MPL/
2.13 +
2.14 + Software distributed under the License is distributed on an "AS IS" basis,
2.15 + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
2.16 + for the specific language governing rights and limitations under the License.
2.17 +
2.18 + The Original Code is the Open Hardware Monitor code.
2.19 +
2.20 + The Initial Developer of the Original Code is
2.21 + Michael Möller <m.moeller@gmx.ch>.
2.22 + Portions created by the Initial Developer are Copyright (C) 2009-2010
2.23 + the Initial Developer. All Rights Reserved.
2.24 +
2.25 + Contributor(s):
2.26 +
2.27 + Alternatively, the contents of this file may be used under the terms of
2.28 + either the GNU General Public License Version 2 or later (the "GPL"), or
2.29 + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
2.30 + in which case the provisions of the GPL or the LGPL are applicable instead
2.31 + of those above. If you wish to allow use of your version of this file only
2.32 + under the terms of either the GPL or the LGPL, and not to allow others to
2.33 + use your version of this file under the terms of the MPL, indicate your
2.34 + decision by deleting the provisions above and replace them with the notice
2.35 + and other provisions required by the GPL or the LGPL. If you do not delete
2.36 + the provisions above, a recipient may use your version of this file under
2.37 + the terms of any one of the MPL, the GPL or the LGPL.
2.38 +
2.39 +*/
2.40 +
2.41 +using System;
2.42 +using System.Collections.Generic;
2.43 +using System.Drawing;
2.44 +using System.Text;
2.45 +
2.46 +namespace OpenHardwareMonitor.Hardware.LPC {
2.47 + public class F718XX : IHardware {
2.48 +
2.49 + private string name;
2.50 + private Image icon;
2.51 +
2.52 + private Chip chip;
2.53 + private ushort address;
2.54 +
2.55 + private List<ISensor> active = new List<ISensor>();
2.56 +
2.57 + private Sensor[] temperatures;
2.58 + private Sensor[] fans;
2.59 + private Sensor[] voltages;
2.60 + private float[] voltageGains;
2.61 +
2.62 + // Hardware Monitor
2.63 + private const byte ADDRESS_REGISTER_OFFSET = 0x05;
2.64 + private const byte DATA_REGISTER_OFFSET = 0x06;
2.65 +
2.66 + // Hardware Monitor Registers
2.67 + private const byte VOLTAGE_BASE_REG = 0x20;
2.68 + private const byte TEMPERATURE_BASE_REG = 0x72;
2.69 + private byte[] FAN_TACHOMETER_REG = new byte[] { 0xA0, 0xB0, 0xC0, 0xD0 };
2.70 +
2.71 + private byte ReadByte(byte register) {
2.72 + WinRing0.WriteIoPortByte(
2.73 + (ushort)(address + ADDRESS_REGISTER_OFFSET), register);
2.74 + return WinRing0.ReadIoPortByte((ushort)(address + DATA_REGISTER_OFFSET));
2.75 + }
2.76 +
2.77 + public F718XX(Chip chip, ushort address) {
2.78 + this.chip = chip;
2.79 + this.address = address;
2.80 +
2.81 + switch (chip) {
2.82 + case Chip.F71862: name = "Fintek F71862"; break;
2.83 + case Chip.F71869: name = "Fintek F71869"; break;
2.84 + case Chip.F71882: name = "Fintek F71882"; break;
2.85 + case Chip.F71889: name = "Fintek F71889"; break;
2.86 + default: return;
2.87 + }
2.88 +
2.89 + temperatures = new Sensor[3];
2.90 + for (int i = 0; i < temperatures.Length; i++)
2.91 + temperatures[i] = new Sensor("Temperature #" + (i + 1), i,
2.92 + SensorType.Temperature, this);
2.93 +
2.94 + fans = new Sensor[4];
2.95 + for (int i = 0; i < fans.Length; i++)
2.96 + fans[i] = new Sensor("Fan #" + (i + 1), i, SensorType.Fan, this);
2.97 +
2.98 + voltageGains = new float[] { 1, 0.5f, 1, 1, 1, 1, 1, 1, 1 };
2.99 + voltages = new Sensor[4];
2.100 + voltages[0] = new Sensor("VCC3V", 0, SensorType.Voltage, this);
2.101 + voltages[1] = new Sensor("CPU VCore", 1, SensorType.Voltage, this);
2.102 + voltages[2] = new Sensor("VSB3V", 7, SensorType.Voltage, this);
2.103 + voltages[3] = new Sensor("Battery", 8, SensorType.Voltage, this);
2.104 +
2.105 + this.icon = Utilities.EmbeddedResources.GetImage("chip.png");
2.106 + }
2.107 +
2.108 + public string Name {
2.109 + get { return name; }
2.110 + }
2.111 +
2.112 + public string Identifier {
2.113 + get { return "/lpc/f71882fg"; }
2.114 + }
2.115 +
2.116 + public Image Icon {
2.117 + get { return icon; }
2.118 + }
2.119 +
2.120 + public ISensor[] Sensors {
2.121 + get { return active.ToArray(); }
2.122 + }
2.123 +
2.124 + public string GetReport() {
2.125 + StringBuilder r = new StringBuilder();
2.126 +
2.127 + r.AppendLine("LPC F718XX");
2.128 + r.AppendLine();
2.129 + r.Append("Base Adress: 0x"); r.AppendLine(address.ToString("X4"));
2.130 + r.AppendLine();
2.131 + r.AppendLine("Hardware Monitor Registers");
2.132 + r.AppendLine();
2.133 +
2.134 + r.AppendLine(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
2.135 + r.AppendLine();
2.136 + for (int i = 0; i <= 0xF; i++) {
2.137 + r.Append(" "); r.Append((i << 4).ToString("X2")); r.Append(" ");
2.138 + for (int j = 0; j <= 0xF; j++) {
2.139 + r.Append(" ");
2.140 + r.Append(ReadByte((byte)((i << 4) | j)).ToString("X2"));
2.141 + }
2.142 + r.AppendLine();
2.143 + }
2.144 + r.AppendLine();
2.145 + return r.ToString();
2.146 + }
2.147 +
2.148 + public void Update() {
2.149 +
2.150 + foreach (Sensor sensor in voltages) {
2.151 + int value = ReadByte((byte)(VOLTAGE_BASE_REG + sensor.Index));
2.152 + sensor.Value = voltageGains[sensor.Index] * 0.001f * (value << 4);
2.153 + if (sensor.Value > 0)
2.154 + ActivateSensor(sensor);
2.155 + else
2.156 + DeactivateSensor(sensor);
2.157 + }
2.158 +
2.159 + foreach (Sensor sensor in temperatures) {
2.160 + sbyte value = (sbyte)ReadByte((byte)(
2.161 + TEMPERATURE_BASE_REG + 2 * sensor.Index));
2.162 + sensor.Value = value;
2.163 + if (value < sbyte.MaxValue && value > 0)
2.164 + ActivateSensor(sensor);
2.165 + else
2.166 + DeactivateSensor(sensor);
2.167 + }
2.168 +
2.169 + foreach (Sensor sensor in fans) {
2.170 + int value = ReadByte(FAN_TACHOMETER_REG[sensor.Index]) << 8;
2.171 + value |= ReadByte((byte)(FAN_TACHOMETER_REG[sensor.Index] + 1));
2.172 +
2.173 + if (value > 0) {
2.174 + sensor.Value = (value < 0x0fff) ? 1.5e6f / value : 0;
2.175 + ActivateSensor(sensor);
2.176 + } else {
2.177 + DeactivateSensor(sensor);
2.178 + }
2.179 + }
2.180 + }
2.181 +
2.182 + private void ActivateSensor(Sensor sensor) {
2.183 + if (!active.Contains(sensor)) {
2.184 + active.Add(sensor);
2.185 + if (SensorAdded != null)
2.186 + SensorAdded(sensor);
2.187 + }
2.188 + }
2.189 +
2.190 + private void DeactivateSensor(Sensor sensor) {
2.191 + if (active.Contains(sensor)) {
2.192 + active.Remove(sensor);
2.193 + if (SensorRemoved != null)
2.194 + SensorRemoved(sensor);
2.195 + }
2.196 + }
2.197 +
2.198 + public event SensorEventHandler SensorAdded;
2.199 + public event SensorEventHandler SensorRemoved;
2.200 +
2.201 + }
2.202 +}
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/Hardware/LPC/IT87XX.cs Mon Feb 01 20:16:26 2010 +0000
3.3 @@ -0,0 +1,225 @@
3.4 +/*
3.5 +
3.6 + Version: MPL 1.1/GPL 2.0/LGPL 2.1
3.7 +
3.8 + The contents of this file are subject to the Mozilla Public License Version
3.9 + 1.1 (the "License"); you may not use this file except in compliance with
3.10 + the License. You may obtain a copy of the License at
3.11 +
3.12 + http://www.mozilla.org/MPL/
3.13 +
3.14 + Software distributed under the License is distributed on an "AS IS" basis,
3.15 + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
3.16 + for the specific language governing rights and limitations under the License.
3.17 +
3.18 + The Original Code is the Open Hardware Monitor code.
3.19 +
3.20 + The Initial Developer of the Original Code is
3.21 + Michael Möller <m.moeller@gmx.ch>.
3.22 + Portions created by the Initial Developer are Copyright (C) 2009-2010
3.23 + the Initial Developer. All Rights Reserved.
3.24 +
3.25 + Contributor(s):
3.26 +
3.27 + Alternatively, the contents of this file may be used under the terms of
3.28 + either the GNU General Public License Version 2 or later (the "GPL"), or
3.29 + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
3.30 + in which case the provisions of the GPL or the LGPL are applicable instead
3.31 + of those above. If you wish to allow use of your version of this file only
3.32 + under the terms of either the GPL or the LGPL, and not to allow others to
3.33 + use your version of this file under the terms of the MPL, indicate your
3.34 + decision by deleting the provisions above and replace them with the notice
3.35 + and other provisions required by the GPL or the LGPL. If you do not delete
3.36 + the provisions above, a recipient may use your version of this file under
3.37 + the terms of any one of the MPL, the GPL or the LGPL.
3.38 +
3.39 +*/
3.40 +
3.41 +using System;
3.42 +using System.Collections.Generic;
3.43 +using System.Drawing;
3.44 +using System.Text;
3.45 +
3.46 +namespace OpenHardwareMonitor.Hardware.LPC {
3.47 + public class IT87XX : IHardware {
3.48 +
3.49 + private string name;
3.50 + private Image icon;
3.51 +
3.52 + private bool available = false;
3.53 + private Chip chip;
3.54 + private ushort address;
3.55 +
3.56 + private Sensor[] temperatures;
3.57 + private Sensor[] fans;
3.58 + private Sensor[] voltages;
3.59 + private List<ISensor> active = new List<ISensor>();
3.60 + private float[] voltageGains;
3.61 +
3.62 + // Consts
3.63 + private const byte ITE_VENDOR_ID = 0x90;
3.64 +
3.65 + // Environment Controller
3.66 + private const byte ADDRESS_REGISTER_OFFSET = 0x05;
3.67 + private const byte DATA_REGISTER_OFFSET = 0x06;
3.68 +
3.69 + // Environment Controller Registers
3.70 + private const byte CONFIGURATION_REGISTER = 0x00;
3.71 + private const byte TEMPERATURE_BASE_REG = 0x29;
3.72 + private const byte VENDOR_ID_REGISTER = 0x58;
3.73 + private const byte FAN_TACHOMETER_16_BIT_ENABLE_REGISTER = 0x0c;
3.74 + private byte[] FAN_TACHOMETER_REG =
3.75 + new byte[] { 0x0d, 0x0e, 0x0f, 0x80, 0x82 };
3.76 + private byte[] FAN_TACHOMETER_EXT_REG =
3.77 + new byte[] { 0x18, 0x19, 0x1a, 0x81, 0x83 };
3.78 + private const byte VOLTAGE_BASE_REG = 0x20;
3.79 +
3.80 + private byte ReadByte(byte register) {
3.81 + WinRing0.WriteIoPortByte(
3.82 + (ushort)(address + ADDRESS_REGISTER_OFFSET), register);
3.83 + return WinRing0.ReadIoPortByte((ushort)(address + DATA_REGISTER_OFFSET));
3.84 + }
3.85 +
3.86 + public IT87XX(Chip chip, ushort address) {
3.87 +
3.88 + this.chip = chip;
3.89 + this.address = address;
3.90 +
3.91 + switch (chip) {
3.92 + case Chip.IT8716: name = "ITE IT8716"; break;
3.93 + case Chip.IT8718: name = "ITE IT8718"; break;
3.94 + case Chip.IT8720: name = "ITE IT8720"; break;
3.95 + case Chip.IT8726: name = "ITE IT8726"; break;
3.96 + default: return;
3.97 + }
3.98 +
3.99 + // Check vendor id
3.100 + byte vendorId = ReadByte(VENDOR_ID_REGISTER);
3.101 + if (vendorId != ITE_VENDOR_ID)
3.102 + return;
3.103 +
3.104 + // Bit 0x10 of the configuration register should always be 1
3.105 + if ((ReadByte(CONFIGURATION_REGISTER) & 0x10) == 0)
3.106 + return;
3.107 +
3.108 + temperatures = new Sensor[3];
3.109 + for (int i = 0; i < temperatures.Length; i++)
3.110 + temperatures[i] = new Sensor("Temperature #" + (i + 1), i,
3.111 + SensorType.Temperature, this);
3.112 +
3.113 + fans = new Sensor[5];
3.114 + for (int i = 0; i < fans.Length; i++)
3.115 + fans[i] = new Sensor("Fan #" + (i + 1), i, SensorType.Fan, this);
3.116 +
3.117 + voltageGains = new float[] {
3.118 + 1, 1, 1, (6.8f / 10 + 1), 1, 1, 1, 1, 1 };
3.119 +
3.120 + voltages = new Sensor[2];
3.121 + voltages[0] = new Sensor("CPU VCore", 0, SensorType.Voltage, this);
3.122 + voltages[1] = new Sensor("Battery", 8, SensorType.Voltage, this);
3.123 +
3.124 + available = true;
3.125 + icon = Utilities.EmbeddedResources.GetImage("chip.png");
3.126 + }
3.127 +
3.128 + public bool IsAvailable {
3.129 + get { return available; }
3.130 + }
3.131 +
3.132 + public string Name {
3.133 + get { return name; }
3.134 + }
3.135 +
3.136 + public string Identifier {
3.137 + get { return "/lpc/it87"; }
3.138 + }
3.139 +
3.140 + public Image Icon {
3.141 + get { return icon; }
3.142 + }
3.143 +
3.144 + public ISensor[] Sensors {
3.145 + get { return active.ToArray(); }
3.146 + }
3.147 +
3.148 + public string GetReport() {
3.149 + StringBuilder r = new StringBuilder();
3.150 +
3.151 + r.AppendLine("LPC IT87XX");
3.152 + r.AppendLine();
3.153 + r.Append("Chip ID: 0x"); r.AppendLine(chip.ToString("X"));
3.154 + r.Append("Chip Name: "); r.AppendLine(name);
3.155 + r.Append("Base Address: 0x"); r.AppendLine(address.ToString("X4"));
3.156 + r.AppendLine();
3.157 + r.AppendLine("Environment Controller Registers");
3.158 + r.AppendLine();
3.159 +
3.160 + r.AppendLine(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
3.161 + r.AppendLine();
3.162 + for (int i = 0; i <= 0xA; i++) {
3.163 + r.Append(" "); r.Append((i << 4).ToString("X2")); r.Append(" ");
3.164 + for (int j = 0; j <= 0xF; j++) {
3.165 + r.Append(" ");
3.166 + r.Append(ReadByte((byte)((i << 4) | j)).ToString("X2"));
3.167 + }
3.168 + r.AppendLine();
3.169 + }
3.170 + r.AppendLine();
3.171 +
3.172 + return r.ToString();
3.173 + }
3.174 +
3.175 + public void Update() {
3.176 +
3.177 + foreach (Sensor sensor in voltages) {
3.178 + int value = ReadByte((byte)(VOLTAGE_BASE_REG + sensor.Index));
3.179 + sensor.Value = voltageGains[sensor.Index] * 0.001f * (value << 4);
3.180 + if (sensor.Value > 0)
3.181 + ActivateSensor(sensor);
3.182 + else
3.183 + DeactivateSensor(sensor);
3.184 + }
3.185 +
3.186 + foreach (Sensor sensor in temperatures) {
3.187 + sbyte value = (sbyte)ReadByte((byte)(TEMPERATURE_BASE_REG + sensor.Index));
3.188 + sensor.Value = value;
3.189 + if (value < sbyte.MaxValue && value > 0)
3.190 + ActivateSensor(sensor);
3.191 + else
3.192 + DeactivateSensor(sensor);
3.193 + }
3.194 +
3.195 + foreach (Sensor sensor in fans) {
3.196 + int value = ReadByte(FAN_TACHOMETER_REG[sensor.Index]);
3.197 + value |= ReadByte(FAN_TACHOMETER_EXT_REG[sensor.Index]) << 8;
3.198 +
3.199 + if (value > 0) {
3.200 + sensor.Value = (value < 0xffff) ? 1.35e6f / ((value) * 2) : 0;
3.201 + ActivateSensor(sensor);
3.202 + } else {
3.203 + DeactivateSensor(sensor);
3.204 + }
3.205 + }
3.206 + }
3.207 +
3.208 + private void ActivateSensor(Sensor sensor) {
3.209 + if (!active.Contains(sensor)) {
3.210 + active.Add(sensor);
3.211 + if (SensorAdded != null)
3.212 + SensorAdded(sensor);
3.213 + }
3.214 + }
3.215 +
3.216 + private void DeactivateSensor(Sensor sensor) {
3.217 + if (active.Contains(sensor)) {
3.218 + active.Remove(sensor);
3.219 + if (SensorRemoved != null)
3.220 + SensorRemoved(sensor);
3.221 + }
3.222 + }
3.223 +
3.224 + public event SensorEventHandler SensorAdded;
3.225 + public event SensorEventHandler SensorRemoved;
3.226 +
3.227 + }
3.228 +}
4.1 --- a/Hardware/LPC/LPCGroup.cs Sun Jan 31 22:00:31 2010 +0000
4.2 +++ b/Hardware/LPC/LPCGroup.cs Mon Feb 01 20:16:26 2010 +0000
4.3 @@ -75,12 +75,6 @@
4.4 WinRing0.WriteIoPortByte(valuePort, logicalDeviceNumber);
4.5 }
4.6
4.7 - // IT87
4.8 - private const ushort IT8716F_CHIP_ID = 0x8716;
4.9 - private const ushort IT8718F_CHIP_ID = 0x8718;
4.10 - private const ushort IT8720F_CHIP_ID = 0x8720;
4.11 - private const ushort IT8726F_CHIP_ID = 0x8726;
4.12 -
4.13 private const byte IT87_ENVIRONMENT_CONTROLLER_LDN = 0x04;
4.14
4.15 private void IT87Enter() {
4.16 @@ -100,7 +94,9 @@
4.17 private const ushort FINTEK_VENDOR_ID = 0x1934;
4.18
4.19 private const byte W83627DHG_HARDWARE_MONITOR_LDN = 0x0B;
4.20 - private const byte F71882FG_HARDWARE_MONITOR_LDN = 0x04;
4.21 +
4.22 + private const byte F71858_HARDWARE_MONITOR_LDN = 0x02;
4.23 + private const byte FINTEK_HARDWARE_MONITOR_LDN = 0x04;
4.24
4.25 private void WinbondFintekEnter() {
4.26 WinRing0.WriteIoPortByte(registerPort, 0x87);
4.27 @@ -121,46 +117,79 @@
4.28
4.29 WinbondFintekEnter();
4.30
4.31 - byte hardwareMonitorLDN;
4.32 + byte logicalDeviceNumber;
4.33 byte id = ReadByte(CHIP_ID_REGISTER);
4.34 byte revision = ReadByte(CHIP_REVISION_REGISTER);
4.35 switch (id) {
4.36 + case 0x05:
4.37 + switch (revision) {
4.38 + case 0x41:
4.39 + chip = Chip.F71882;
4.40 + logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
4.41 + break;
4.42 + default:
4.43 + chip = Chip.Unknown;
4.44 + logicalDeviceNumber = 0;
4.45 + break;
4.46 + } break;
4.47 + case 0x06:
4.48 + switch (revision) {
4.49 + case 0x01:
4.50 + chip = Chip.F71862;
4.51 + logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
4.52 + break;
4.53 + default:
4.54 + chip = Chip.Unknown;
4.55 + logicalDeviceNumber = 0;
4.56 + break;
4.57 + } break;
4.58 + case 0x07:
4.59 + switch (revision) {
4.60 + case 0x23:
4.61 + chip = Chip.F71889;
4.62 + logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
4.63 + break;
4.64 + default:
4.65 + chip = Chip.Unknown;
4.66 + logicalDeviceNumber = 0;
4.67 + break;
4.68 + } break;
4.69 + case 0x08:
4.70 + switch (revision) {
4.71 + case 0x14:
4.72 + chip = Chip.F71869;
4.73 + logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
4.74 + break;
4.75 + default:
4.76 + chip = Chip.Unknown;
4.77 + logicalDeviceNumber = 0;
4.78 + break;
4.79 + } break;
4.80 case 0xA0:
4.81 switch (revision & 0xF0) {
4.82 case 0x20:
4.83 chip = Chip.W83627DHG;
4.84 - hardwareMonitorLDN = W83627DHG_HARDWARE_MONITOR_LDN;
4.85 + logicalDeviceNumber = W83627DHG_HARDWARE_MONITOR_LDN;
4.86 break;
4.87 default:
4.88 chip = Chip.Unknown;
4.89 - hardwareMonitorLDN = 0;
4.90 + logicalDeviceNumber = 0;
4.91 break;
4.92 - } break;
4.93 - case 0x05:
4.94 - switch (revision) {
4.95 - case 0x41:
4.96 - chip = Chip.F71882FG;
4.97 - hardwareMonitorLDN = F71882FG_HARDWARE_MONITOR_LDN;
4.98 - break;
4.99 - default:
4.100 - chip = Chip.Unknown;
4.101 - hardwareMonitorLDN = 0;
4.102 - break;
4.103 - } break;
4.104 + } break;
4.105 default:
4.106 chip = Chip.Unknown;
4.107 - hardwareMonitorLDN = 0;
4.108 + logicalDeviceNumber = 0;
4.109 break;
4.110 }
4.111 if (chip != Chip.Unknown) {
4.112
4.113 - Select(hardwareMonitorLDN);
4.114 + Select(logicalDeviceNumber);
4.115 ushort address = ReadWord(BASE_ADDRESS_REGISTER);
4.116 Thread.Sleep(1);
4.117 ushort verify = ReadWord(BASE_ADDRESS_REGISTER);
4.118
4.119 ushort vendorID = 0;
4.120 - if (chip == Chip.F71882FG)
4.121 + if (chip == Chip.F71862 || chip == Chip.F71882 || chip == Chip.F71889)
4.122 vendorID = ReadWord(FINTEK_VENDOR_ID_REGISTER);
4.123
4.124 WinbondFintekExit();
4.125 @@ -174,9 +203,14 @@
4.126 if (w83627dhg.IsAvailable)
4.127 hardware.Add(w83627dhg);
4.128 break;
4.129 - case Chip.F71882FG:
4.130 + case Chip.F71862:
4.131 + case Chip.F71882:
4.132 + case Chip.F71889:
4.133 if (vendorID == FINTEK_VENDOR_ID)
4.134 - hardware.Add(new F71882(address));
4.135 + hardware.Add(new F718XX(chip, address));
4.136 + break;
4.137 + case Chip.F71869:
4.138 + hardware.Add(new F718XX(chip, address));
4.139 break;
4.140 default: break;
4.141 }
4.142 @@ -187,10 +221,10 @@
4.143 IT87Enter();
4.144
4.145 switch (ReadWord(CHIP_ID_REGISTER)) {
4.146 - case 0x8716: chip = Chip.IT8716F; break;
4.147 - case 0x8718: chip = Chip.IT8718F; break;
4.148 - case 0x8720: chip = Chip.IT8720F; break;
4.149 - case 0x8726: chip = Chip.IT8726F; break;
4.150 + case 0x8716: chip = Chip.IT8716; break;
4.151 + case 0x8718: chip = Chip.IT8718; break;
4.152 + case 0x8720: chip = Chip.IT8720; break;
4.153 + case 0x8726: chip = Chip.IT8726; break;
4.154 default: chip = Chip.Unknown; break;
4.155 }
4.156
4.157 @@ -205,7 +239,7 @@
4.158 if (address != verify || address == 0 || (address & 0xF007) != 0)
4.159 return;
4.160
4.161 - IT87 it87 = new IT87(chip, address);
4.162 + IT87XX it87 = new IT87XX(chip, address);
4.163 if (it87.IsAvailable)
4.164 hardware.Add(it87);
4.165
5.1 --- a/OpenHardwareMonitor.csproj Sun Jan 31 22:00:31 2010 +0000
5.2 +++ b/OpenHardwareMonitor.csproj Mon Feb 01 20:16:26 2010 +0000
5.3 @@ -63,7 +63,7 @@
5.4 <Compile Include="Hardware\HDD\HDDGroup.cs" />
5.5 <Compile Include="Hardware\HDD\SMART.cs" />
5.6 <Compile Include="Hardware\LPC\Chip.cs" />
5.7 - <Compile Include="Hardware\LPC\F71882.cs" />
5.8 + <Compile Include="Hardware\LPC\F718XX.cs" />
5.9 <Compile Include="Hardware\SMBIOS\SMBIOSGroup.cs" />
5.10 <Compile Include="Hardware\LPC\W83627DHG.cs" />
5.11 <Compile Include="Hardware\ReportWriter.cs" />
5.12 @@ -84,7 +84,7 @@
5.13 <Compile Include="Hardware\IGroup.cs" />
5.14 <Compile Include="Hardware\IHardware.cs" />
5.15 <Compile Include="Hardware\ISensor.cs" />
5.16 - <Compile Include="Hardware\LPC\IT87.cs" />
5.17 + <Compile Include="Hardware\LPC\IT87XX.cs" />
5.18 <Compile Include="Hardware\LPC\LPCGroup.cs" />
5.19 <Compile Include="GUI\MainForm.cs">
5.20 <SubType>Form</SubType>