Last active
July 26, 2023 09:02
-
-
Save GloriousEggroll/774a4316e9794d09dfaeb5f51ac9afbb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -eu | |
if [[ $EUID -ne 0 ]]; | |
then | |
exec pkexec --disable-internal-agent "$0" "$@" | |
fi | |
WRITE_PATH="$1" | |
WRITE_VALUE="$2" | |
DECK="" | |
ZSERIES="" | |
#HXSERIES6="" | |
#HSERIES6="" | |
#HSSERIES6="" | |
USERIES6="" | |
#HXSERIES7="" | |
#HSERIES7="" | |
#HSSERIES7="" | |
USERIES7="" | |
USERIES7LP="" | |
# 15w Steam Deck | |
if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Custom' | grep '0405 ') ]]; then | |
DECK=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Custom' | grep '0405 ') | |
fi | |
# 9-30w Z series | |
if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'Z1 ') ]]; then | |
ZSERIES=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'Z1 ') | |
fi | |
# 6000 series 45w HX | |
#if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'HX ') ]]; then | |
# HXSERIES6=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'HX ') | |
#fi | |
# 6000 series 45w H | |
#if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'H ') ]]; then | |
# HSERIES6=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'H ') | |
#fi | |
# 6000 series 35w HS | |
#if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'HS ') ]]; then | |
# HSSERIES6=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'HS ') | |
#fi | |
# 6000 series 15-30w U -- controlled by temperature | |
if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'U ') ]]; then | |
USERIES6=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 6' | grep -v '6 ' | grep 'U ') | |
fi | |
# 7000 series 55-75w HX | |
#if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'HX ') ]]; then | |
# HXSERIES7=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'HX ') | |
#fi | |
# 7000 series 35-54w H | |
#if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'H ') ]]; then | |
# HSERIES7=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'H ') | |
#fi | |
# 7000 series 35-54w HS | |
#if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'HS ') ]]; then | |
# HSSERIES7=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'HS ') | |
#fi | |
# 7000 series 15-30w U -- controlled by temperature | |
if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'U ' | grep -v 'PRO' | grep -v '7520' | grep -v '7320') ]]; then | |
USERIES7=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'U ') | |
fi | |
# 7000 series 15w PRO/7520/7320 U | |
if [[ -n $(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'U ') ]]; then | |
USERIES7LP=$(lscpu | grep 'Model name' | grep -v 'BIOS' | grep 'AMD Ryzen' | grep ' 7' | grep -v '7 ' | grep 'U ') | |
fi | |
# TODO - add gpu detection entries for: | |
# 780M | |
# 760M | |
# 740M | |
# 680M | |
# 660M | |
# 610M | |
# Vega (PRO only) | |
function CommitWrite() | |
{ | |
echo "commit: $WRITE_VALUE -> $WRITE_PATH" | systemd-cat -t p-steamos-priv-write -p warning | |
echo "$WRITE_VALUE" > "$WRITE_PATH" | |
chmod a+w "$WRITE_PATH" | |
exit 0 | |
} | |
function DeclineWrite() | |
{ | |
echo "decline: $WRITE_VALUE -> $WRITE_PATH" | systemd-cat -t p-steamos-priv-write -p err | |
echo "$WRITE_VALUE" > "$WRITE_PATH" | |
exit 1 | |
} | |
if [[ "$WRITE_PATH" == /sys/class/backlight/*/brightness ]]; then | |
CommitWrite | |
fi | |
if [[ "$WRITE_PATH" == /sys/class/drm/card*/device/power_dpm_force_performance_level ]]; then | |
# if device does not have a battery don't apply any power changes | |
if [[ -z $(upower -i "$(upower -e | grep 'BAT')" | grep -E "percentage" | awk '{print $2}' | sed 's/\%//g') ]]; then | |
exit 0 | |
fi | |
for i in $(ls /sys/class/drm/): | |
do | |
WRITE_PATH="/sys/class/drm/$i/device/power_dpm_force_performance_level" | |
CommitWrite | |
done | |
fi | |
if [[ "$WRITE_PATH" == /sys/class/drm/card*/device/pp_od_clk_voltage ]]; then | |
# if device does not have a battery don't apply any power changes | |
if [[ -z $(upower -i "$(upower -e | grep 'BAT')" | grep -E "percentage" | awk '{print $2}' | sed 's/\%//g') ]]; then | |
exit 0 | |
fi | |
for i in $(ls /sys/class/drm/): | |
do | |
WRITE_PATH="/sys/class/drm/$i/device/pp_od_clk_voltage" | |
# TODO - remap reclock entries for: | |
# 780M: 2700, 2800 (7940H,7940HS) | |
# 760M: 2600 | |
# 740M: 2500 | |
# 680M: 2200, 2400 (6900HX,6980HX) | |
# 660M: 1800, 1900 (7535HS,7535U) | |
# 610M: 1900, 2200 (7945HX,7845HX,7745HX,7645HX) | |
# Vega (PRO only): 1800, 2000 (7730U,7530U) | |
# GPU Reclocking example | |
# TODO: change this to GPU model based | |
if [[ -n $USERIES6 ]]; then | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1600/ 2200/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1500/ 2000/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1400/ 1800/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1300/ 1600/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1200/ 1400/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1100/ 1300/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 1000/ 1200/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 900/ 1100/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 800/ 1000/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 700/ 900/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 600/ 800/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 500/ 700/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 400/ 600/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 300/ 400/g') | |
WRITE_VALUE=$(echo "$WRITE_VALUE" | sed -e 's/ 200/ 200/g') | |
echo "$WRITE_VALUE" >> ~/.power | |
fi | |
CommitWrite | |
done | |
fi | |
if [[ "$WRITE_PATH" == /sys/class/hwmon/hwmon*/power*_cap ]]; then | |
# if device does not have a battery don't apply any power changes | |
if [[ -z $(upower -i "$(upower -e | grep 'BAT')" | grep -E "percentage" | awk '{print $2}' | sed 's/\%//g') ]]; then | |
exit 0 | |
fi | |
# Deck and U series low-power/PRO have same 15w tdp | |
if [[ -n $DECK ]] || [[ -n $USERIES7LP ]]; then | |
CommitWrite | |
fi | |
# TODO - remap TDP entries for: | |
# HXSERIES6,HSERIES6: 45w | |
# HSSERIES6: 35w | |
# HXSERIES7: 55-75w | |
# HSERIES7, HSSERIES7: 35-54w | |
# 6000 and 7000 U series have same 15-30w tdp, handled by adjusting temperature instead | |
# TDP adjust example based on temperature | |
if [[ -n $USERIES6 ]] || [[ -n $USERIES7 ]]; then | |
if [[ "$WRITE_VALUE" == "15000000" ]]; then | |
ryzenadj -f 90 | |
fi | |
if [[ "$WRITE_VALUE" == "14000000" ]]; then | |
ryzenadj -f 86 | |
fi | |
if [[ "$WRITE_VALUE" == "13000000" ]]; then | |
ryzenadj -f 82 | |
fi | |
if [[ "$WRITE_VALUE" == "12000000" ]]; then | |
ryzenadj -f 78 | |
fi | |
if [[ "$WRITE_VALUE" == "11000000" ]]; then | |
ryzenadj -f 74 | |
fi | |
if [[ "$WRITE_VALUE" == "10000000" ]]; then | |
ryzenadj -f 70 | |
fi | |
if [[ "$WRITE_VALUE" == "9000000" ]]; then | |
ryzenadj -f 66 | |
fi | |
if [[ "$WRITE_VALUE" == "8000000" ]]; then | |
ryzenadj -f 62 | |
fi | |
if [[ "$WRITE_VALUE" == "7000000" ]]; then | |
ryzenadj -f 58 | |
fi | |
if [[ "$WRITE_VALUE" == "6000000" ]]; then | |
ryzenadj -f 54 | |
fi | |
if [[ "$WRITE_VALUE" == "5000000" ]]; then | |
ryzenadj -f 50 | |
fi | |
if [[ "$WRITE_VALUE" == "4000000" ]]; then | |
ryzenadj -f 46 | |
fi | |
if [[ "$WRITE_VALUE" == "3000000" ]]; then | |
ryzenadj -f 42 | |
fi | |
exit 0 | |
fi | |
# TDP adjust example based on TDP | |
if [[ -n $ZSERIES ]]; then | |
if [[ "$WRITE_VALUE" == "15000000" ]]; then | |
WRITE_VALUE="35000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "14000000" ]]; then | |
WRITE_VALUE="33000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "13000000" ]]; then | |
WRITE_VALUE="31000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "12000000" ]]; then | |
WRITE_VALUE="29000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "11000000" ]]; then | |
WRITE_VALUE="27000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "10000000" ]]; then | |
WRITE_VALUE="25000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "9000000" ]]; then | |
WRITE_VALUE="23000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "8000000" ]]; then | |
WRITE_VALUE="21000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "7000000" ]]; then | |
WRITE_VALUE="19000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "6000000" ]]; then | |
WRITE_VALUE="17000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "5000000" ]]; then | |
WRITE_VALUE="15000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "4000000" ]]; then | |
WRITE_VALUE="12000000" | |
CommitWrite | |
fi | |
if [[ "$WRITE_VALUE" == "3000000" ]]; then | |
WRITE_VALUE="10000000" | |
CommitWrite | |
fi | |
fi | |
fi | |
if [[ "$WRITE_PATH" == /sys/devices/platform/*/*/*/iio:device*/in_illuminance_integration_time ]]; then | |
CommitWrite | |
fi | |
if [[ "$WRITE_PATH" == /sys/devices/*/*/*/*/hwmon/hwmon*/led_brightness ]]; then | |
CommitWrite | |
fi | |
if [[ "$WRITE_PATH" == /sys/devices/*/*/*/*/hwmon/hwmon*/content_adaptive_brightness ]]; then | |
CommitWrite | |
fi | |
DeclineWrite |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment