1.1 --- a/Hardware/ATI/ATIGPU.cs Thu Jan 20 21:31:54 2011 +0000
1.2 +++ b/Hardware/ATI/ATIGPU.cs Thu Jan 20 21:48:26 2011 +0000
1.3 @@ -54,7 +54,8 @@
1.4 private readonly Sensor controlSensor;
1.5 private readonly Control fanControl;
1.6
1.7 - private ADLFanSpeedValue initialFanSpeedValue;
1.8 + private bool restoreDefaultFanSpeedRequired = false;
1.9 + private ADLFanSpeedValue initialFanSpeedValue;
1.10
1.11 public ATIGPU(string name, int adapterIndex, int busNumber,
1.12 int deviceNumber, ISettings settings)
1.13 @@ -64,12 +65,6 @@
1.14 this.busNumber = busNumber;
1.15 this.deviceNumber = deviceNumber;
1.16
1.17 - this.initialFanSpeedValue = new ADLFanSpeedValue();
1.18 - this.initialFanSpeedValue.SpeedType =
1.19 - ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
1.20 - ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0,
1.21 - ref this.initialFanSpeedValue);
1.22 -
1.23 this.temperature = new Sensor("GPU Core", 0, SensorType.Temperature, this, settings);
1.24 this.fan = new Sensor("GPU Fan", 0, SensorType.Fan, this, settings);
1.25 this.coreClock = new Sensor("GPU Core", 0, SensorType.Clock, this, settings);
1.26 @@ -96,8 +91,28 @@
1.27 Update();
1.28 }
1.29
1.30 + private void SaveDefaultFanSpeed() {
1.31 + if (!restoreDefaultFanSpeedRequired) {
1.32 + initialFanSpeedValue = new ADLFanSpeedValue();
1.33 + initialFanSpeedValue.SpeedType =
1.34 + ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
1.35 + restoreDefaultFanSpeedRequired =
1.36 + ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0,
1.37 + ref initialFanSpeedValue) == ADL.ADL_OK;
1.38 + }
1.39 + }
1.40 +
1.41 + private void RestoreDefaultFanSpeed() {
1.42 + if (restoreDefaultFanSpeedRequired) {
1.43 + ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
1.44 + ref this.initialFanSpeedValue);
1.45 + restoreDefaultFanSpeedRequired = false;
1.46 + }
1.47 + }
1.48 +
1.49 private void SoftwareControlValueChanged(IControl control) {
1.50 if (control.ControlMode == ControlMode.Software) {
1.51 + SaveDefaultFanSpeed();
1.52 ADLFanSpeedValue adlf = new ADLFanSpeedValue();
1.53 adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
1.54 adlf.Flags = ADL.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED;
1.55 @@ -108,14 +123,9 @@
1.56
1.57 private void ControlModeChanged(IControl control) {
1.58 if (control.ControlMode == ControlMode.Default) {
1.59 - ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
1.60 - ref this.initialFanSpeedValue);
1.61 + RestoreDefaultFanSpeed();
1.62 } else {
1.63 - ADLFanSpeedValue adlf = new ADLFanSpeedValue();
1.64 - adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
1.65 - adlf.Flags = ADL.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED;
1.66 - adlf.FanSpeed = (int)control.SoftwareValue;
1.67 - ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0, ref adlf);
1.68 + SoftwareControlValueChanged(control);
1.69 }
1.70 }
1.71
1.72 @@ -204,8 +214,7 @@
1.73 this.fanControl.SoftwareControlValueChanged -=
1.74 SoftwareControlValueChanged;
1.75
1.76 - ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
1.77 - ref this.initialFanSpeedValue);
1.78 + RestoreDefaultFanSpeed();
1.79 }
1.80 }
1.81 }