Implement changing of powertune value from the GPU change settings menu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
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();