Skip to content

Instantly share code, notes, and snippets.

@GloriousEggroll
Last active July 26, 2023 09:02
Show Gist options
  • Save GloriousEggroll/774a4316e9794d09dfaeb5f51ac9afbb to your computer and use it in GitHub Desktop.
Save GloriousEggroll/774a4316e9794d09dfaeb5f51ac9afbb to your computer and use it in GitHub Desktop.
#!/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