Commit 7711c6fbd588197864bbd376fc0f699db7ea7b90

Con Kolivas 2011-09-04T23:10:57

Implement changing of powertune value from the GPU change settings menu.

diff --git a/adl.c b/adl.c
index 6ee5ceb..84d6ea8 100644
--- a/adl.c
+++ b/adl.c
@@ -686,6 +686,26 @@ static int set_fanspeed(int gpu, int iFanSpeed)
 	return 0;
 }
 
+static int set_powertune(int gpu, int iPercentage)
+{
+	int oldPercentage, dummy;
+	struct gpu_adl *ga;
+
+	if (!gpus[gpu].has_adl || !adl_active) {
+		wlogprint("Set powertune not supported\n");
+		return 1;
+	}
+
+	ga = &gpus[gpu].adl;
+	oldPercentage = ga->iPercentage;
+	if (ADL_Overdrive5_PowerControl_Set(ga->iAdapterIndex, iPercentage) != ADL_OK) {
+		ADL_Overdrive5_PowerControl_Set(ga->iAdapterIndex, ga->iPercentage);
+		return 1;
+	}
+	ADL_Overdrive5_PowerControl_Get(ga->iAdapterIndex, &ga->iPercentage, &dummy);
+	return 0;
+}
+
 void gpu_autotune(int gpu)
 {
 	int temp, fanpercent, engine, newpercent, newengine;
@@ -834,7 +854,7 @@ void change_gpusettings(int gpu)
 		temp, fanpercent, fanspeed, engineclock, memclock, vddc, activity, powertune);
 	wlogprint("Fan autotune is %s\n", ga->autofan ? "enabled" : "disabled");
 	wlogprint("GPU engine clock autotune is %s\n", ga->autoengine ? "enabled" : "disabled");
-	wlogprint("Change [A]utomatic [E]ngine [F]an [M]emory [V]oltage\n");
+	wlogprint("Change [A]utomatic [E]ngine [F]an [M]emory [V]oltage [P]owertune\n");
 	wlogprint("Or press any other key to continue\n");
 	input = getch();
 
@@ -896,6 +916,18 @@ void change_gpusettings(int gpu)
 			wlogprint("Successfully modified voltage\n");
 		else
 			wlogprint("Failed to modify voltage\n");
+	} else if (!strncasecmp(&input, "p", 1)) {
+		val = curses_int("Enter powertune value (-20 - 20)");
+		if (val < -20 || val > 20) {
+			wlogprint("Value is outside safe range, are you sure?\n");
+			input = getch();
+			if (strncasecmp(&input, "y", 1))
+				return;
+		}
+		if (!set_powertune(gpu, val))
+			wlogprint("Successfully modified powertune value\n");
+		else
+			wlogprint("Failed to modify powertune value\n");
 	}
 	wlogprint("Press any key to continue\n");
 	input = getch();